taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit fa8d4425bbcc60fd5dc28fa143cf6527d889a032
parent 832cf23a94f821ab0d36cb2fa3d463380fd0d05a
Author: Sebastian <sebasjm@gmail.com>
Date:   Mon, 28 Oct 2024 15:37:46 -0300

add test to pogen, refactor to avoid recursiveness

Diffstat:
Mpackages/pogen/package.json | 7+++++++
Apackages/pogen/src/potextract.test.ts | 46++++++++++++++++++++++++++++++++++++++++++++++
Mpackages/pogen/src/potextract.ts | 675++++++++++++++++++++++++++++++++++++++++++-------------------------------------
Mpnpm-lock.yaml | 355++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------
4 files changed, 668 insertions(+), 415 deletions(-)

diff --git a/packages/pogen/package.json b/packages/pogen/package.json @@ -8,14 +8,21 @@ "license": "GPL-2.0+", "scripts": { "clean": "rm -rf lib", + "test": "tsc && ava", "compile": "tsc" }, "devDependencies": { + "ava": "^6.0.1", "po2json": "^0.4.5", "typescript": "^5.3.3" }, "dependencies": { "@types/node": "^18.11.17", "glob": "^10.3.10" + }, + "ava": { + "files": [ + "lib/**/*test.*" + ] } } diff --git a/packages/pogen/src/potextract.test.ts b/packages/pogen/src/potextract.test.ts @@ -0,0 +1,46 @@ +/* + This file is part of GNU Taler + (C) 2022 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> + */ + +import test from "ava"; +import * as ts from "typescript"; +import { processFile2 } from "./potextract.js"; + +function wrapIntoFunction(src: string): string { + return ` +function testing():VNode { +return ${src} +} +`; +} + +function process(src: string): string { + const source = ts.createSourceFile( + "test.tsx", + wrapIntoFunction(src), + ts.ScriptTarget.ES2020, + ); + return processFile2(source).trim(); +} + +test("p2p: should select the coin", (t) => { + t.deepEqual( + process(`<i18n.Translate>something</i18n.Translate>`), + `#: test.tsx:3 +#, c-format +msgid "something" +msgstr ""`, + ); +}); diff --git a/packages/pogen/src/potextract.ts b/packages/pogen/src/potextract.ts @@ -19,7 +19,7 @@ */ import * as ts from "typescript"; import * as fs from "fs"; -import * as path from "path" +import * as path from "path"; const DEFAULT_PO_HEADER = `# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER @@ -38,368 +38,419 @@ msgstr "" "Language: \\n" "MIME-Version: 1.0\\n" "Content-Type: text/plain; charset=UTF-8\\n" -"Content-Transfer-Encoding: 8bit\\n"\n\n` - +"Content-Transfer-Encoding: 8bit\\n"\n\n`; function wordwrap(str: string, width: number = 80): string[] { var regex = ".{1," + width + "}(\\s|$)|\\S+(\\s|$)"; return str.match(RegExp(regex, "g")); } -function processFile( - sourceFile: ts.SourceFile, - outChunks: string[], - knownMessageIds: Set<string>, -) { - let lastTokLine = 0; - let preLastTokLine = 0; - processNode(sourceFile); - - function getTemplate(node: ts.Node): string { - switch (node.kind) { - case ts.SyntaxKind.FirstTemplateToken: - return (<any>node).text; - case ts.SyntaxKind.TemplateExpression: - let te = <ts.TemplateExpression>node; - let textFragments = [te.head.text]; - for (let tsp of te.templateSpans) { - textFragments.push(`%${(textFragments.length - 1) / 2 + 1}$s`); - textFragments.push(tsp.literal.text.replace(/%/g, "%%")); - } - return textFragments.join(""); - default: - return "(pogen.ts: unable to parse)"; - } +function getTemplate(node: ts.Node): string { + switch (node.kind) { + case ts.SyntaxKind.FirstTemplateToken: + return (<any>node).text; + case ts.SyntaxKind.TemplateExpression: + let te = <ts.TemplateExpression>node; + let textFragments = [te.head.text]; + for (let tsp of te.templateSpans) { + textFragments.push(`%${(textFragments.length - 1) / 2 + 1}$s`); + textFragments.push(tsp.literal.text.replace(/%/g, "%%")); + } + return textFragments.join(""); + default: + return "(pogen.ts: unable to parse)"; } +} - function getComment(node: ts.Node): string { - let lc = ts.getLineAndCharacterOfPosition(sourceFile, node.pos); - let lastComments; - for (let l = preLastTokLine; l < lastTokLine; l++) { - let pos = ts.getPositionOfLineAndCharacter(sourceFile, l, 0); - let comments = ts.getTrailingCommentRanges(sourceFile.text, pos); - if (comments) { - lastComments = comments; - } - } - if (!lastComments) { - return; - } - let candidate = lastComments[lastComments.length - 1]; - let candidateEndLine = ts.getLineAndCharacterOfPosition( - sourceFile, - candidate.end, - ).line; - if (candidateEndLine != lc.line - 1) { - return; - } - let text = sourceFile.text.slice(candidate.pos, candidate.end); - switch (candidate.kind) { - case ts.SyntaxKind.SingleLineCommentTrivia: - // Remove comment leader - text = text.replace(/^[/][/]\s*/, ""); - break; - case ts.SyntaxKind.MultiLineCommentTrivia: - // Remove comment leader and trailer, - // handling white space just like xgettext. - text = text - .replace(/^[/][*](\s*?\n|\s*)?/, "") - .replace(/(\n[ \t]*?)?[*][/]$/, ""); - break; +function getComment( + sourceFile: ts.SourceFile, + lastTokLine: number, + preLastTokLine: number, + node: ts.Node, +): string { + let lc = ts.getLineAndCharacterOfPosition(sourceFile, node.pos); + let lastComments; + for (let l = preLastTokLine; l < lastTokLine; l++) { + let pos = ts.getPositionOfLineAndCharacter(sourceFile, l, 0); + let comments = ts.getTrailingCommentRanges(sourceFile.text, pos); + if (comments) { + lastComments = comments; } - return text; } + if (!lastComments) { + return; + } + let candidate = lastComments[lastComments.length - 1]; + let candidateEndLine = ts.getLineAndCharacterOfPosition( + sourceFile, + candidate.end, + ).line; + if (candidateEndLine != lc.line - 1) { + return; + } + let text = sourceFile.text.slice(candidate.pos, candidate.end); + switch (candidate.kind) { + case ts.SyntaxKind.SingleLineCommentTrivia: + // Remove comment leader + text = text.replace(/^[/][/]\s*/, ""); + break; + case ts.SyntaxKind.MultiLineCommentTrivia: + // Remove comment leader and trailer, + // handling white space just like xgettext. + text = text + .replace(/^[/][*](\s*?\n|\s*)?/, "") + .replace(/(\n[ \t]*?)?[*][/]$/, ""); + break; + } + return text; +} - function getPath(node: ts.Node): string[] { - switch (node.kind) { - case ts.SyntaxKind.PropertyAccessExpression: - let pae = <ts.PropertyAccessExpression>node; - return Array.prototype.concat(getPath(pae.expression), [pae.name.text]); - case ts.SyntaxKind.Identifier: - let id = <ts.Identifier>node; - return [id.text]; - } - return ["(other)"]; +function getPath(node: ts.Node): string[] { + switch (node.kind) { + case ts.SyntaxKind.PropertyAccessExpression: + let pae = <ts.PropertyAccessExpression>node; + return Array.prototype.concat(getPath(pae.expression), [pae.name.text]); + case ts.SyntaxKind.Identifier: + let id = <ts.Identifier>node; + return [id.text]; } + return ["(other)"]; +} - function arrayEq<T>(a1: T[], a2: T[]) { - if (a1.length != a2.length) { +function arrayEq<T>(a1: T[], a2: T[]) { + if (a1.length != a2.length) { + return false; + } + for (let i = 0; i < a1.length; i++) { + if (a1[i] != a2[i]) { return false; } - for (let i = 0; i < a1.length; i++) { - if (a1[i] != a2[i]) { - return false; - } - } - return true; } + return true; +} - interface TemplateResult { - comment: string; - path: string[]; - template: string; - line: number; - } +interface TemplateResult { + comment: string; + path: string[]; + template: string; + line: number; +} - function processTaggedTemplateExpression( - tte: ts.TaggedTemplateExpression, - ): TemplateResult { - let lc = ts.getLineAndCharacterOfPosition(sourceFile, tte.pos); - if (lc.line != lastTokLine) { - preLastTokLine = lastTokLine; - lastTokLine = lc.line; - } - let path = getPath(tte.tag); - let res: TemplateResult = { - path, - line: lc.line, - comment: getComment(tte), - template: getTemplate(tte.template), - }; - return res; +function processTaggedTemplateExpression( + sourceFile: ts.SourceFile, + preLastTokLine: number, + lastTokLine: number, + tte: ts.TaggedTemplateExpression, +): TemplateResult { + let lc = ts.getLineAndCharacterOfPosition(sourceFile, tte.pos); + if (lc.line != lastTokLine) { + preLastTokLine = lastTokLine; // HERE + lastTokLine = lc.line; } + let path = getPath(tte.tag); + let res: TemplateResult = { + path, + line: lc.line, + comment: getComment(sourceFile, preLastTokLine, lastTokLine, tte), + template: getTemplate(tte.template), + }; + return res; +} - function formatMsgComment(line: number, comment?: string) { - if (comment) { - for (let cl of comment.split("\n")) { - outChunks.push(`#. ${cl}\n`); - } +function formatMsgComment( + sourceFile: ts.SourceFile, + outChunks: string[], + line: number, + comment?: string, +) { + if (comment) { + for (let cl of comment.split("\n")) { + outChunks.push(`#. ${cl}\n`); } - const fn = path.posix.relative(process.cwd(), sourceFile.fileName); - outChunks.push(`#: ${fn}:${line + 1}\n`); - outChunks.push(`#, c-format\n`); } + const fn = path.posix.relative(process.cwd(), sourceFile.fileName); + outChunks.push(`#: ${fn}:${line + 1}\n`); + outChunks.push(`#, c-format\n`); +} - function formatMsgLine(head: string, msg: string) { - const m = msg.match(/(.*\n|.+$)/g) - if (!m) return; - // Do escaping, wrap break at newlines - console.log("head", JSON.stringify(head)); - console.log("msg", JSON.stringify(msg)); - let parts = m.map((x) => x.replace(/\n/g, "\\n").replace(/"/g, '\\"')) - .map((p) => wordwrap(p)) - .reduce((a, b) => a.concat(b)); - if (parts.length == 1) { - outChunks.push(`${head} "${parts[0]}"\n`); - } else { - outChunks.push(`${head} ""\n`); - for (let p of parts) { - outChunks.push(`"${p}"\n`); - } +function formatMsgLine(outChunks: string[], head: string, msg: string) { + const m = msg.match(/(.*\n|.+$)/g); + if (!m) return; + // Do escaping, wrap break at newlines + console.log("head", JSON.stringify(head)); + console.log("msg", JSON.stringify(msg)); + let parts = m + .map((x) => x.replace(/\n/g, "\\n").replace(/"/g, '\\"')) + .map((p) => wordwrap(p)) + .reduce((a, b) => a.concat(b)); + if (parts.length == 1) { + outChunks.push(`${head} "${parts[0]}"\n`); + } else { + outChunks.push(`${head} ""\n`); + for (let p of parts) { + outChunks.push(`"${p}"\n`); } } +} - function getJsxElementPath(node: ts.Node) { - let path; - let process = (childNode) => { - switch (childNode.kind) { - case ts.SyntaxKind.JsxOpeningElement: { - let e = childNode as ts.JsxOpeningElement; - return (path = getPath(e.tagName)); - } - default: - break; - } - }; - ts.forEachChild(node, process); - return path; - } - - function translateJsxExpression(node: ts.Node, h) { - switch (node.kind) { - case ts.SyntaxKind.StringLiteral: { - let e = node as ts.StringLiteral; - return e.text; +function getJsxElementPath(node: ts.Node) { + let path; + let process = (childNode) => { + switch (childNode.kind) { + case ts.SyntaxKind.JsxOpeningElement: { + let e = childNode as ts.JsxOpeningElement; + return (path = getPath(e.tagName)); } default: - return `%${h[0]++}$s`; + break; } - } + }; + ts.forEachChild(node, process); + return path; +} - function trim(s: string) { - return s.replace(/^[ \n\t]*/, "").replace(/[ \n\t]*$/, ""); +function translateJsxExpression(node: ts.Node, h) { + switch (node.kind) { + case ts.SyntaxKind.StringLiteral: { + let e = node as ts.StringLiteral; + return e.text; + } + default: + return `%${h[0]++}$s`; } +} + +function trim(s: string) { + return s.replace(/^[ \n\t]*/, "").replace(/[ \n\t]*$/, ""); +} - function getJsxContent(node: ts.Node) { - let fragments = []; - let holeNum = [1]; - let process = (childNode) => { - switch (childNode.kind) { - case ts.SyntaxKind.JsxText: { - let e = childNode as ts.JsxText; - let s = e.text; - let t = s.split("\n").map(trim).join(" "); - if (s[0] === " ") { - t = " " + t; - } - if (s[s.length - 1] === " ") { - t = t + " "; - } - fragments.push(t); +function getJsxContent(node: ts.Node) { + let fragments = []; + let holeNum = [1]; + let process = (childNode) => { + switch (childNode.kind) { + case ts.SyntaxKind.JsxText: { + let e = childNode as ts.JsxText; + let s = e.text; + let t = s.split("\n").map(trim).join(" "); + if (s[0] === " ") { + t = " " + t; } - case ts.SyntaxKind.JsxOpeningElement: - break; - case ts.SyntaxKind.JsxSelfClosingElement: - case ts.SyntaxKind.JsxElement: - fragments.push(`%${holeNum[0]++}$s`); - break; - case ts.SyntaxKind.JsxExpression: { - let e = childNode as ts.JsxExpression; - fragments.push(translateJsxExpression(e.expression, holeNum)); - break; + if (s[s.length - 1] === " ") { + t = t + " "; } - case ts.SyntaxKind.JsxClosingElement: - break; - default: - console.log("unhandled node type: ", childNode.kind) - let lc = ts.getLineAndCharacterOfPosition( - childNode.getSourceFile(), - childNode.getStart(), - ); - console.error( - `unrecognized syntax in JSX Element ${ts.SyntaxKind[childNode.kind]} (${childNode.getSourceFile().fileName}:${lc.line + 1}:${lc.character + 1}`, - ); - break; + fragments.push(t); } - }; - ts.forEachChild(node, process); - return fragments.join("").trim().replace(/ +/g, " "); - } - - function getJsxSingular(node: ts.Node) { - let res; - let process = (childNode) => { - switch (childNode.kind) { - case ts.SyntaxKind.JsxElement: { - let path = getJsxElementPath(childNode); - if (arrayEq(path, ["i18n", "TranslateSingular"])) { - res = getJsxContent(childNode); - } - } - default: - break; + case ts.SyntaxKind.JsxOpeningElement: + break; + case ts.SyntaxKind.JsxSelfClosingElement: + case ts.SyntaxKind.JsxElement: + fragments.push(`%${holeNum[0]++}$s`); + break; + case ts.SyntaxKind.JsxExpression: { + let e = childNode as ts.JsxExpression; + fragments.push(translateJsxExpression(e.expression, holeNum)); + break; } - }; - ts.forEachChild(node, process); - return res; - } + case ts.SyntaxKind.JsxClosingElement: + break; + default: + console.log("unhandled node type: ", childNode.kind); + let lc = ts.getLineAndCharacterOfPosition( + childNode.getSourceFile(), + childNode.getStart(), + ); + console.error( + `unrecognized syntax in JSX Element ${ + ts.SyntaxKind[childNode.kind] + } (${childNode.getSourceFile().fileName}:${lc.line + 1}:${ + lc.character + 1 + }`, + ); + break; + } + }; + ts.forEachChild(node, process); + return fragments.join("").trim().replace(/ +/g, " "); +} - function getJsxPlural(node: ts.Node) { - let res; - let process = (childNode) => { - switch (childNode.kind) { - case ts.SyntaxKind.JsxElement: { - let path = getJsxElementPath(childNode); - if (arrayEq(path, ["i18n", "TranslatePlural"])) { - res = getJsxContent(childNode); - } +function getJsxSingular(node: ts.Node) { + let res; + let process = (childNode) => { + switch (childNode.kind) { + case ts.SyntaxKind.JsxElement: { + let path = getJsxElementPath(childNode); + if (arrayEq(path, ["i18n", "TranslateSingular"])) { + res = getJsxContent(childNode); } - default: - break; } - }; - ts.forEachChild(node, process); - return res; - } + default: + break; + } + }; + ts.forEachChild(node, process); + return res; +} - function processNode(node: ts.Node) { - switch (node.kind) { - case ts.SyntaxKind.JsxElement: - let path = getJsxElementPath(node); - if (arrayEq(path, ["i18n", "Translate"])) { - let content = getJsxContent(node); - let { line } = ts.getLineAndCharacterOfPosition(sourceFile, node.pos); - let comment = getComment(node); - if (!knownMessageIds.has(content)) { - knownMessageIds.add(content); - formatMsgComment(line, comment); - formatMsgLine("msgid", content); - outChunks.push(`msgstr ""\n`); - outChunks.push("\n"); - } - return; - } - if (arrayEq(path, ["i18n", "TranslateSwitch"])) { - let { line } = ts.getLineAndCharacterOfPosition(sourceFile, node.pos); - let comment = getComment(node); - formatMsgComment(line, comment); - let singularForm = getJsxSingular(node); - if (!singularForm) { - console.error("singular form missing"); - process.exit(1); - } - let pluralForm = getJsxPlural(node); - if (!pluralForm) { - console.error("plural form missing"); - process.exit(1); - } - if (!knownMessageIds.has(singularForm)) { - knownMessageIds.add(singularForm); - formatMsgLine("msgid", singularForm); - formatMsgLine("msgid_plural", pluralForm); - outChunks.push(`msgstr[0] ""\n`); - outChunks.push(`msgstr[1] ""\n`); - outChunks.push(`\n`); - } - return; +function getJsxPlural(node: ts.Node) { + let res; + let process = (childNode) => { + switch (childNode.kind) { + case ts.SyntaxKind.JsxElement: { + let path = getJsxElementPath(childNode); + if (arrayEq(path, ["i18n", "TranslatePlural"])) { + res = getJsxContent(childNode); } + } + default: break; - case ts.SyntaxKind.CallExpression: { - // might be i18n.plural(i18n[.X]`...`, i18n[.X]`...`) - let ce = <ts.CallExpression>node; - let path = getPath(ce.expression); - if (!arrayEq(path, ["i18n", "plural"])) { - break; + } + }; + ts.forEachChild(node, process); + return res; +} + +function processNode( + node: ts.Node, + preLastTokLine: number, + lastTokLine: number, + sourceFile: ts.SourceFile, + outChunks: string[], + knownMessageIds: Set<string>, +) { + switch (node.kind) { + case ts.SyntaxKind.JsxElement: + let path = getJsxElementPath(node); + if (arrayEq(path, ["i18n", "Translate"])) { + let content = getJsxContent(node); + let { line } = ts.getLineAndCharacterOfPosition(sourceFile, node.pos); + let comment = getComment(sourceFile, preLastTokLine, lastTokLine, node); + if (!knownMessageIds.has(content)) { + knownMessageIds.add(content); + formatMsgComment(sourceFile, outChunks, line, comment); + formatMsgLine(outChunks, "msgid", content); + outChunks.push(`msgstr ""\n`); + outChunks.push("\n"); } - if (ce.arguments[0].kind != ts.SyntaxKind.TaggedTemplateExpression) { - break; + return; + } + if (arrayEq(path, ["i18n", "TranslateSwitch"])) { + let { line } = ts.getLineAndCharacterOfPosition(sourceFile, node.pos); + let comment = getComment(sourceFile, preLastTokLine, lastTokLine, node); + formatMsgComment(sourceFile, outChunks, line, comment); + let singularForm = getJsxSingular(node); + if (!singularForm) { + console.error("singular form missing"); + process.exit(1); } - if (ce.arguments[1].kind != ts.SyntaxKind.TaggedTemplateExpression) { - break; + let pluralForm = getJsxPlural(node); + if (!pluralForm) { + console.error("plural form missing"); + process.exit(1); } - let { line } = ts.getLineAndCharacterOfPosition(sourceFile, ce.pos); - let t1 = processTaggedTemplateExpression( - <ts.TaggedTemplateExpression>ce.arguments[0], - ); - let t2 = processTaggedTemplateExpression( - <ts.TaggedTemplateExpression>ce.arguments[1], - ); - let comment = getComment(ce); - const msgid = t1.template; - if (!knownMessageIds.has(msgid)) { - knownMessageIds.add(msgid); - formatMsgComment(line, comment); - formatMsgLine("msgid", t1.template); - formatMsgLine("msgid_plural", t2.template); + if (!knownMessageIds.has(singularForm)) { + knownMessageIds.add(singularForm); + formatMsgLine(outChunks, "msgid", singularForm); + formatMsgLine(outChunks, "msgid_plural", pluralForm); outChunks.push(`msgstr[0] ""\n`); outChunks.push(`msgstr[1] ""\n`); - outChunks.push("\n"); + outChunks.push(`\n`); } - - // Important: no processing for child i18n expressions here return; } - case ts.SyntaxKind.TaggedTemplateExpression: { - let tte = <ts.TaggedTemplateExpression>node; - let { comment, template, line, path } = - processTaggedTemplateExpression(tte); - if (path[0] != "i18n") { - break; - } - const msgid = template; - if (!knownMessageIds.has(msgid)) { - knownMessageIds.add(msgid); - formatMsgComment(line, comment); - formatMsgLine("msgid", template); - outChunks.push(`msgstr ""\n`); - outChunks.push("\n"); - } + break; + case ts.SyntaxKind.CallExpression: { + // might be i18n.plural(i18n[.X]`...`, i18n[.X]`...`) + let ce = <ts.CallExpression>node; + let path = getPath(ce.expression); + if (!arrayEq(path, ["i18n", "plural"])) { break; } - } + if (ce.arguments[0].kind != ts.SyntaxKind.TaggedTemplateExpression) { + break; + } + if (ce.arguments[1].kind != ts.SyntaxKind.TaggedTemplateExpression) { + break; + } + let { line } = ts.getLineAndCharacterOfPosition(sourceFile, ce.pos); + let t1 = processTaggedTemplateExpression( + sourceFile, + preLastTokLine, + lastTokLine, + <ts.TaggedTemplateExpression>ce.arguments[0], + ); + let t2 = processTaggedTemplateExpression( + sourceFile, + preLastTokLine, + lastTokLine, + <ts.TaggedTemplateExpression>ce.arguments[1], + ); + let comment = getComment(sourceFile, preLastTokLine, lastTokLine, ce); + const msgid = t1.template; + if (!knownMessageIds.has(msgid)) { + knownMessageIds.add(msgid); + formatMsgComment(sourceFile, outChunks, line, comment); + formatMsgLine(outChunks, "msgid", t1.template); + formatMsgLine(outChunks, "msgid_plural", t2.template); + outChunks.push(`msgstr[0] ""\n`); + outChunks.push(`msgstr[1] ""\n`); + outChunks.push("\n"); + } - ts.forEachChild(node, processNode); + // Important: no processing for child i18n expressions here + return; + } + case ts.SyntaxKind.TaggedTemplateExpression: { + let tte = <ts.TaggedTemplateExpression>node; + let { comment, template, line, path } = processTaggedTemplateExpression( + sourceFile, + preLastTokLine, + lastTokLine, + tte, + ); + if (path[0] != "i18n") { + break; + } + const msgid = template; + if (!knownMessageIds.has(msgid)) { + knownMessageIds.add(msgid); + formatMsgComment(sourceFile, outChunks, line, comment); + formatMsgLine(outChunks, "msgid", template); + outChunks.push(`msgstr ""\n`); + outChunks.push("\n"); + } + break; + } } + + ts.forEachChild(node, (n) => { + processNode( + n, + lastTokLine, + preLastTokLine, + sourceFile, + outChunks, + knownMessageIds, + ); + }); +} + +export function processFile2(sourceFile: ts.SourceFile): string { + // let lastTokLine = 0; + // let preLastTokLine = 0; + const result: string[] = new Array<string>(); + processNode(sourceFile, 0, 0, sourceFile, result, new Set<string>()); + return result.join(""); +} + +export function processFile( + sourceFile: ts.SourceFile, + outChunks: string[], + knownMessageIds: Set<string>, +) { + // let lastTokLine = 0; + // let preLastTokLine = 0; + processNode(sourceFile, 0, 0, sourceFile, outChunks, knownMessageIds); } export function potextract() { @@ -439,11 +490,11 @@ export function potextract() { !prog.isSourceFileDefaultLibrary(x), ); - let header: string + let header: string; try { - header = fs.readFileSync("src/i18n/poheader", "utf-8") + header = fs.readFileSync("src/i18n/poheader", "utf-8"); } catch (e) { - header = DEFAULT_PO_HEADER + header = DEFAULT_PO_HEADER; } const chunks = [header]; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml @@ -40,7 +40,7 @@ importers: version: link:../web-util '@headlessui/react': specifier: ^1.7.14 - version: 1.7.14(react-dom@18.3.1)(react@18.3.1) + version: 1.7.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@heroicons/react': specifier: ^2.0.17 version: 2.0.17(react@18.3.1) @@ -65,10 +65,10 @@ importers: version: link:../pogen '@tailwindcss/forms': specifier: ^0.5.3 - version: 0.5.3(tailwindcss@3.3.2) + version: 0.5.3(tailwindcss@3.3.2(ts-node@10.9.1(@types/node@20.11.13)(typescript@5.3.3))) '@tailwindcss/typography': specifier: ^0.5.9 - version: 0.5.9(tailwindcss@3.3.2) + version: 0.5.9(tailwindcss@3.3.2(ts-node@10.9.1(@types/node@20.11.13)(typescript@5.3.3))) '@types/chai': specifier: ^4.3.0 version: 4.3.3 @@ -80,7 +80,7 @@ importers: version: 10.0.1 '@typescript-eslint/eslint-plugin': specifier: ^6.19.0 - version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) + version: 6.19.0(@typescript-eslint/parser@6.19.0(eslint@8.56.0)(typescript@5.3.3))(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': specifier: ^6.19.0 version: 6.19.0(eslint@8.56.0)(typescript@5.3.3) @@ -113,10 +113,10 @@ importers: version: 8.4.23 postcss-cli: specifier: ^10.1.0 - version: 10.1.0(postcss@8.4.23) + version: 10.1.0(postcss@8.4.23)(ts-node@10.9.1(@types/node@20.11.13)(typescript@5.3.3)) tailwindcss: specifier: ^3.3.2 - version: 3.3.2 + version: 3.3.2(ts-node@10.9.1(@types/node@20.11.13)(typescript@5.3.3)) typescript: specifier: 5.3.3 version: 5.3.3 @@ -160,7 +160,7 @@ importers: devDependencies: ava: specifier: ^6.0.1 - version: 6.0.1(@ava/typescript@4.1.0) + version: 6.0.1(@ava/typescript@4.1.0)(encoding@0.1.13) typescript: specifier: ^5.3.3 version: 5.3.3 @@ -279,7 +279,7 @@ importers: version: 18.11.17 '@typescript-eslint/eslint-plugin': specifier: ^4.22.0 - version: 4.33.0(@typescript-eslint/parser@4.33.0)(eslint@7.32.0)(typescript@5.3.3) + version: 4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.3.3))(eslint@7.32.0)(typescript@5.3.3) '@typescript-eslint/parser': specifier: ^4.22.0 version: 4.33.0(eslint@7.32.0)(typescript@5.3.3) @@ -318,7 +318,7 @@ importers: version: 7.32.0 eslint-config-preact: specifier: ^1.1.4 - version: 1.3.0(@typescript-eslint/eslint-plugin@4.33.0)(eslint@7.32.0)(typescript@5.3.3) + version: 1.3.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.3.3))(eslint@7.32.0)(typescript@5.3.3))(eslint@7.32.0)(typescript@5.3.3) eslint-plugin-header: specifier: ^3.1.1 version: 3.1.1(eslint@7.32.0) @@ -330,7 +330,7 @@ importers: version: 0.0.10 html-webpack-skip-assets-plugin: specifier: ^1.0.1 - version: 1.0.3(html-webpack-plugin@5.6.0)(webpack@4.46.0) + version: 1.0.3(html-webpack-plugin@5.6.0(webpack@4.46.0))(webpack@4.46.0) inline-chunk-html-plugin: specifier: ^1.1.1 version: 1.1.1 @@ -379,10 +379,10 @@ importers: version: link:../pogen '@tailwindcss/forms': specifier: ^0.5.3 - version: 0.5.3(tailwindcss@3.3.2) + version: 0.5.3(tailwindcss@3.3.2(ts-node@10.9.1(@types/node@18.11.17)(typescript@5.3.3))) '@tailwindcss/typography': specifier: ^0.5.9 - version: 0.5.9(tailwindcss@3.3.2) + version: 0.5.9(tailwindcss@3.3.2(ts-node@10.9.1(@types/node@18.11.17)(typescript@5.3.3))) '@types/chai': specifier: ^4.3.0 version: 4.3.3 @@ -397,7 +397,7 @@ importers: version: 18.11.17 '@typescript-eslint/eslint-plugin': specifier: ^6.19.0 - version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) + version: 6.19.0(@typescript-eslint/parser@6.19.0(eslint@8.56.0)(typescript@5.3.3))(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': specifier: ^6.19.0 version: 6.19.0(eslint@8.56.0)(typescript@5.3.3) @@ -427,7 +427,7 @@ importers: version: 0.4.5 tailwindcss: specifier: ^3.3.2 - version: 3.3.2 + version: 3.3.2(ts-node@10.9.1(@types/node@18.11.17)(typescript@5.3.3)) typescript: specifier: 5.3.3 version: 5.3.3 @@ -452,10 +452,10 @@ importers: version: link:../pogen '@tailwindcss/forms': specifier: ^0.5.3 - version: 0.5.3(tailwindcss@3.3.2) + version: 0.5.3(tailwindcss@3.3.2(ts-node@10.9.1(@types/node@18.11.17)(typescript@5.3.3))) '@tailwindcss/typography': specifier: ^0.5.9 - version: 0.5.9(tailwindcss@3.3.2) + version: 0.5.9(tailwindcss@3.3.2(ts-node@10.9.1(@types/node@18.11.17)(typescript@5.3.3))) '@types/chai': specifier: ^4.3.0 version: 4.3.3 @@ -470,7 +470,7 @@ importers: version: 18.11.17 '@typescript-eslint/eslint-plugin': specifier: ^6.19.0 - version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) + version: 6.19.0(@typescript-eslint/parser@6.19.0(eslint@8.56.0)(typescript@5.3.3))(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': specifier: ^6.19.0 version: 6.19.0(eslint@8.56.0)(typescript@5.3.3) @@ -500,7 +500,7 @@ importers: version: 0.4.5 tailwindcss: specifier: ^3.3.2 - version: 3.3.2 + version: 3.3.2(ts-node@10.9.1(@types/node@18.11.17)(typescript@5.3.3)) typescript: specifier: 5.3.3 version: 5.3.3 @@ -523,7 +523,7 @@ importers: version: 20.4.1 ava: specifier: ^6.0.1 - version: 6.0.1(@ava/typescript@4.1.0) + version: 6.0.1(@ava/typescript@4.1.0)(encoding@0.1.13) prettier: specifier: ^3.1.1 version: 3.1.1 @@ -551,10 +551,10 @@ importers: version: link:../pogen '@tailwindcss/forms': specifier: ^0.5.3 - version: 0.5.3(tailwindcss@3.3.2) + version: 0.5.3(tailwindcss@3.3.2(ts-node@10.9.1(@types/node@18.11.17)(typescript@5.3.3))) '@tailwindcss/typography': specifier: ^0.5.9 - version: 0.5.9(tailwindcss@3.3.2) + version: 0.5.9(tailwindcss@3.3.2(ts-node@10.9.1(@types/node@18.11.17)(typescript@5.3.3))) '@types/chai': specifier: ^4.3.0 version: 4.3.3 @@ -569,7 +569,7 @@ importers: version: 18.11.17 '@typescript-eslint/eslint-plugin': specifier: ^6.19.0 - version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) + version: 6.19.0(@typescript-eslint/parser@6.19.0(eslint@8.56.0)(typescript@5.3.3))(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': specifier: ^6.19.0 version: 6.19.0(eslint@8.56.0)(typescript@5.3.3) @@ -599,7 +599,7 @@ importers: version: 0.4.5 tailwindcss: specifier: ^3.3.2 - version: 3.3.2 + version: 3.3.2(ts-node@10.9.1(@types/node@18.11.17)(typescript@5.3.3)) typescript: specifier: 5.3.3 version: 5.3.3 @@ -648,7 +648,7 @@ importers: version: 20.11.13 '@typescript-eslint/eslint-plugin': specifier: ^4.22.0 - version: 4.33.0(@typescript-eslint/parser@4.33.0)(eslint@7.32.0)(typescript@5.3.3) + version: 4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.3.3))(eslint@7.32.0)(typescript@5.3.3) '@typescript-eslint/parser': specifier: ^4.22.0 version: 4.33.0(eslint@7.32.0)(typescript@5.3.3) @@ -663,7 +663,7 @@ importers: version: 7.32.0 eslint-config-preact: specifier: ^1.1.4 - version: 1.3.0(@typescript-eslint/eslint-plugin@4.33.0)(eslint@7.32.0)(typescript@5.3.3) + version: 1.3.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.3.3))(eslint@7.32.0)(typescript@5.3.3))(eslint@7.32.0)(typescript@5.3.3) eslint-plugin-header: specifier: ^3.1.1 version: 3.1.1(eslint@7.32.0) @@ -736,7 +736,7 @@ importers: version: 18.11.17 '@typescript-eslint/eslint-plugin': specifier: ^6.19.0 - version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) + version: 6.19.0(@typescript-eslint/parser@6.19.0(eslint@8.56.0)(typescript@5.3.3))(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': specifier: ^6.19.0 version: 6.19.0(eslint@8.56.0)(typescript@5.3.3) @@ -801,6 +801,9 @@ importers: specifier: ^10.3.10 version: 10.3.10 devDependencies: + ava: + specifier: ^6.0.1 + version: 6.0.1(@ava/typescript@4.1.0)(encoding@0.1.13) po2json: specifier: ^0.4.5 version: 0.4.5 @@ -862,13 +865,13 @@ importers: version: 18.11.17 '@typescript-eslint/eslint-plugin': specifier: ^6.19.0 - version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) + version: 6.19.0(@typescript-eslint/parser@6.19.0(eslint@8.56.0)(typescript@5.3.3))(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': specifier: ^6.19.0 version: 6.19.0(eslint@8.56.0)(typescript@5.3.3) ava: specifier: ^6.0.1 - version: 6.0.1(@ava/typescript@4.1.0) + version: 6.0.1(@ava/typescript@4.1.0)(encoding@0.1.13) esbuild: specifier: ^0.19.9 version: 0.19.9 @@ -933,13 +936,13 @@ importers: version: link:../pogen '@typescript-eslint/eslint-plugin': specifier: ^5.36.1 - version: 5.41.0(@typescript-eslint/parser@5.41.0)(eslint@8.26.0)(typescript@5.3.3) + version: 5.41.0(@typescript-eslint/parser@5.41.0(eslint@8.26.0)(typescript@5.3.3))(eslint@8.26.0)(typescript@5.3.3) '@typescript-eslint/parser': specifier: ^5.36.1 version: 5.41.0(eslint@8.26.0)(typescript@5.3.3) ava: specifier: ^6.0.1 - version: 6.0.1(@ava/typescript@4.1.0) + version: 6.0.1(@ava/typescript@4.1.0)(encoding@0.1.13) c8: specifier: ^8.0.1 version: 8.0.1 @@ -948,10 +951,10 @@ importers: version: 8.26.0 eslint-config-airbnb-typescript: specifier: ^17.1.0 - version: 17.1.0(@typescript-eslint/eslint-plugin@5.41.0)(@typescript-eslint/parser@5.41.0)(eslint-plugin-import@2.29.1)(eslint@8.26.0) + version: 17.1.0(@typescript-eslint/eslint-plugin@5.41.0(@typescript-eslint/parser@5.41.0(eslint@8.26.0)(typescript@5.3.3))(eslint@8.26.0)(typescript@5.3.3))(@typescript-eslint/parser@5.41.0(eslint@8.26.0)(typescript@5.3.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.41.0(eslint@8.26.0)(typescript@5.3.3))(eslint@8.26.0))(eslint@8.26.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@5.41.0)(eslint@8.26.0) + version: 2.29.1(@typescript-eslint/parser@5.41.0(eslint@8.26.0)(typescript@5.3.3))(eslint@8.26.0) eslint-plugin-jsx-a11y: specifier: ^6.8.0 version: 6.8.0(eslint@8.26.0) @@ -1079,7 +1082,7 @@ importers: version: 18.11.17 '@typescript-eslint/eslint-plugin': specifier: ^6.19.0 - version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) + version: 6.19.0(@typescript-eslint/parser@6.19.0(eslint@8.56.0)(typescript@5.3.3))(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/parser': specifier: ^6.19.0 version: 6.19.0(eslint@8.56.0)(typescript@5.3.3) @@ -1109,7 +1112,7 @@ importers: version: 4.2.2 preact-cli: specifier: ^3.3.5 - version: 3.4.1(eslint@8.56.0)(preact-render-to-string@5.2.6)(preact@10.11.3) + version: 3.4.1(encoding@0.1.13)(eslint@8.56.0)(preact-render-to-string@5.2.6(preact@10.11.3))(preact@10.11.3)(ts-node@10.9.1(@types/node@18.11.17)(typescript@5.3.3)) preact-render-to-string: specifier: ^5.1.19 version: 5.2.6(preact@10.11.3) @@ -1118,7 +1121,7 @@ importers: version: 5.3.3 web-ext: specifier: ^7.11.0 - version: 7.11.0 + version: 7.11.0(express@4.18.2) packages/web-util: dependencies: @@ -1133,7 +1136,7 @@ importers: version: 0.0.197 tailwindcss: specifier: ^3.3.2 - version: 3.3.2 + version: 3.3.2(ts-node@10.9.1(@types/node@18.11.17)(typescript@5.3.3)) devDependencies: '@babel/preset-react': specifier: ^7.22.3 @@ -1191,7 +1194,7 @@ importers: version: 8.4.23 postcss-load-config: specifier: ^4.0.1 - version: 4.0.1(postcss@8.4.23) + version: 4.0.1(postcss@8.4.23)(ts-node@10.9.1(@types/node@18.11.17)(typescript@5.3.3)) preact: specifier: 10.11.3 version: 10.11.3 @@ -1510,10 +1513,12 @@ packages: '@babel/parser@7.19.6': resolution: {integrity: sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA==} engines: {node: '>=6.0.0'} + hasBin: true '@babel/parser@7.21.8': resolution: {integrity: sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==} engines: {node: '>=6.0.0'} + hasBin: true '@babel/parser@7.23.5': resolution: {integrity: sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==} @@ -1584,6 +1589,7 @@ packages: '@babel/plugin-proposal-export-namespace-from@7.18.9': resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead. peerDependencies: '@babel/core': ^7.0.0-0 @@ -1639,6 +1645,7 @@ packages: '@babel/plugin-proposal-private-property-in-object@7.18.6': resolution: {integrity: sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead. peerDependencies: '@babel/core': ^7.0.0-0 @@ -2634,14 +2641,17 @@ packages: '@humanwhocodes/config-array@0.11.13': resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead '@humanwhocodes/config-array@0.11.6': resolution: {integrity: sha512-jJr+hPTJYKyDILJfhNSHsjiwXYf26Flsz8DvNndOsHs5pwSnpGUEy8yzF0JYhCEvTDdV2vuOK5tt8BVhwO5/hg==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead '@humanwhocodes/config-array@0.5.0': resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} @@ -2649,9 +2659,11 @@ packages: '@humanwhocodes/object-schema@1.2.1': resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + deprecated: Use @eslint/object-schema instead '@humanwhocodes/object-schema@2.0.1': resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + deprecated: Use @eslint/object-schema instead '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -3418,6 +3430,7 @@ packages: acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} + hasBin: true acorn@8.11.2: resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} @@ -3432,6 +3445,7 @@ packages: acorn@8.8.1: resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} engines: {node: '>=0.4.0'} + hasBin: true addons-linter@6.21.0: resolution: {integrity: sha512-4GBn14BR16FZE7dog6uz+1HO6V3B+mAVxmbwxRhed2y5eyrwIW832TmEpku+5A5bbovBZ4gilXEtBsl6A1AMmg==} @@ -3582,6 +3596,7 @@ packages: are-we-there-yet@2.0.0: resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} engines: {node: '>=10'} + deprecated: This package is no longer supported. arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} @@ -3952,6 +3967,7 @@ packages: browserslist@4.21.5: resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true browserslist@4.22.2: resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} @@ -4964,6 +4980,7 @@ packages: ejs@3.1.8: resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==} engines: {node: '>=0.10.0'} + hasBin: true electron-to-chromium@1.4.284: resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==} @@ -5261,10 +5278,12 @@ packages: eslint@7.32.0: resolution: {integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==} engines: {node: ^10.12.0 || >=12.0.0} + hasBin: true eslint@8.26.0: resolution: {integrity: sha512-kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true eslint@8.56.0: resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} @@ -5656,6 +5675,7 @@ packages: gauge@3.0.2: resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} engines: {node: '>=10'} + deprecated: This package is no longer supported. gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} @@ -5718,7 +5738,7 @@ packages: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} gettext-parser@1.1.0: - resolution: {integrity: sha1-LFpmONiTk0ubVQN9CtgstwBLJnk=} + resolution: {integrity: sha512-zL3eayB0jF+cr6vogH/VJKoKcj7uQj2TPByaaj6a4k/3elk9iq7fiwCM2FqdzS/umo021RetSanVisarzeb9Wg==} github-from-package@0.0.0: resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} @@ -5752,12 +5772,15 @@ packages: glob@7.1.6: resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + deprecated: Glob versions prior to v9 are no longer supported glob@7.2.0: resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + deprecated: Glob versions prior to v9 are no longer supported glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} @@ -5850,6 +5873,7 @@ packages: har-validator@5.1.5: resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} engines: {node: '>=6'} + deprecated: this library is no longer supported has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} @@ -6162,6 +6186,7 @@ packages: inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.1: resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==} @@ -6181,6 +6206,7 @@ packages: inline-chunk-html-plugin@1.1.1: resolution: {integrity: sha512-6W1eGIj8z/Yla6xJx5il6jJfCxMZS3kVkbiLQThbbjdsDLRIWkUVmpnhfW2l6WAwCW+qfy0zoXVGBZM1E5XF3g==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. internal-slot@1.0.6: resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} @@ -6301,6 +6327,7 @@ packages: is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} + hasBin: true is-extendable@0.1.1: resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} @@ -6568,6 +6595,7 @@ packages: jake@10.8.5: resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} engines: {node: '>=10'} + hasBin: true jed@1.1.1: resolution: {integrity: sha512-z35ZSEcXHxLW4yumw0dF6L464NT36vmx3wxJw8MDpraBcWuNVgUPZgPJKcu1HekNgwlMFNqol7i/IpSbjhqwqA==} @@ -6658,6 +6686,7 @@ packages: json5@2.2.1: resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} engines: {node: '>=6'} + hasBin: true json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} @@ -6864,9 +6893,11 @@ packages: loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true loupe@2.3.4: resolution: {integrity: sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==} + deprecated: Please upgrade to 2.3.7 which fixes GHSA-4q6p-r6v2-jvc5 lower-case@1.1.4: resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} @@ -7055,6 +7086,7 @@ packages: mini-svg-data-uri@1.4.4: resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} + hasBin: true minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} @@ -7184,6 +7216,7 @@ packages: mustache@4.2.0: resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true mv@2.1.1: resolution: {integrity: sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==} @@ -7209,10 +7242,12 @@ packages: nanoid@3.3.1: resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true nanoid@3.3.6: resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} @@ -7299,7 +7334,8 @@ packages: engines: {node: '>=12.19'} nomnom@1.8.1: - resolution: {integrity: sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=} + resolution: {integrity: sha512-5s0JxqhDx9/rksG2BTMVN1enjWSvPidpoSgViZU4ZXULyTe+7jxcCRLB6f42Z0l1xYJpleCBtSyY6Lwg3uu5CQ==} + deprecated: Package no longer supported. Contact support@npmjs.com for more info. nopt@5.0.0: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} @@ -7344,6 +7380,7 @@ packages: npmlog@5.0.1: resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + deprecated: This package is no longer supported. nth-check@1.0.2: resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} @@ -7357,6 +7394,7 @@ packages: nyc@15.1.0: resolution: {integrity: sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==} engines: {node: '>=8.9'} + hasBin: true oauth-sign@0.9.0: resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} @@ -8302,6 +8340,10 @@ packages: q@1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} engines: {node: '>=0.6.0', teleport: '>=0.2.0'} + deprecated: |- + You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. + + (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) qrcode-generator@1.4.4: resolution: {integrity: sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==} @@ -8665,6 +8707,7 @@ packages: sass@1.56.1: resolution: {integrity: sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ==} engines: {node: '>=12.0.0'} + hasBin: true sax@1.2.4: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} @@ -8721,6 +8764,7 @@ packages: semver@6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} @@ -8854,6 +8898,7 @@ packages: sirv-cli@1.0.14: resolution: {integrity: sha512-yyUTNr984ANKDloqepkYbBSqvx3buwYg2sQKPWjSU+IBia5loaoka2If8N9CMwt8AfP179cdEl7kYJ//iWJHjQ==} engines: {node: '>= 10'} + hasBin: true sirv@1.0.19: resolution: {integrity: sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==} @@ -8933,6 +8978,7 @@ packages: source-map-url@0.4.1: resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} + deprecated: See https://github.com/lydell/source-map-url#deprecated source-map@0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} @@ -8952,6 +8998,7 @@ packages: sourcemap-codec@1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead spawn-sync@1.0.15: resolution: {integrity: sha512-9DWBgrgYZzNghseho0JOuh+5fg9u6QWhAWa51QC7+U5rCheZ/j1DrEZnyE0RBBRqZ9uEXGPgSSM0nky6burpVw==} @@ -8995,6 +9042,7 @@ packages: stable@0.1.8: resolution: {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' stack-trace@0.0.10: resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} @@ -9181,10 +9229,13 @@ packages: svgo@1.3.2: resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==} engines: {node: '>=4.0.0'} + deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x. + hasBin: true svgo@2.8.0: resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} engines: {node: '>=10.13.0'} + hasBin: true swr@2.0.3: resolution: {integrity: sha512-sGvQDok/AHEWTPfhUWXEHBVEXmgGnuahyhmRQbjl9XBYxT/MSlAzvXEKQpyM++bMPaI52vcWS2HiKNaW7+9OFw==} @@ -9689,6 +9740,7 @@ packages: uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} @@ -12578,7 +12630,7 @@ snapshots: '@gar/promisify@1.1.3': {} - '@headlessui/react@1.7.14(react-dom@18.3.1)(react@18.3.1)': + '@headlessui/react@1.7.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: client-only: 0.0.1 react: 18.3.1 @@ -12929,12 +12981,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@mapbox/node-pre-gyp@1.0.11': + '@mapbox/node-pre-gyp@1.0.11(encoding@0.1.13)': dependencies: detect-libc: 2.0.2 https-proxy-agent: 5.0.1 make-dir: 3.1.0 - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) nopt: 5.0.0 npmlog: 5.0.1 rimraf: 3.0.2 @@ -13071,18 +13123,31 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tailwindcss/forms@0.5.3(tailwindcss@3.3.2)': + '@tailwindcss/forms@0.5.3(tailwindcss@3.3.2(ts-node@10.9.1(@types/node@18.11.17)(typescript@5.3.3)))': dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 3.3.2 + tailwindcss: 3.3.2(ts-node@10.9.1(@types/node@18.11.17)(typescript@5.3.3)) - '@tailwindcss/typography@0.5.9(tailwindcss@3.3.2)': + '@tailwindcss/forms@0.5.3(tailwindcss@3.3.2(ts-node@10.9.1(@types/node@20.11.13)(typescript@5.3.3)))': + dependencies: + mini-svg-data-uri: 1.4.4 + tailwindcss: 3.3.2(ts-node@10.9.1(@types/node@20.11.13)(typescript@5.3.3)) + + '@tailwindcss/typography@0.5.9(tailwindcss@3.3.2(ts-node@10.9.1(@types/node@18.11.17)(typescript@5.3.3)))': dependencies: lodash.castarray: 4.4.0 lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 3.3.2 + tailwindcss: 3.3.2(ts-node@10.9.1(@types/node@18.11.17)(typescript@5.3.3)) + + '@tailwindcss/typography@0.5.9(tailwindcss@3.3.2(ts-node@10.9.1(@types/node@20.11.13)(typescript@5.3.3)))': + dependencies: + lodash.castarray: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + postcss-selector-parser: 6.0.10 + tailwindcss: 3.3.2(ts-node@10.9.1(@types/node@20.11.13)(typescript@5.3.3)) '@trysound/sax@0.2.0': {} @@ -13264,7 +13329,7 @@ snapshots: dependencies: '@types/node': 20.11.13 - '@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0)(eslint@7.32.0)(typescript@5.3.3)': + '@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.3.3))(eslint@7.32.0)(typescript@5.3.3)': dependencies: '@typescript-eslint/experimental-utils': 4.33.0(eslint@7.32.0)(typescript@5.3.3) '@typescript-eslint/parser': 4.33.0(eslint@7.32.0)(typescript@5.3.3) @@ -13276,11 +13341,12 @@ snapshots: regexpp: 3.2.0 semver: 7.3.8 tsutils: 3.21.0(typescript@5.3.3) + optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@5.41.0(@typescript-eslint/parser@5.41.0)(eslint@8.26.0)(typescript@5.3.3)': + '@typescript-eslint/eslint-plugin@5.41.0(@typescript-eslint/parser@5.41.0(eslint@8.26.0)(typescript@5.3.3))(eslint@8.26.0)(typescript@5.3.3)': dependencies: '@typescript-eslint/parser': 5.41.0(eslint@8.26.0)(typescript@5.3.3) '@typescript-eslint/scope-manager': 5.41.0 @@ -13292,11 +13358,12 @@ snapshots: regexpp: 3.2.0 semver: 7.3.8 tsutils: 3.21.0(typescript@5.3.3) + optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3)': + '@typescript-eslint/eslint-plugin@6.19.0(@typescript-eslint/parser@6.19.0(eslint@8.56.0)(typescript@5.3.3))(eslint@8.56.0)(typescript@5.3.3)': dependencies: '@eslint-community/regexpp': 4.10.0 '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) @@ -13311,6 +13378,7 @@ snapshots: natural-compare: 1.4.0 semver: 7.5.4 ts-api-utils: 1.0.3(typescript@5.3.3) + optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color @@ -13343,6 +13411,7 @@ snapshots: '@typescript-eslint/typescript-estree': 4.33.0(typescript@5.3.3) debug: 4.3.4 eslint: 7.32.0 + optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color @@ -13354,6 +13423,7 @@ snapshots: '@typescript-eslint/typescript-estree': 5.41.0(typescript@5.3.3) debug: 4.3.4 eslint: 8.26.0 + optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color @@ -13366,6 +13436,7 @@ snapshots: '@typescript-eslint/visitor-keys': 6.19.0 debug: 4.3.4 eslint: 8.56.0 + optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color @@ -13392,6 +13463,7 @@ snapshots: debug: 4.3.4 eslint: 8.26.0 tsutils: 3.21.0(typescript@5.3.3) + optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color @@ -13403,6 +13475,7 @@ snapshots: debug: 4.3.4 eslint: 8.56.0 ts-api-utils: 1.0.3(typescript@5.3.3) + optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color @@ -13422,6 +13495,7 @@ snapshots: is-glob: 4.0.3 semver: 7.5.4 tsutils: 3.21.0(typescript@5.3.3) + optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color @@ -13435,6 +13509,7 @@ snapshots: is-glob: 4.0.3 semver: 7.6.2 tsutils: 3.21.0(typescript@5.3.3) + optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color @@ -13449,6 +13524,7 @@ snapshots: minimatch: 9.0.3 semver: 7.5.4 ts-api-utils: 1.0.3(typescript@5.3.3) + optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color @@ -13516,9 +13592,9 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vercel/nft@0.24.4': + '@vercel/nft@0.24.4(encoding@0.1.13)': dependencies: - '@mapbox/node-pre-gyp': 1.0.11 + '@mapbox/node-pre-gyp': 1.0.11(encoding@0.1.13) '@rollup/pluginutils': 4.2.1 acorn: 8.11.2 async-sema: 3.1.1 @@ -13674,12 +13750,12 @@ snapshots: acorn@8.8.1: {} - addons-linter@6.21.0(node-fetch@3.3.1): + addons-linter@6.21.0(express@4.18.2)(node-fetch@3.3.1): dependencies: '@fluent/syntax': 0.19.0 '@mdn/browser-compat-data': 5.5.7 addons-moz-compare: 1.3.0 - addons-scanner-utils: 9.9.0(node-fetch@3.3.1) + addons-scanner-utils: 9.9.0(express@4.18.2)(node-fetch@3.3.1) ajv: 8.12.0 chalk: 4.1.2 cheerio: 1.0.0-rc.12 @@ -13717,15 +13793,17 @@ snapshots: addons-moz-compare@1.3.0: {} - addons-scanner-utils@9.9.0(node-fetch@3.3.1): + addons-scanner-utils@9.9.0(express@4.18.2)(node-fetch@3.3.1): dependencies: '@types/yauzl': 2.10.3 common-tags: 1.8.2 first-chunk-stream: 3.0.0 - node-fetch: 3.3.1 strip-bom-stream: 4.0.0 upath: 2.0.1 yauzl: 2.10.0 + optionalDependencies: + express: 4.18.2 + node-fetch: 3.3.1 adm-zip@0.5.10: {} @@ -13745,7 +13823,7 @@ snapshots: ajv: 6.12.6 ajv-formats@2.1.1(ajv@8.12.0): - dependencies: + optionalDependencies: ajv: 8.12.0 ajv-keywords@3.5.2(ajv@6.12.6): @@ -14006,18 +14084,17 @@ snapshots: autoprefixer@10.4.14(postcss@8.4.38): dependencies: - browserslist: 4.22.2 - caniuse-lite: 1.0.30001570 + browserslist: 4.21.5 + caniuse-lite: 1.0.30001482 fraction.js: 4.2.0 normalize-range: 0.1.2 - picocolors: 1.0.1 + picocolors: 1.0.0 postcss: 8.4.38 postcss-value-parser: 4.2.0 - ava@6.0.1(@ava/typescript@4.1.0): + ava@6.0.1(@ava/typescript@4.1.0)(encoding@0.1.13): dependencies: - '@ava/typescript': 4.1.0 - '@vercel/nft': 0.24.4 + '@vercel/nft': 0.24.4(encoding@0.1.13) acorn: 8.11.2 acorn-walk: 8.3.1 ansi-styles: 6.2.1 @@ -14057,6 +14134,8 @@ snapshots: temp-dir: 3.0.0 write-file-atomic: 5.0.1 yargs: 17.7.2 + optionalDependencies: + '@ava/typescript': 4.1.0 transitivePeerDependencies: - encoding - supports-color @@ -15065,11 +15144,10 @@ snapshots: create-require@1.1.1: {} - critters-webpack-plugin@2.5.0(html-webpack-plugin@3.2.0): + critters-webpack-plugin@2.5.0(html-webpack-plugin@3.2.0(webpack@4.46.0)): dependencies: css: 2.2.4 cssnano: 4.1.11 - html-webpack-plugin: 3.2.0(webpack@4.46.0) jsdom: 12.2.0 minimatch: 3.1.2 parse5: 4.0.0 @@ -15077,6 +15155,8 @@ snapshots: pretty-bytes: 4.0.2 webpack-log: 2.0.0 webpack-sources: 1.4.3 + optionalDependencies: + html-webpack-plugin: 3.2.0(webpack@4.46.0) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -15337,6 +15417,7 @@ snapshots: debug@4.3.3(supports-color@8.1.1): dependencies: ms: 2.1.2 + optionalDependencies: supports-color: 8.1.1 debug@4.3.4: @@ -15789,24 +15870,24 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.29.1)(eslint@8.26.0): + eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.41.0(eslint@8.26.0)(typescript@5.3.3))(eslint@8.26.0))(eslint@8.26.0): dependencies: confusing-browser-globals: 1.0.11 eslint: 8.26.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.41.0)(eslint@8.26.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.41.0(eslint@8.26.0)(typescript@5.3.3))(eslint@8.26.0) object.assign: 4.1.5 object.entries: 1.1.7 semver: 6.3.1 - eslint-config-airbnb-typescript@17.1.0(@typescript-eslint/eslint-plugin@5.41.0)(@typescript-eslint/parser@5.41.0)(eslint-plugin-import@2.29.1)(eslint@8.26.0): + eslint-config-airbnb-typescript@17.1.0(@typescript-eslint/eslint-plugin@5.41.0(@typescript-eslint/parser@5.41.0(eslint@8.26.0)(typescript@5.3.3))(eslint@8.26.0)(typescript@5.3.3))(@typescript-eslint/parser@5.41.0(eslint@8.26.0)(typescript@5.3.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.41.0(eslint@8.26.0)(typescript@5.3.3))(eslint@8.26.0))(eslint@8.26.0): dependencies: - '@typescript-eslint/eslint-plugin': 5.41.0(@typescript-eslint/parser@5.41.0)(eslint@8.26.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 5.41.0(@typescript-eslint/parser@5.41.0(eslint@8.26.0)(typescript@5.3.3))(eslint@8.26.0)(typescript@5.3.3) '@typescript-eslint/parser': 5.41.0(eslint@8.26.0)(typescript@5.3.3) eslint: 8.26.0 - eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.1)(eslint@8.26.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.41.0)(eslint@8.26.0) + eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.41.0(eslint@8.26.0)(typescript@5.3.3))(eslint@8.26.0))(eslint@8.26.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.41.0(eslint@8.26.0)(typescript@5.3.3))(eslint@8.26.0) - eslint-config-preact@1.3.0(@typescript-eslint/eslint-plugin@4.33.0)(eslint@7.32.0)(typescript@5.3.3): + eslint-config-preact@1.3.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.3.3))(eslint@7.32.0)(typescript@5.3.3))(eslint@7.32.0)(typescript@5.3.3): dependencies: '@babel/core': 7.18.9 '@babel/eslint-parser': 7.19.1(@babel/core@7.18.9)(eslint@7.32.0) @@ -15815,7 +15896,7 @@ snapshots: '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.18.9) eslint: 7.32.0 eslint-plugin-compat: 4.0.2(eslint@7.32.0) - eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@4.33.0)(eslint@7.32.0)(typescript@5.3.3) + eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.3.3))(eslint@7.32.0)(typescript@5.3.3))(eslint@7.32.0)(typescript@5.3.3) eslint-plugin-react: 7.33.2(eslint@7.32.0) eslint-plugin-react-hooks: 4.6.0(eslint@7.32.0) transitivePeerDependencies: @@ -15836,10 +15917,11 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.0(@typescript-eslint/parser@5.41.0)(eslint-import-resolver-node@0.3.9)(eslint@8.26.0): + eslint-module-utils@2.8.0(@typescript-eslint/parser@5.41.0(eslint@8.26.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint@8.26.0): dependencies: - '@typescript-eslint/parser': 5.41.0(eslint@8.26.0)(typescript@5.3.3) debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 5.41.0(eslint@8.26.0)(typescript@5.3.3) eslint: 8.26.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: @@ -15861,9 +15943,8 @@ snapshots: dependencies: eslint: 7.32.0 - eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.41.0)(eslint@8.26.0): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.41.0(eslint@8.26.0)(typescript@5.3.3))(eslint@8.26.0): dependencies: - '@typescript-eslint/parser': 5.41.0(eslint@8.26.0)(typescript@5.3.3) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -15872,7 +15953,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.26.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.41.0)(eslint-import-resolver-node@0.3.9)(eslint@8.26.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.41.0(eslint@8.26.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint@8.26.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -15882,16 +15963,19 @@ snapshots: object.values: 1.1.7 semver: 6.3.1 tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 5.41.0(eslint@8.26.0)(typescript@5.3.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@4.33.0)(eslint@7.32.0)(typescript@5.3.3): + eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.3.3))(eslint@7.32.0)(typescript@5.3.3))(eslint@7.32.0)(typescript@5.3.3): dependencies: - '@typescript-eslint/eslint-plugin': 4.33.0(@typescript-eslint/parser@4.33.0)(eslint@7.32.0)(typescript@5.3.3) '@typescript-eslint/experimental-utils': 5.41.0(eslint@7.32.0)(typescript@5.3.3) eslint: 7.32.0 + optionalDependencies: + '@typescript-eslint/eslint-plugin': 4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.3.3))(eslint@7.32.0)(typescript@5.3.3) transitivePeerDependencies: - supports-color - typescript @@ -16506,7 +16590,6 @@ snapshots: dependencies: '@babel/code-frame': 7.23.5 chalk: 2.4.2 - eslint: 8.56.0 micromatch: 3.1.10 minimatch: 3.1.2 semver: 5.7.2 @@ -16514,6 +16597,8 @@ snapshots: typescript: 4.6.4 webpack: 4.46.0 worker-rpc: 0.1.1 + optionalDependencies: + eslint: 8.56.0 transitivePeerDependencies: - supports-color @@ -17043,9 +17128,10 @@ snapshots: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 + optionalDependencies: webpack: 4.46.0 - html-webpack-skip-assets-plugin@1.0.3(html-webpack-plugin@5.6.0)(webpack@4.46.0): + html-webpack-skip-assets-plugin@1.0.3(html-webpack-plugin@5.6.0(webpack@4.46.0))(webpack@4.46.0): dependencies: html-webpack-plugin: 5.6.0(webpack@4.46.0) minimatch: 3.0.4 @@ -17088,12 +17174,13 @@ snapshots: http-proxy-middleware@2.0.6(@types/express@4.17.14): dependencies: - '@types/express': 4.17.14 '@types/http-proxy': 1.17.9 http-proxy: 1.18.1 is-glob: 4.0.3 is-plain-obj: 3.0.0 micromatch: 4.0.5 + optionalDependencies: + '@types/express': 4.17.14 transitivePeerDependencies: - debug @@ -17477,9 +17564,9 @@ snapshots: isobject@3.0.1: {} - isomorphic-unfetch@3.1.0: + isomorphic-unfetch@3.1.0(encoding@0.1.13): dependencies: - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) unfetch: 4.2.0 transitivePeerDependencies: - encoding @@ -18298,9 +18385,11 @@ snapshots: node-domexception@1.0.0: {} - node-fetch@2.7.0: + node-fetch@2.7.0(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 + optionalDependencies: + encoding: 0.1.13 node-fetch@3.3.1: dependencies: @@ -18863,7 +18952,7 @@ snapshots: postcss-selector-parser: 6.0.12 postcss-value-parser: 4.2.0 - postcss-cli@10.1.0(postcss@8.4.23): + postcss-cli@10.1.0(postcss@8.4.23)(ts-node@10.9.1(@types/node@20.11.13)(typescript@5.3.3)): dependencies: chokidar: 3.5.3 dependency-graph: 0.11.0 @@ -18872,7 +18961,7 @@ snapshots: globby: 13.2.2 picocolors: 1.0.0 postcss: 8.4.23 - postcss-load-config: 4.0.1(postcss@8.4.23) + postcss-load-config: 4.0.1(postcss@8.4.23)(ts-node@10.9.1(@types/node@20.11.13)(typescript@5.3.3)) postcss-reporter: 7.0.5(postcss@8.4.23) pretty-hrtime: 1.0.3 read-cache: 1.0.0 @@ -18952,17 +19041,29 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.4.23 - postcss-load-config@3.1.4(postcss@8.4.38): + postcss-load-config@3.1.4(postcss@8.4.38)(ts-node@10.9.1(@types/node@18.11.17)(typescript@5.3.3)): dependencies: lilconfig: 2.1.0 - postcss: 8.4.38 yaml: 1.10.2 + optionalDependencies: + postcss: 8.4.38 + ts-node: 10.9.1(@types/node@18.11.17)(typescript@5.3.3) - postcss-load-config@4.0.1(postcss@8.4.23): + postcss-load-config@4.0.1(postcss@8.4.23)(ts-node@10.9.1(@types/node@18.11.17)(typescript@5.3.3)): dependencies: lilconfig: 2.1.0 + yaml: 2.2.2 + optionalDependencies: postcss: 8.4.23 + ts-node: 10.9.1(@types/node@18.11.17)(typescript@5.3.3) + + postcss-load-config@4.0.1(postcss@8.4.23)(ts-node@10.9.1(@types/node@20.11.13)(typescript@5.3.3)): + dependencies: + lilconfig: 2.1.0 yaml: 2.2.2 + optionalDependencies: + postcss: 8.4.23 + ts-node: 10.9.1(@types/node@20.11.13)(typescript@5.3.3) postcss-loader@4.3.0(postcss@8.4.38)(webpack@4.46.0): dependencies: @@ -19291,7 +19392,7 @@ snapshots: picocolors: 1.0.1 source-map-js: 1.2.0 - preact-cli@3.4.1(eslint@8.56.0)(preact-render-to-string@5.2.6)(preact@10.11.3): + preact-cli@3.4.1(encoding@0.1.13)(eslint@8.56.0)(preact-render-to-string@5.2.6(preact@10.11.3))(preact@10.11.3)(ts-node@10.9.1(@types/node@18.11.17)(typescript@5.3.3)): dependencies: '@babel/core': 7.18.9 '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.18.9) @@ -19315,7 +19416,7 @@ snapshots: compression-webpack-plugin: 6.1.1(webpack@4.46.0) console-clear: 1.1.1 copy-webpack-plugin: 6.4.1(webpack@4.46.0) - critters-webpack-plugin: 2.5.0(html-webpack-plugin@3.2.0) + critters-webpack-plugin: 2.5.0(html-webpack-plugin@3.2.0(webpack@4.46.0)) cross-spawn-promise: 0.10.2 css-loader: 5.2.7(webpack@4.46.0) dotenv: 16.0.3 @@ -19330,7 +19431,7 @@ snapshots: html-webpack-exclude-assets-plugin: 0.0.7 html-webpack-plugin: 3.2.0(webpack@4.46.0) ip: 1.1.8 - isomorphic-unfetch: 3.1.0 + isomorphic-unfetch: 3.1.0(encoding@0.1.13) kleur: 4.1.5 loader-utils: 2.0.3 mini-css-extract-plugin: 1.6.2(webpack@4.46.0) @@ -19340,7 +19441,7 @@ snapshots: ora: 5.4.1 pnp-webpack-plugin: 1.7.0(typescript@4.6.4) postcss: 8.4.38 - postcss-load-config: 3.1.4(postcss@8.4.38) + postcss-load-config: 3.1.4(postcss@8.4.38)(ts-node@10.9.1(@types/node@18.11.17)(typescript@5.3.3)) postcss-loader: 4.3.0(postcss@8.4.38)(webpack@4.46.0) preact: 10.11.3 preact-render-to-string: 5.2.6(preact@10.11.3) @@ -19358,7 +19459,7 @@ snapshots: terser-webpack-plugin: 4.2.3(webpack@4.46.0) typescript: 4.6.4 update-notifier: 5.1.0 - url-loader: 4.1.1(file-loader@6.2.0)(webpack@4.46.0) + url-loader: 4.1.1(file-loader@6.2.0(webpack@4.46.0))(webpack@4.46.0) validate-npm-package-name: 4.0.0 webpack: 4.46.0 webpack-bundle-analyzer: 4.6.1 @@ -19464,7 +19565,7 @@ snapshots: progress@2.0.3: {} promise-inflight@1.0.1(bluebird@3.7.2): - dependencies: + optionalDependencies: bluebird: 3.7.2 promise-polyfill@8.2.3: {} @@ -20598,7 +20699,7 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - tailwindcss@3.3.2: + tailwindcss@3.3.2(ts-node@10.9.1(@types/node@18.11.17)(typescript@5.3.3)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -20617,7 +20718,35 @@ snapshots: postcss: 8.4.23 postcss-import: 15.1.0(postcss@8.4.23) postcss-js: 4.0.1(postcss@8.4.23) - postcss-load-config: 4.0.1(postcss@8.4.23) + postcss-load-config: 4.0.1(postcss@8.4.23)(ts-node@10.9.1(@types/node@18.11.17)(typescript@5.3.3)) + postcss-nested: 6.0.1(postcss@8.4.23) + postcss-selector-parser: 6.0.12 + postcss-value-parser: 4.2.0 + resolve: 1.22.2 + sucrase: 3.32.0 + transitivePeerDependencies: + - ts-node + + tailwindcss@3.3.2(ts-node@10.9.1(@types/node@20.11.13)(typescript@5.3.3)): + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.5.3 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.1 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.18.2 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.23 + postcss-import: 15.1.0(postcss@8.4.23) + postcss-js: 4.0.1(postcss@8.4.23) + postcss-load-config: 4.0.1(postcss@8.4.23)(ts-node@10.9.1(@types/node@20.11.13)(typescript@5.3.3)) postcss-nested: 6.0.1(postcss@8.4.23) postcss-selector-parser: 6.0.12 postcss-value-parser: 4.2.0 @@ -20825,6 +20954,25 @@ snapshots: dependencies: tslib: 2.6.2 + ts-node@10.9.1(@types/node@18.11.17)(typescript@5.3.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.3 + '@types/node': 18.11.17 + acorn: 8.8.1 + acorn-walk: 8.2.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.3.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optional: true + ts-node@10.9.1(@types/node@20.11.13)(typescript@5.3.3): dependencies: '@cspotcode/source-map-support': 0.8.1 @@ -20844,7 +20992,7 @@ snapshots: yn: 3.1.1 ts-pnp@1.2.0(typescript@4.6.4): - dependencies: + optionalDependencies: typescript: 4.6.4 tsconfig-paths@3.15.0: @@ -21072,13 +21220,14 @@ snapshots: urix@0.1.0: {} - url-loader@4.1.1(file-loader@6.2.0)(webpack@4.46.0): + url-loader@4.1.1(file-loader@6.2.0(webpack@4.46.0))(webpack@4.46.0): dependencies: - file-loader: 6.2.0(webpack@4.46.0) loader-utils: 2.0.3 mime-types: 2.1.35 schema-utils: 3.1.1 webpack: 4.46.0 + optionalDependencies: + file-loader: 6.2.0(webpack@4.46.0) url-parse-lax@3.0.0: dependencies: @@ -21199,11 +21348,11 @@ snapshots: dependencies: defaults: 1.0.4 - web-ext@7.11.0: + web-ext@7.11.0(express@4.18.2): dependencies: '@babel/runtime': 7.21.0 '@devicefarmer/adbkit': 3.2.3 - addons-linter: 6.21.0(node-fetch@3.3.1) + addons-linter: 6.21.0(express@4.18.2)(node-fetch@3.3.1) bunyan: 1.8.15 camelcase: 7.0.1 chrome-launcher: 0.15.1