diff --git a/.cspell.json b/.cspell.json index 2395fa64d5..1a5972c29c 100644 --- a/.cspell.json +++ b/.cspell.json @@ -47,7 +47,9 @@ "/xmlKeys = {[^}]+}/g", "/\\.to\\.deep\\.equal\\({[^)]+}\\)/g", "\\.to\\.include\\.members\\(\\[[^\\]]+]\\)", - "/new [a-zA-Z]+\\({[^£]+}\\)/g" + "/new [a-zA-Z]+\\({[^£]+}\\)/g", + "/](https://www.arity.co/) [drawing](https://www.circadianrisk.com/) [drawing](https://lexense.com/) +[drawing](https://novelpad.co/) ...and many more! diff --git a/demo/1-basic.ts b/demo/1-basic.ts index 925883dd6f..6e937dbeae 100644 --- a/demo/1-basic.ts +++ b/demo/1-basic.ts @@ -14,6 +14,7 @@ const doc = new Document({ new TextRun({ text: "Foo Bar", bold: true, + size: 40, }), new TextRun({ children: [new Tab(), "Github is the best"], diff --git a/demo/2-declaritive-styles.ts b/demo/2-declaritive-styles.ts index 352edca043..d1dae03cbe 100644 --- a/demo/2-declaritive-styles.ts +++ b/demo/2-declaritive-styles.ts @@ -222,6 +222,15 @@ const doc = new Document({ new TextRun({ text: "Underline and Strike", }), + new TextRun({ + text: " Override Underline ", + underline: { + type: UnderlineType.NONE, + }, + }), + new TextRun({ + text: "Strike and Underline", + }), ], }), new Paragraph({ diff --git a/demo/75-tab-stops.ts b/demo/75-tab-stops.ts index a2257419d8..376d8cae51 100644 --- a/demo/75-tab-stops.ts +++ b/demo/75-tab-stops.ts @@ -1,4 +1,4 @@ -// Exporting the document as a stream +// Example of using tab stops // Import from 'docx' rather than '../build' if you install from npm import * as fs from "fs"; import { Document, HeadingLevel, Packer, Paragraph, TabStopPosition, TabStopType, TextRun } from "../build"; diff --git a/demo/78-thai-distributed.ts b/demo/78-thai-distributed.ts new file mode 100644 index 0000000000..d5ffc13935 --- /dev/null +++ b/demo/78-thai-distributed.ts @@ -0,0 +1,27 @@ +// Simple example to add text to a document +// Import from 'docx' rather than '../build' if you install from npm +import * as fs from "fs"; +import { AlignmentType, Document, Packer, Paragraph, TextRun } from "../build"; + +const doc = new Document({ + sections: [ + { + properties: {}, + children: [ + new Paragraph({ + alignment: AlignmentType.THAI_DISTRIBUTE, + children: [ + new TextRun({ + text: "บริษัท บิสกิด จำกัด (บริษัทฯ) ได้จดทะเบียนจัดตั้งขึ้นเป็นบริษัทจำกัดตามประมวลกฎหมายแพ่งและพาณิชย์ของประเทศไทย เมื่อวันที่ 30 พฤษภาคม 2561 ทะเบียนนิติบุคคลเลขที่ 0845561005665", + size: 36, + }), + ], + }), + ], + }, + ], +}); + +Packer.toBuffer(doc).then((buffer) => { + fs.writeFileSync("My Document.docx", buffer); +}); diff --git a/demo/79-table-from-data-source.ts b/demo/79-table-from-data-source.ts new file mode 100644 index 0000000000..bda62e65cd --- /dev/null +++ b/demo/79-table-from-data-source.ts @@ -0,0 +1,193 @@ +// Example of how you would create a table and add data to it from a data source +// Import from 'docx' rather than '../build' if you install from npm +import * as fs from "fs"; +import { + Document, + HeadingLevel, + Packer, + Paragraph, + Table, + TableCell, + TableRow, + VerticalAlign, + TextDirection, + TextRun, + WidthType, +} from "../build"; + +interface StockPrice { + readonly date: Date; + readonly ticker: string; + readonly price: number; +} + +const DATA: StockPrice[] = [ + { + date: new Date("2007-08-28"), + ticker: "Apple", + price: 18.12, + }, + { + date: new Date("2007-08-29"), + ticker: "Apple", + price: 19.15, + }, + { + date: new Date("2007-08-30"), + ticker: "Apple", + price: 19.46, + }, + { + date: new Date("2007-08-31"), + ticker: "Apple", + price: 19.78, + }, + { + date: new Date("2007-09-04"), + ticker: "Apple", + price: 20.59, + }, + { + date: new Date("2007-09-05"), + ticker: "Apple", + price: 19.54, + }, + { + date: new Date("2007-09-06"), + ticker: "Apple", + price: 19.29, + }, + { + date: new Date("2007-09-07"), + ticker: "Apple", + price: 18.82, + }, + { + date: new Date("2007-09-10"), + ticker: "Apple", + price: 19.53, + }, + { + date: new Date("2007-09-11"), + ticker: "Apple", + price: 19.36, + }, + { + date: new Date("2007-09-12"), + ticker: "Apple", + price: 19.55, + }, + { + date: new Date("2007-09-13"), + ticker: "Apple", + price: 19.6, + }, + { + date: new Date("2007-09-14"), + ticker: "Apple", + price: 19.83, + }, + { + date: new Date("2007-09-17"), + ticker: "Apple", + price: 19.77, + }, +]; + +const generateRows = (prices: StockPrice[]): TableRow[] => + prices.map( + ({ date, ticker, price }) => + new TableRow({ + children: [ + new TableCell({ + children: [new Paragraph(date.toString())], + verticalAlign: VerticalAlign.CENTER, + textDirection: TextDirection.LEFT_TO_RIGHT_TOP_TO_BOTTOM, + }), + new TableCell({ + children: [new Paragraph(ticker)], + verticalAlign: VerticalAlign.CENTER, + textDirection: TextDirection.LEFT_TO_RIGHT_TOP_TO_BOTTOM, + }), + new TableCell({ + children: [new Paragraph(price.toString())], + verticalAlign: VerticalAlign.CENTER, + textDirection: TextDirection.TOP_TO_BOTTOM_RIGHT_TO_LEFT, + }), + ], + }), + ); + +const doc = new Document({ + sections: [ + { + children: [ + new Table({ + width: { + size: 9070, + type: WidthType.DXA, + }, + rows: [ + new TableRow({ + children: [ + new TableCell({ + children: [ + new Paragraph({ + heading: HeadingLevel.HEADING_2, + children: [ + new TextRun({ + text: "Date", + bold: true, + size: 40, + }), + ], + }), + ], + verticalAlign: VerticalAlign.CENTER, + textDirection: TextDirection.LEFT_TO_RIGHT_TOP_TO_BOTTOM, + }), + new TableCell({ + children: [ + new Paragraph({ + heading: HeadingLevel.HEADING_2, + children: [ + new TextRun({ + text: "Ticker", + bold: true, + size: 40, + }), + ], + }), + ], + verticalAlign: VerticalAlign.CENTER, + textDirection: TextDirection.LEFT_TO_RIGHT_TOP_TO_BOTTOM, + }), + new TableCell({ + children: [ + new Paragraph({ + heading: HeadingLevel.HEADING_2, + children: [ + new TextRun({ + text: "Price", + bold: true, + size: 40, + }), + ], + }), + ], + verticalAlign: VerticalAlign.CENTER, + textDirection: TextDirection.TOP_TO_BOTTOM_RIGHT_TO_LEFT, + }), + ], + }), + ...generateRows(DATA), + ], + }), + ], + }, + ], +}); + +Packer.toBuffer(doc).then((buffer) => { + fs.writeFileSync("My Document.docx", buffer); +}); diff --git a/demo/80-thai-distributed.ts b/demo/80-thai-distributed.ts new file mode 100644 index 0000000000..becbd478fe --- /dev/null +++ b/demo/80-thai-distributed.ts @@ -0,0 +1,49 @@ +// Simple example to add text to a document +// Import from 'docx' rather than '../build' if you install from npm +import * as fs from "fs"; +import { AlignmentType, convertMillimetersToTwip, Document, Packer, Paragraph, TextRun } from "../build"; + +const doc = new Document({ + styles: { + paragraphStyles: [ + { + id: "test", + name: "Test", + basedOn: "Normal", + next: "Normal", + paragraph: { + indent: { left: convertMillimetersToTwip(6.4) }, + }, + }, + ], + }, + sections: [ + { + properties: { + page: { + margin: { + top: 0, + right: convertMillimetersToTwip(24), + bottom: convertMillimetersToTwip(24), + left: convertMillimetersToTwip(24), + }, + }, + }, + children: [ + new Paragraph({ + alignment: AlignmentType.THAI_DISTRIBUTE, + children: [ + new TextRun({ + text: "บริษัทฯ มีเงินสด 41,985.00 บาท และ 25,855.66 บาทตามลำดับ เงินสดทั้งจำนวนอยู่ในความดูแลและรับผิดชอบของกรรมการ บริษัทฯบันทึกการรับชำระเงินและการจ่ายชำระเงินผ่านบัญชีเงินสดเพียงเท่านั้น ซึ่งอาจกระทบต่อความถูกต้องครบถ้วนของการบันทึกบัญชี ทั้งนี้ขึ้นอยู่กับระบบการควบคุมภายในของบริษัท", + size: 28, + }), + ], + }), + ], + }, + ], +}); + +Packer.toBuffer(doc).then((buffer) => { + fs.writeFileSync("My Document.docx", buffer); +}); diff --git a/demo/81-continuous-header.ts b/demo/81-continuous-header.ts new file mode 100644 index 0000000000..78ee89eb3a --- /dev/null +++ b/demo/81-continuous-header.ts @@ -0,0 +1,148 @@ +// Example of a continuous header +// Import from 'docx' rather than '../build' if you install from npm +import * as fs from "fs"; +import { Document, Footer, Header, Packer, Paragraph, SectionType, Tab, TextRun } from "../build"; + +const doc = new Document({ + creator: "Creator", + title: "Title", + sections: [ + { + properties: { titlePage: true }, + headers: { + first: new Header({ + children: [ + new Paragraph({ + children: [ + new TextRun({ + text: "HEADER PAGE ONE", + }), + ], + }), + ], + }), + default: new Header({ + children: [ + new Paragraph({ + children: [ + new TextRun({ + text: "HEADER PAGE TWO AND FOLLOWING PAGES", + }), + ], + }), + ], + }), + }, + footers: { + first: new Footer({ + children: [ + new Paragraph({ + children: [ + new TextRun({ + text: "FOOTER PAGE ONE", + }), + ], + }), + ], + }), + default: new Footer({ + children: [ + new Paragraph({ + children: [ + new TextRun({ + text: "FOOTER PAGE TWO AND FOLLOWING PAGES", + }), + ], + }), + ], + }), + }, + children: [ + new Paragraph({ + children: [ + new TextRun({ + text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer ac suscipit orci, in lobortis risus. Nulla vehicula rutrum finibus. Nullam consequat, magna in vehicula commodo, enim massa consectetur nisl, sit amet rutrum nunc ante vel lorem. Sed sit amet scelerisque velit. Proin non quam eget mauris aliquet posuere a sed orci. Proin posuere ante suscipit neque dignissim hendrerit. Pellentesque eget dapibus metus. Donec at mollis mauris. Vestibulum sit amet scelerisque nulla. Vivamus ipsum erat, tempor sed volutpat non, molestie at odio. Vivamus lectus ligula, finibus at mattis vitae, euismod sed tellus. Etiam neque massa, faucibus a fringilla nec, mollis at ex. Aliquam eget nibh tortor. Sed ut viverra libero. Nulla facilisis bibendum quam eget porttitor.", + }), + ], + }), + new Paragraph({ + children: [ + new TextRun({ + text: "Sed eget nunc ac turpis facilisis volutpat. Duis eget arcu vitae neque porta hendrerit. Proin vel ante nulla. Duis congue efficitur dui. Suspendisse potenti. Aliquam aliquam nibh eu ipsum sagittis efficitur. Quisque sagittis metus dui, vitae suscipit tortor sollicitudin at. Suspendisse convallis, sem ac ornare condimentum, odio ipsum dapibus justo, a aliquam risus massa ut enim. Mauris vel placerat nibh. Ut iaculis vitae nibh at elementum. Quisque hendrerit et magna vitae mollis. Duis dictum euismod leo, at cursus risus sodales sed.", + }), + ], + }), + new Paragraph({ + children: [ + new TextRun({ + text: "Sed gravida commodo felis, at aliquet risus volutpat ut. Nam nec ex eleifend tellus sodales volutpat nec ac nibh. Vestibulum pretium, leo vitae lobortis accumsan, urna libero euismod ante, consequat aliquam enim risus id nisl. Donec sagittis, justo eu luctus posuere, leo purus pellentesque turpis, eget volutpat mi leo vitae lacus. Etiam ante ante, posuere at augue non, lacinia ornare purus. Praesent vitae velit in enim congue maximus. Vivamus tincidunt fringilla neque. Curabitur fermentum justo nec sapien porttitor, ac ullamcorper nisi imperdiet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed non orci vel eros egestas eleifend sit amet a diam. Duis mattis at ligula quis faucibus. Donec elementum lacus velit, a vehicula nunc gravida a. Phasellus eget nunc vehicula, varius velit a, maximus velit. Sed a suscipit nisi, non hendrerit felis. Proin mattis facilisis massa, quis elementum neque fringilla non.", + }), + ], + }), + new Paragraph({ + children: [ + new TextRun({ + text: "Sed gravida commodo felis, at aliquet risus volutpat ut. Nam nec ex eleifend tellus sodales volutpat nec ac nibh. Vestibulum pretium, leo vitae lobortis accumsan, urna libero euismod ante, consequat aliquam enim risus id nisl. Donec sagittis, justo eu luctus posuere, leo purus pellentesque turpis, eget volutpat mi leo vitae lacus. Etiam ante ante, posuere at augue non, lacinia ornare purus. Praesent vitae velit in enim congue maximus. Vivamus tincidunt fringilla neque. Curabitur fermentum justo nec sapien porttitor, ac ullamcorper nisi imperdiet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed non orci vel eros egestas eleifend sit amet a diam. Duis mattis at ligula quis faucibus. Donec elementum lacus velit, a vehicula nunc gravida a. Phasellus eget nunc vehicula, varius velit a, maximus velit. Sed a suscipit nisi, non hendrerit felis. Proin mattis facilisis massa, quis elementum neque fringilla non.", + }), + ], + }), + new Paragraph({ + spacing: { + after: 500, + }, + children: [ + new TextRun({ + text: "The first section ends after this paragraph.", + }), + ], + }), + ], + }, + { + properties: { + type: SectionType.CONTINUOUS, + }, + children: [ + new Paragraph({ + children: [ + new TextRun({ + text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer ac suscipit orci, in lobortis risus. Nulla vehicula rutrum finibus. Nullam consequat, magna in vehicula commodo, enim massa consectetur nisl, sit amet rutrum nunc ante vel lorem. Sed sit amet scelerisque velit. Proin non quam eget mauris aliquet posuere a sed orci. Proin posuere ante suscipit neque dignissim hendrerit. Pellentesque eget dapibus metus. Donec at mollis mauris. Vestibulum sit amet scelerisque nulla. Vivamus ipsum erat, tempor sed volutpat non, molestie at odio. Vivamus lectus ligula, finibus at mattis vitae, euismod sed tellus. Etiam neque massa, faucibus a fringilla nec, mollis at ex. Aliquam eget nibh tortor. Sed ut viverra libero. Nulla facilisis bibendum quam eget porttitor.", + }), + ], + }), + new Paragraph({ + children: [ + new TextRun({ + text: "Sed eget nunc ac turpis facilisis volutpat. Duis eget arcu vitae neque porta hendrerit. Proin vel ante nulla. Duis congue efficitur dui. Suspendisse potenti. Aliquam aliquam nibh eu ipsum sagittis efficitur. Quisque sagittis metus dui, vitae suscipit tortor sollicitudin at. Suspendisse convallis, sem ac ornare condimentum, odio ipsum dapibus justo, a aliquam risus massa ut enim. Mauris vel placerat nibh. Ut iaculis vitae nibh at elementum. Quisque hendrerit et magna vitae mollis. Duis dictum euismod leo, at cursus risus sodales sed.", + }), + ], + }), + new Paragraph({ + children: [ + new TextRun({ + text: "Sed gravida commodo felis, at aliquet risus volutpat ut. Nam nec ex eleifend tellus sodales volutpat nec ac nibh. Vestibulum pretium, leo vitae lobortis accumsan, urna libero euismod ante, consequat aliquam enim risus id nisl. Donec sagittis, justo eu luctus posuere, leo purus pellentesque turpis, eget volutpat mi leo vitae lacus. Etiam ante ante, posuere at augue non, lacinia ornare purus. Praesent vitae velit in enim congue maximus. Vivamus tincidunt fringilla neque. Curabitur fermentum justo nec sapien porttitor, ac ullamcorper nisi imperdiet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed non orci vel eros egestas eleifend sit amet a diam. Duis mattis at ligula quis faucibus. Donec elementum lacus velit, a vehicula nunc gravida a. Phasellus eget nunc vehicula, varius velit a, maximus velit. Sed a suscipit nisi, non hendrerit felis. Proin mattis facilisis massa, quis elementum neque fringilla non.", + }), + ], + }), + new Paragraph({ + children: [ + new TextRun({ + text: "Sed gravida commodo felis, at aliquet risus volutpat ut. Nam nec ex eleifend tellus sodales volutpat nec ac nibh. Vestibulum pretium, leo vitae lobortis accumsan, urna libero euismod ante, consequat aliquam enim risus id nisl. Donec sagittis, justo eu luctus posuere, leo purus pellentesque turpis, eget volutpat mi leo vitae lacus. Etiam ante ante, posuere at augue non, lacinia ornare purus. Praesent vitae velit in enim congue maximus. Vivamus tincidunt fringilla neque. Curabitur fermentum justo nec sapien porttitor, ac ullamcorper nisi imperdiet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed non orci vel eros egestas eleifend sit amet a diam. Duis mattis at ligula quis faucibus. Donec elementum lacus velit, a vehicula nunc gravida a. Phasellus eget nunc vehicula, varius velit a, maximus velit. Sed a suscipit nisi, non hendrerit felis. Proin mattis facilisis massa, quis elementum neque fringilla non.", + }), + ], + }), + new Paragraph({ + children: [ + new TextRun({ + text: "The second section starts with the headline above. Move cursor to the end of this text and press enter until next page is generated in continuous section break mode.", + }), + ], + }), + ], + }, + ], +}); + +Packer.toBuffer(doc).then((buffer) => { + fs.writeFileSync("My Document.docx", buffer); +}); diff --git a/demo/82-new-headers-new-section.ts b/demo/82-new-headers-new-section.ts new file mode 100644 index 0000000000..c6a909c672 --- /dev/null +++ b/demo/82-new-headers-new-section.ts @@ -0,0 +1,148 @@ +// Example of using headers and footers in a new section +// Import from 'docx' rather than '../build' if you install from npm +import * as fs from "fs"; +import { Document, Footer, Header, Packer, Paragraph, SectionType, Tab, TextRun } from "../build"; + +const doc = new Document({ + creator: "Creator", + title: "Title", + sections: [ + { + headers: { + default: new Header({ + children: [ + new Paragraph({ + children: [ + new TextRun({ + text: "HEADER PAGE ONE", + }), + ], + }), + ], + }), + }, + footers: { + default: new Footer({ + children: [ + new Paragraph({ + children: [ + new TextRun({ + text: "FOOTER PAGE ONE", + }), + ], + }), + ], + }), + }, + children: [ + new Paragraph({ + children: [ + new TextRun({ + text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer ac suscipit orci, in lobortis risus. Nulla vehicula rutrum finibus. Nullam consequat, magna in vehicula commodo, enim massa consectetur nisl, sit amet rutrum nunc ante vel lorem. Sed sit amet scelerisque velit. Proin non quam eget mauris aliquet posuere a sed orci. Proin posuere ante suscipit neque dignissim hendrerit. Pellentesque eget dapibus metus. Donec at mollis mauris. Vestibulum sit amet scelerisque nulla. Vivamus ipsum erat, tempor sed volutpat non, molestie at odio. Vivamus lectus ligula, finibus at mattis vitae, euismod sed tellus. Etiam neque massa, faucibus a fringilla nec, mollis at ex. Aliquam eget nibh tortor. Sed ut viverra libero. Nulla facilisis bibendum quam eget porttitor.", + }), + ], + }), + new Paragraph({ + children: [ + new TextRun({ + text: "Sed eget nunc ac turpis facilisis volutpat. Duis eget arcu vitae neque porta hendrerit. Proin vel ante nulla. Duis congue efficitur dui. Suspendisse potenti. Aliquam aliquam nibh eu ipsum sagittis efficitur. Quisque sagittis metus dui, vitae suscipit tortor sollicitudin at. Suspendisse convallis, sem ac ornare condimentum, odio ipsum dapibus justo, a aliquam risus massa ut enim. Mauris vel placerat nibh. Ut iaculis vitae nibh at elementum. Quisque hendrerit et magna vitae mollis. Duis dictum euismod leo, at cursus risus sodales sed.", + }), + ], + }), + new Paragraph({ + children: [ + new TextRun({ + text: "Sed gravida commodo felis, at aliquet risus volutpat ut. Nam nec ex eleifend tellus sodales volutpat nec ac nibh. Vestibulum pretium, leo vitae lobortis accumsan, urna libero euismod ante, consequat aliquam enim risus id nisl. Donec sagittis, justo eu luctus posuere, leo purus pellentesque turpis, eget volutpat mi leo vitae lacus. Etiam ante ante, posuere at augue non, lacinia ornare purus. Praesent vitae velit in enim congue maximus. Vivamus tincidunt fringilla neque. Curabitur fermentum justo nec sapien porttitor, ac ullamcorper nisi imperdiet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed non orci vel eros egestas eleifend sit amet a diam. Duis mattis at ligula quis faucibus. Donec elementum lacus velit, a vehicula nunc gravida a. Phasellus eget nunc vehicula, varius velit a, maximus velit. Sed a suscipit nisi, non hendrerit felis. Proin mattis facilisis massa, quis elementum neque fringilla non.", + }), + ], + }), + new Paragraph({ + children: [ + new TextRun({ + text: "Sed gravida commodo felis, at aliquet risus volutpat ut. Nam nec ex eleifend tellus sodales volutpat nec ac nibh. Vestibulum pretium, leo vitae lobortis accumsan, urna libero euismod ante, consequat aliquam enim risus id nisl. Donec sagittis, justo eu luctus posuere, leo purus pellentesque turpis, eget volutpat mi leo vitae lacus. Etiam ante ante, posuere at augue non, lacinia ornare purus. Praesent vitae velit in enim congue maximus. Vivamus tincidunt fringilla neque. Curabitur fermentum justo nec sapien porttitor, ac ullamcorper nisi imperdiet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed non orci vel eros egestas eleifend sit amet a diam. Duis mattis at ligula quis faucibus. Donec elementum lacus velit, a vehicula nunc gravida a. Phasellus eget nunc vehicula, varius velit a, maximus velit. Sed a suscipit nisi, non hendrerit felis. Proin mattis facilisis massa, quis elementum neque fringilla non.", + }), + ], + }), + new Paragraph({ + spacing: { + after: 500, + }, + children: [ + new TextRun({ + text: "The first section ends after this paragraph.", + }), + ], + }), + ], + }, + { + headers: { + default: new Header({ + children: [ + new Paragraph({ + children: [ + new TextRun({ + text: "HEADER PAGE TWO AND FOLLOWING PAGES", + }), + ], + }), + ], + }), + }, + footers: { + default: new Footer({ + children: [ + new Paragraph({ + children: [ + new TextRun({ + text: "FOOTER PAGE TWO AND FOLLOWING PAGES", + }), + ], + }), + ], + }), + }, + children: [ + new Paragraph({ + children: [ + new TextRun({ + text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer ac suscipit orci, in lobortis risus. Nulla vehicula rutrum finibus. Nullam consequat, magna in vehicula commodo, enim massa consectetur nisl, sit amet rutrum nunc ante vel lorem. Sed sit amet scelerisque velit. Proin non quam eget mauris aliquet posuere a sed orci. Proin posuere ante suscipit neque dignissim hendrerit. Pellentesque eget dapibus metus. Donec at mollis mauris. Vestibulum sit amet scelerisque nulla. Vivamus ipsum erat, tempor sed volutpat non, molestie at odio. Vivamus lectus ligula, finibus at mattis vitae, euismod sed tellus. Etiam neque massa, faucibus a fringilla nec, mollis at ex. Aliquam eget nibh tortor. Sed ut viverra libero. Nulla facilisis bibendum quam eget porttitor.", + }), + ], + }), + new Paragraph({ + children: [ + new TextRun({ + text: "Sed eget nunc ac turpis facilisis volutpat. Duis eget arcu vitae neque porta hendrerit. Proin vel ante nulla. Duis congue efficitur dui. Suspendisse potenti. Aliquam aliquam nibh eu ipsum sagittis efficitur. Quisque sagittis metus dui, vitae suscipit tortor sollicitudin at. Suspendisse convallis, sem ac ornare condimentum, odio ipsum dapibus justo, a aliquam risus massa ut enim. Mauris vel placerat nibh. Ut iaculis vitae nibh at elementum. Quisque hendrerit et magna vitae mollis. Duis dictum euismod leo, at cursus risus sodales sed.", + }), + ], + }), + new Paragraph({ + children: [ + new TextRun({ + text: "Sed gravida commodo felis, at aliquet risus volutpat ut. Nam nec ex eleifend tellus sodales volutpat nec ac nibh. Vestibulum pretium, leo vitae lobortis accumsan, urna libero euismod ante, consequat aliquam enim risus id nisl. Donec sagittis, justo eu luctus posuere, leo purus pellentesque turpis, eget volutpat mi leo vitae lacus. Etiam ante ante, posuere at augue non, lacinia ornare purus. Praesent vitae velit in enim congue maximus. Vivamus tincidunt fringilla neque. Curabitur fermentum justo nec sapien porttitor, ac ullamcorper nisi imperdiet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed non orci vel eros egestas eleifend sit amet a diam. Duis mattis at ligula quis faucibus. Donec elementum lacus velit, a vehicula nunc gravida a. Phasellus eget nunc vehicula, varius velit a, maximus velit. Sed a suscipit nisi, non hendrerit felis. Proin mattis facilisis massa, quis elementum neque fringilla non.", + }), + ], + }), + new Paragraph({ + children: [ + new TextRun({ + text: "Sed gravida commodo felis, at aliquet risus volutpat ut. Nam nec ex eleifend tellus sodales volutpat nec ac nibh. Vestibulum pretium, leo vitae lobortis accumsan, urna libero euismod ante, consequat aliquam enim risus id nisl. Donec sagittis, justo eu luctus posuere, leo purus pellentesque turpis, eget volutpat mi leo vitae lacus. Etiam ante ante, posuere at augue non, lacinia ornare purus. Praesent vitae velit in enim congue maximus. Vivamus tincidunt fringilla neque. Curabitur fermentum justo nec sapien porttitor, ac ullamcorper nisi imperdiet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed non orci vel eros egestas eleifend sit amet a diam. Duis mattis at ligula quis faucibus. Donec elementum lacus velit, a vehicula nunc gravida a. Phasellus eget nunc vehicula, varius velit a, maximus velit. Sed a suscipit nisi, non hendrerit felis. Proin mattis facilisis massa, quis elementum neque fringilla non.", + }), + ], + }), + new Paragraph({ + children: [ + new TextRun({ + text: "The second section starts with the headline above. Move cursor to the end of this text and press enter until next page is generated in continuous section break mode.", + }), + ], + }), + ], + }, + ], +}); + +Packer.toBuffer(doc).then((buffer) => { + fs.writeFileSync("My Document.docx", buffer); +}); diff --git a/demo/83-setting-languages.ts b/demo/83-setting-languages.ts new file mode 100644 index 0000000000..f21d4805da --- /dev/null +++ b/demo/83-setting-languages.ts @@ -0,0 +1,69 @@ +// Simple example to add text to a document +// Import from 'docx' rather than '../build' if you install from npm +import * as fs from "fs"; +import { Document, Packer, Paragraph } from "../build"; + +const doc = new Document({ + styles: { + default: { + document: { + run: { + color: "ff0000", + language: { + value: "es-ES", + }, + }, + }, + }, + paragraphStyles: [ + { + id: "frenchNormal", + name: "French Normal", + basedOn: "Normal", + next: "Normal", + run: { + color: "999999", + italics: true, + language: { + value: "fr-FR", + }, + }, + }, + { + id: "koreanNormal", + name: "Korean Normal", + basedOn: "Normal", + next: "Normal", + run: { + color: "0000ff", + bold: true, + language: { + value: "ko-KR", + }, + }, + }, + ], + }, + sections: [ + { + properties: {}, + children: [ + new Paragraph({ + text: "Yo vivo en Granada, una ciudad pequeña que tiene monumentos muy importantes como la Alhambra. Aquí la comida es deliciosa y son famosos el gazpacho, el rebujito y el salmorejo.", + }), + new Paragraph({ + text: "Toute personne a droit à l'éducation. L'éducation doit être gratuite, au moins en ce qui concerne l'enseignement élémentaire et fondamental. L'enseignement élémentaire est obligatoire. L'enseignement technique et professionnel doit être généralisé; l'accès aux études supérieures doit être ouvert en pleine égalité à tous en fonction de leur mérite.", + style: "frenchNormal", + }), + new Paragraph({ + text: "대법관은 대법원장의 제청으로 국회의 동의를 얻어 대통령이 임명한다. 강화조약. 국가는 국민 모두의 생산 및 생활의 기반이 되는 국토의 효율적이고 균형있는 이용·개발과 보전을 위하여 법률이 정하는 바에 의하여 그에 관한 필요한 제한과 의무를 과할 수 있다, 국가는 청원에 대하여 심사할 의무를 진다.", + style: "koreanNormal", + }), + ], + }, + ], +}); + +Packer.toBuffer(doc).then((buffer) => { + fs.writeFileSync("My Document.docx", buffer); +}); diff --git a/demo/84-positional-tabs.ts b/demo/84-positional-tabs.ts new file mode 100644 index 0000000000..1d61b93de7 --- /dev/null +++ b/demo/84-positional-tabs.ts @@ -0,0 +1,60 @@ +// Simple example apply positional tabs to a document +// Import from 'docx' rather than '../build' if you install from npm +import * as fs from "fs"; +import { + Document, + Packer, + Paragraph, + PositionalTab, + Tab, + TextRun, + PositionalTabAlignment, + PositionalTabRelativeTo, + PositionalTabLeader, +} from "../build"; + +const doc = new Document({ + sections: [ + { + properties: {}, + children: [ + new Paragraph({ + children: [ + new TextRun("Full name"), + new TextRun({ + children: [ + new PositionalTab({ + alignment: PositionalTabAlignment.RIGHT, + relativeTo: PositionalTabRelativeTo.MARGIN, + leader: PositionalTabLeader.DOT, + }), + "John Doe", + ], + bold: true, + }), + ], + }), + new Paragraph({ + children: [ + new TextRun("Hello World"), + new TextRun({ + children: [ + new PositionalTab({ + alignment: PositionalTabAlignment.CENTER, + relativeTo: PositionalTabRelativeTo.INDENT, + leader: PositionalTabLeader.HYPHEN, + }), + "Foo bar", + ], + bold: true, + }), + ], + }), + ], + }, + ], +}); + +Packer.toBuffer(doc).then((buffer) => { + fs.writeFileSync("My Document.docx", buffer); +}); diff --git a/docs/_sidebar.md b/docs/_sidebar.md index cebe089854..8805f6a417 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -20,7 +20,7 @@ - [Hyperlinks](usage/hyperlinks.md) - [Numbering](usage/numbering.md) - [Tables](usage/tables.md) - - [Tab Stops](usage/tab-stops.md) + - [Tabs](usage/tabs.md) - [Table of Contents](usage/table-of-contents.md) - [Page Numbers](usage/page-numbers.md) - [Change Tracking](usage/change-tracking.md) diff --git a/docs/usage/tab-stops.md b/docs/usage/tab-stops.md deleted file mode 100644 index 5c859a1bac..0000000000 --- a/docs/usage/tab-stops.md +++ /dev/null @@ -1,121 +0,0 @@ -# Tab Stops - -> Tab stops are useful, if you are unclear of what they are, [here is a link explaining](https://en.wikipedia.org/wiki/Tab_stop). It enables side by side text which is nicely laid out without the need for tables, or constantly pressing space bar. - -!> **Note**: The unit of measurement for a tab stop is in [DXA](https://stackoverflow.com/questions/14360183/default-wordml-unit-measurement-pixel-or-point-or-inches) - -![Word 2013 Tabs](https://support.content.office.net/en-us/media/d75ca75d-9fe9-4d46-9a8b-4534c13acbc5.png "Word 2013 Tab Stops") - -Simply declare the tab stops on the paragraph, as shown below. Use the tab character `\t` to indicate the tab position within the `text` property of a `TextRun`. Adding multiple `tabStops` will mean you can add additional `\t` characters until the desired `tabStop` is selected. Example is shown below. - -## Example - -```ts -const paragraph = new Paragraph({ - children: [new TextRun({ text: "Hey everyone", bold: true}), new TextRun("\t11th November 1999")], - tabStops: [ - { - type: TabStopType.RIGHT, - position: TabStopPosition.MAX, - }, - ], -}); -``` - -The example above will create a left aligned text, and a right aligned text on the same line. The laymans approach to this problem would be to either use text boxes or tables. Not ideal! - -```ts -const paragraph = new Paragraph({ - children: [new TextRun("\t\tSecond tab stop here I come!")], - tabStops: [ - { - type: TabStopType.RIGHT, - position: TabStopPosition.MAX, - }, - { - type: TabStopType.LEFT, - position: 1000, - }, - ], -}); -``` - -The above shows the use of two tab stops, and how to select/use it. - -You can add multiple tab stops of the same `type` too. - -```ts -const paragraph = new Paragraph({ - children: [new TextRun("Multiple \ttab \tstops!")], - tabStops: [ - { - type: TabStopType.RIGHT, - position: TabStopPosition.MAX, - }, - { - type: TabStopType.RIGHT, - position: 1000, - }, - ], -}); -``` - -## Left Tab Stop - -```ts -const paragraph = new Paragraph({ - tabStops: [ - { - type: TabStopType.LEFT, - position: 2268, - }, - ], -}); -``` - -2268 is the distance from the left side. - -## Center Tab Stop - -```ts -const paragraph = new Paragraph({ - tabStops: [ - { - type: TabStopType.CENTER, - position: 2268, - }, - ], -}); -``` - -2268 is the distance from the center. - -## Right Tab Stop - -```ts -const paragraph = new Paragraph({ - tabStops: [ - { - type: TabStopType.RIGHT, - position: 2268, - }, - ], -}); -``` - -2268 is the distance from the left side. - -## Max Right Tab Stop - -```ts -const paragraph = new Paragraph({ - tabStops: [ - { - type: TabStopType.RIGHT, - position: TabStopPosition.MAX, - }, - ], -}); -``` - -This will create a tab stop on the very edge of the right hand side. Handy for right aligning and left aligning text on the same line. diff --git a/docs/usage/tabs.md b/docs/usage/tabs.md new file mode 100644 index 0000000000..f2ab2f2841 --- /dev/null +++ b/docs/usage/tabs.md @@ -0,0 +1,184 @@ +# Tabs and Tab Stops + +## Tab Stops + +> Tab stops are useful, if you are unclear of what they are, [here is a link explaining](https://en.wikipedia.org/wiki/Tab_stop). It enables side by side text which is nicely laid out without the need for tables, or constantly pressing space bar. + +!> **Note**: The unit of measurement for a tab stop is in [DXA](https://stackoverflow.com/questions/14360183/default-wordml-unit-measurement-pixel-or-point-or-inches) + +![Word 2013 Tabs](https://support.content.office.net/en-us/media/d75ca75d-9fe9-4d46-9a8b-4534c13acbc5.png "Word 2013 Tab Stops") + +Simply declare the tab stops on the paragraph, as shown below. Use the tab character `\t` or add the `new Tab()` child to indicate the tab position within the `text` property of a `TextRun`. Adding multiple `tabStops` will mean you can add additional `\t` characters until the desired `tabStop` is selected. Example is shown below. + +### Example + +```ts +const paragraph = new Paragraph({ + children: [ + new TextRun({ text: "Hey everyone", bold: true }), + new TextRun("\t11th November 1999"), + new TextRun({ + children: [new Tab(), "11th November 1999"], + }), + ], + tabStops: [ + { + type: TabStopType.RIGHT, + position: TabStopPosition.MAX, + }, + ], +}); +``` + +The example above will create a left aligned text, and a right aligned text on the same line. The laymans approach to this problem would be to either use text boxes or tables. Not ideal! + +```ts +const paragraph = new Paragraph({ + children: [new TextRun("\t\tSecond tab stop here I come!")], + tabStops: [ + { + type: TabStopType.RIGHT, + position: TabStopPosition.MAX, + }, + { + type: TabStopType.LEFT, + position: 1000, + }, + ], +}); +``` + +The above shows the use of two tab stops, and how to select/use it. + +You can add multiple tab stops of the same `type` too. + +```ts +const paragraph = new Paragraph({ + children: [new TextRun("Multiple \ttab \tstops!")], + tabStops: [ + { + type: TabStopType.RIGHT, + position: TabStopPosition.MAX, + }, + { + type: TabStopType.RIGHT, + position: 1000, + }, + ], +}); + +const paragraph = new Paragraph({ + children: [ + new TextRun({ + children: ["Multiple ", new Tab(), "tab ", new Tab(), "stops!"], + }), + ], + tabStops: [ + { + type: TabStopType.RIGHT, + position: TabStopPosition.MAX, + }, + { + type: TabStopType.RIGHT, + position: 1000, + }, + ], +}); +``` + +### Left Tab Stop + +```ts +const paragraph = new Paragraph({ + tabStops: [ + { + type: TabStopType.LEFT, + position: 2268, + }, + ], +}); +``` + +2268 is the distance from the left side. + +### Center Tab Stop + +```ts +const paragraph = new Paragraph({ + tabStops: [ + { + type: TabStopType.CENTER, + position: 2268, + }, + ], +}); +``` + +2268 is the distance from the center. + +### Right Tab Stop + +```ts +const paragraph = new Paragraph({ + tabStops: [ + { + type: TabStopType.RIGHT, + position: 2268, + }, + ], +}); +``` + +2268 is the distance from the left side. + +### Max Right Tab Stop + +```ts +const paragraph = new Paragraph({ + tabStops: [ + { + type: TabStopType.RIGHT, + position: TabStopPosition.MAX, + }, + ], +}); +``` + +This will create a tab stop on the very edge of the right hand side. Handy for right aligning and left aligning text on the same line. + +## Positional Tabs + +> Positional tab allow you to create a tab stop that is relative to the margin, or the page. This is useful if you want to create a table of contents, or a table of figures. + +They are easier to use than the normal tab stops, as you can use the `PositionalTab` class to create a tab stop, and then add the text to the `TextRun` children. Useful for most cases. + +![Word Positional Tabs](https://user-images.githubusercontent.com/26860966/209019464-d4b50236-c324-4cdb-8139-b9d172b1b993.png "Word Positional Tabs") + +### Example + +```ts +new Paragraph({ + children: [ + new TextRun("Full name"), + new TextRun({ + children: [ + new PositionalTab({ + alignment: PositionalTabAlignment.RIGHT, + relativeTo: PositionalTabRelativeTo.MARGIN, + leader: PositionalTabLeader.DOT, + }), + "John Doe", + ], + bold: true, + }), + ], +}), +``` + +### Options + +| Option | Type | Description | Possible Values | +| ---------- | ------------------------- | ------------------------------------- | ------------------------------------------------------------- | +| alignment | `PositionalTabAlignment` | The alignment of the tab stop | `LEFT`, `RIGHT`, `CENTER` | +| relativeTo | `PositionalTabRelativeTo` | The relative position of the tab stop | `MARGIN`, `INDENT` | +| leader | `PositionalTabLeader` | The leader of the tab stop | `NONE`, `DOT`, `HYPHEN`, `UNDERSCORE`, `MIDDLE_DOT`, `EQUALS` | diff --git a/package-lock.json b/package-lock.json index 0953680791..2b5728e020 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,17 @@ { "name": "docx", - "version": "7.7.0", + "version": "7.8.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "docx", - "version": "7.7.0", + "version": "7.8.2", "license": "MIT", "dependencies": { "@types/node": "^18.0.0", "jszip": "^3.1.5", - "nanoid": "^4.0.0", + "nanoid": "^3.3.4", "xml": "^1.0.1", "xml-js": "^1.6.8" }, @@ -32,12 +32,12 @@ "cspell": "^6.2.2", "docsify-cli": "^4.3.0", "eslint": "^8.23.0", - "eslint-plugin-functional": "^4.3.1", + "eslint-plugin-functional": "^5.0.1", "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsdoc": "^39.3.6", + "eslint-plugin-jsdoc": "^40.0.0", "eslint-plugin-no-null": "^1.0.2", "eslint-plugin-prefer-arrow": "^1.2.3", - "eslint-plugin-unicorn": "^44.0.0", + "eslint-plugin-unicorn": "^45.0.0", "glob": "^8.0.1", "jszip": "^3.1.5", "mocha": "^10.0.0", @@ -49,16 +49,16 @@ "replace-in-file": "^6.2.0", "request": "^2.88.0", "request-promise": "^4.2.2", - "rimraf": "^3.0.2", + "rimraf": "^4.0.4", "shelljs": "^0.8.4", - "sinon": "^14.0.0", + "sinon": "^15.0.0", "stream-browserify": "^3.0.0", "ts-loader": "^9.0.0", "ts-node": "^10.2.1", "tsconfig-paths": "^4.0.0", "tsconfig-paths-webpack-plugin": "^4.0.0", "typedoc": "^0.23.2", - "typescript": "4.9.3", + "typescript": "4.9.5", "unzipper": "^0.10.11", "webpack": "^5.28.0", "webpack-cli": "^5.0.0" @@ -398,52 +398,56 @@ } }, "node_modules/@cspell/cspell-bundled-dicts": { - "version": "6.14.3", - "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-6.14.3.tgz", - "integrity": "sha512-bgPBduoDi1jkrcLkmAwRG1c6F1iprF2yfBgEDT19dRG1kYuq/fLGNOcSmEp4CbApn8m0MmxsrhEp8O0Q9owQRQ==", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-6.26.3.tgz", + "integrity": "sha512-ZOQI5XSJiLJi9GEbdjKJvMDbgzevsmoQzvAHZ2ujwzoWfhxCeEET0+6fs88/5QvHgXwl0CDsFspXZr1OFfZLHA==", "dev": true, "dependencies": { - "@cspell/dict-ada": "^4.0.0", + "@cspell/dict-ada": "^4.0.1", "@cspell/dict-aws": "^3.0.0", - "@cspell/dict-bash": "^4.1.0", - "@cspell/dict-companies": "^3.0.3", - "@cspell/dict-cpp": "^4.0.0", + "@cspell/dict-bash": "^4.1.1", + "@cspell/dict-companies": "^3.0.6", + "@cspell/dict-cpp": "^4.0.2", "@cspell/dict-cryptocurrencies": "^3.0.1", - "@cspell/dict-csharp": "^4.0.1", - "@cspell/dict-css": "^4.0.0", - "@cspell/dict-dart": "^2.0.0", - "@cspell/dict-django": "^4.0.0", - "@cspell/dict-docker": "^1.1.3", - "@cspell/dict-dotnet": "^4.0.0", - "@cspell/dict-elixir": "^4.0.0", - "@cspell/dict-en_us": "^4.1.0", + "@cspell/dict-csharp": "^4.0.2", + "@cspell/dict-css": "^4.0.3", + "@cspell/dict-dart": "^2.0.1", + "@cspell/dict-django": "^4.0.1", + "@cspell/dict-docker": "^1.1.5", + "@cspell/dict-dotnet": "^4.0.1", + "@cspell/dict-elixir": "^4.0.1", + "@cspell/dict-en_us": "^4.2.2", + "@cspell/dict-en-common-misspellings": "^1.0.2", "@cspell/dict-en-gb": "1.1.33", "@cspell/dict-filetypes": "^3.0.0", "@cspell/dict-fonts": "^3.0.0", - "@cspell/dict-fullstack": "^3.0.0", + "@cspell/dict-fullstack": "^3.1.1", + "@cspell/dict-gaming-terms": "^1.0.4", "@cspell/dict-git": "^2.0.0", - "@cspell/dict-golang": "^5.0.0", - "@cspell/dict-haskell": "^4.0.0", - "@cspell/dict-html": "^4.0.1", + "@cspell/dict-golang": "^5.0.1", + "@cspell/dict-haskell": "^4.0.1", + "@cspell/dict-html": "^4.0.2", "@cspell/dict-html-symbol-entities": "^4.0.0", - "@cspell/dict-java": "^5.0.2", - "@cspell/dict-latex": "^3.0.0", + "@cspell/dict-java": "^5.0.4", + "@cspell/dict-k8s": "^1.0.0", + "@cspell/dict-latex": "^3.1.0", "@cspell/dict-lorem-ipsum": "^3.0.0", - "@cspell/dict-lua": "^3.0.0", - "@cspell/dict-node": "^4.0.1", - "@cspell/dict-npm": "^4.0.1", - "@cspell/dict-php": "^3.0.3", - "@cspell/dict-powershell": "^3.0.0", - "@cspell/dict-public-licenses": "^2.0.0", - "@cspell/dict-python": "^4.0.0", - "@cspell/dict-r": "^2.0.0", - "@cspell/dict-ruby": "^3.0.0", - "@cspell/dict-rust": "^3.0.0", - "@cspell/dict-scala": "^3.0.0", - "@cspell/dict-software-terms": "^3.0.5", - "@cspell/dict-sql": "^2.0.0", - "@cspell/dict-swift": "^2.0.0", - "@cspell/dict-typescript": "^3.0.1", + "@cspell/dict-lua": "^4.0.0", + "@cspell/dict-node": "^4.0.2", + "@cspell/dict-npm": "^5.0.3", + "@cspell/dict-php": "^3.0.4", + "@cspell/dict-powershell": "^4.0.0", + "@cspell/dict-public-licenses": "^2.0.1", + "@cspell/dict-python": "^4.0.1", + "@cspell/dict-r": "^2.0.1", + "@cspell/dict-ruby": "^4.0.1", + "@cspell/dict-rust": "^4.0.0", + "@cspell/dict-scala": "^4.0.0", + "@cspell/dict-software-terms": "^3.1.3", + "@cspell/dict-sql": "^2.0.1", + "@cspell/dict-svelte": "^1.0.2", + "@cspell/dict-swift": "^2.0.1", + "@cspell/dict-typescript": "^3.1.0", "@cspell/dict-vue": "^3.0.0" }, "engines": { @@ -451,36 +455,36 @@ } }, "node_modules/@cspell/cspell-pipe": { - "version": "6.14.3", - "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-6.14.3.tgz", - "integrity": "sha512-/mLZxJOK3/UFpnR4jrImKY5W4cn5XWjvQPXnFCEzpU0tAAF6GboJgWl30TegqFJjLVCKTNRMOtT1r6kgvb66zw==", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-6.26.3.tgz", + "integrity": "sha512-e4LKHgXnYj8lO2qFaPaGUjgS2Vps464sc8lRt65MJ3iHR3/AzQO1mB+MDLCqItaLmcyA/llrEY1D8m9dGiBFxA==", "dev": true, "engines": { "node": ">=14" } }, "node_modules/@cspell/cspell-service-bus": { - "version": "6.14.3", - "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-6.14.3.tgz", - "integrity": "sha512-89OWGBzhorhiWcFqFTeHl9Y6WTdd5MGC2XNNCVZLM3VTYaFx4DVkiyxWdkE7gHjYxvNdGSH54/fE18TqLc//dQ==", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-6.26.3.tgz", + "integrity": "sha512-dbhsB8d4dEd8adyA+/KpNYERyOt8y3VSvOdgusjweEKjezCNxIwLR3GFQHi4QWCevDzrqS+mt9hAvO5RlYP7Bg==", "dev": true, "engines": { "node": ">=14" } }, "node_modules/@cspell/cspell-types": { - "version": "6.14.3", - "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-6.14.3.tgz", - "integrity": "sha512-u4Hun0vOQVkk3tJ6VzPjHVmv2dq0D6jYqX8pWLKWRwo38rdoIkdWseN359sWCz96tDM8g5rpSFdmecbWLU7BYg==", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-6.26.3.tgz", + "integrity": "sha512-s5SjHbpCP/MBTCCwgADzmZvsxpygIiH/2JytVUBrk8TWr4U8/EE3gXPdJ8EUAW3Ndgls/OpGn9c31F6sFjsLjg==", "dev": true, "engines": { "node": ">=14" } }, "node_modules/@cspell/dict-ada": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-ada/-/dict-ada-4.0.0.tgz", - "integrity": "sha512-M0n4ZYmpLOXbDD07Qb/Ekk0K5pX2C+mCuJ2ZxPgbTq9HGlrN43PmqrGJHWcgtVHE3fd1D4VxS85QcQP6r1Y+KQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-ada/-/dict-ada-4.0.1.tgz", + "integrity": "sha512-/E9o3nHrXOhYmQE43deKbxZcR3MIJAsa+66IzP9TXGHheKEx8b9dVMVVqydDDH8oom1H0U20NRPtu6KRVbT9xw==", "dev": true }, "node_modules/@cspell/dict-aws": { @@ -490,21 +494,21 @@ "dev": true }, "node_modules/@cspell/dict-bash": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-bash/-/dict-bash-4.1.0.tgz", - "integrity": "sha512-8pFL03ZKejynfbsa2UZ3iZ7BrT1TAGTD8ZlK822ioAb7aoDvQhYao2Bjz5cXU0uk7CyrlgsSnYX94sLfqDfTxQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-bash/-/dict-bash-4.1.1.tgz", + "integrity": "sha512-8czAa/Mh96wu2xr0RXQEGMTBUGkTvYn/Pb0o+gqOO1YW+poXGQc3gx0YPqILDryP/KCERrNvkWUJz3iGbvwC2A==", "dev": true }, "node_modules/@cspell/dict-companies": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.0.3.tgz", - "integrity": "sha512-qBWdwA97HdnLbxPLOUTZ+/mg9eYhi14hM7PEUM1PZ004MEIxQHum0IQpypKAwP3teR1KEsyxEPHp8v24Dw45Zg==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.0.6.tgz", + "integrity": "sha512-6rWuwZxPisn/MP41DzBtChVgbz9b6HSjBH3X0s3k7zlBaxrw6xFAZGKH9KGFSPTiV+WD9j+IIn2/ITXERGjNLA==", "dev": true }, "node_modules/@cspell/dict-cpp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-4.0.0.tgz", - "integrity": "sha512-NrCmer14tTSbPs1TwqyCjFEmWCBw0UFvAn4O3pdWuxktArHxRJ5vUQOoL2Gus2H9s3ihhOJZkcuJ47Kd21E7BQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-4.0.2.tgz", + "integrity": "sha512-Wi/ZUPoGaqvxeyaAdMtXFtfc3mZ4bw5nKYZrVHCsMzyGTC6IXL9Xp6KbwU0zEJXyNvvmRP5zd+Q4RnMf4abgCg==", "dev": true }, "node_modules/@cspell/dict-cryptocurrencies": { @@ -514,51 +518,57 @@ "dev": true }, "node_modules/@cspell/dict-csharp": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.1.tgz", - "integrity": "sha512-BkfT6S790FcyWLTWYBwkj9dKxuNz4pHFDrj9GFrmqXd2HWzfSa944S0NJhal42TnW30JJljQY5P1ZYau+s2Pbg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.2.tgz", + "integrity": "sha512-1JMofhLK+4p4KairF75D3A924m5ERMgd1GvzhwK2geuYgd2ZKuGW72gvXpIV7aGf52E3Uu1kDXxxGAiZ5uVG7g==", "dev": true }, "node_modules/@cspell/dict-css": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.0.tgz", - "integrity": "sha512-ieSeG9KAJGIr5eK0JRWqD5KXstPPUw6JUTmGWc7P/qiqj/sjmhWqWKEt7HhoSNcb8uQxAkAoxhrNpfbKzqnKAw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.3.tgz", + "integrity": "sha512-sLhutH5hlhPGuOtObR3Q0qezywuwREIcyTeERQw14kizYA3jA/J8YxSPcX2r9TsNFPHY85NAMyrH6Q38iyBGbw==", "dev": true }, "node_modules/@cspell/dict-dart": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-dart/-/dict-dart-2.0.0.tgz", - "integrity": "sha512-p7vHszsu2uJt+F04gvNy1e5okypFfVEYHBWgpOV/Jrvs0F5A+gUzFTG2Ix9b1jkCigAULYKQkIGue+qlhSoK5Q==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-dart/-/dict-dart-2.0.1.tgz", + "integrity": "sha512-YRuDX9k2qPSWDEsM26j8o7KMvaZ0DXc74ijK/VRwaksm1CBRPBW289pe2TE2K7y4SJjTKXgQ9urOVlozeQDpuA==", "dev": true }, "node_modules/@cspell/dict-django": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-4.0.0.tgz", - "integrity": "sha512-k0npSzQrPQSqjR2XtumV14sv9waTRMUzPx0UfOuJZcnCCZY8ofPeqFYoku+O+9Kc9etFOziOxnScshKVDzYWOQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-4.0.1.tgz", + "integrity": "sha512-q3l7OH39qzeN2Y64jpY39SEAqki5BUzPTypnhzM40yT+LOGSWqSh9Ix5UecejtXPDVrD8vML+m7Bp5070h52HQ==", "dev": true }, "node_modules/@cspell/dict-docker": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.3.tgz", - "integrity": "sha512-Iz7EQGnLBgnnmzCC8iLQ7JssCCQlCjZLiCs0qhooETWLifob3nzsI9AVBh3gkYLhISLIIjBpfa4LTknskT7LzA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.5.tgz", + "integrity": "sha512-SNEohOScQ+0+y9dp/jKTx60OOJQrf5es5BJ32gh5Ck3jKXNo4wd9KLgPOmQMUpencb5SGjrBsC4rr1fyfCwytg==", "dev": true }, "node_modules/@cspell/dict-dotnet": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-dotnet/-/dict-dotnet-4.0.0.tgz", - "integrity": "sha512-biZiTWyDqwVV2m+c17lLIliPDXPjOR1VwwmyMxvb3nFS84aP9x52SAVCf0w7Io1CIpUiY7XnG6/xeI7esYU78w==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-dotnet/-/dict-dotnet-4.0.1.tgz", + "integrity": "sha512-l11TqlUX8cDgsE/1Zrea1PqLn63s20MY3jKWMbQVB5DMDPDO2f8Pukckkwxq5p/cxDABEjuGzfF1kTX3pAakBw==", "dev": true }, "node_modules/@cspell/dict-elixir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-elixir/-/dict-elixir-4.0.0.tgz", - "integrity": "sha512-0TqqdQjg/zu3wAjk2FQkZ87pPIS9tA9kl6he5NJB729ysrWhND/7aSPC48QrP46VZ+oFrvFZK8DC8ZlYs16cjQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-elixir/-/dict-elixir-4.0.1.tgz", + "integrity": "sha512-IejBqiTTWSXpvBm6yg4qUfnJR0LwbUUCJcK5wXOMKEJitu3yDfrT9GPc6NQJXgokbg9nBjEyxVIzNcLgx2x3/Q==", "dev": true }, "node_modules/@cspell/dict-en_us": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.1.0.tgz", - "integrity": "sha512-EnfxP/5U3kDhmTWcHV7Xs2Fxa9KAE5fbHm+4u8LGBOUZvSkZC5+ayjQ50CfEyTGuaI/946ITQYPRNxUZ7oqOiQ==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.2.2.tgz", + "integrity": "sha512-NSlvE6bIkgRRlBkfltiwREu2NYT4PrLmpdi9zSeWuUMlGB+0wUGAal3B7zKC1pirhueH20W6to0lPdnEWaqa8Q==", + "dev": true + }, + "node_modules/@cspell/dict-en-common-misspellings": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-1.0.2.tgz", + "integrity": "sha512-jg7ZQZpZH7+aAxNBlcAG4tGhYF6Ksy+QS5Df73Oo+XyckBjC9QS+PrRwLTeYoFIgXy5j3ICParK5r3MSSoL4gw==", "dev": true }, "node_modules/@cspell/dict-en-gb": { @@ -580,9 +590,15 @@ "dev": true }, "node_modules/@cspell/dict-fullstack": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.0.0.tgz", - "integrity": "sha512-BMQRTaeReLufjMwgWqqwPdrXQ7jkVGTv7/YvOLsHFZvcAP3eM7WqX+rvdXckLhJmuuzbceFRDKs5F/9Ig2x/tQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.1.1.tgz", + "integrity": "sha512-w2n3QvqEiufmvlBuNduury/pySrhfOcWFfCvvpUXTJvWbfRVGkt6ANZuTuy3/7Z2q4GYUqsd139te4Q8m0jRHQ==", + "dev": true + }, + "node_modules/@cspell/dict-gaming-terms": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.0.4.tgz", + "integrity": "sha512-hbDduNXlk4AOY0wFxcDMWBPpm34rpqJBeqaySeoUH70eKxpxm+dvjpoRLJgyu0TmymEICCQSl6lAHTHSDiWKZg==", "dev": true }, "node_modules/@cspell/dict-git": { @@ -592,21 +608,21 @@ "dev": true }, "node_modules/@cspell/dict-golang": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-5.0.0.tgz", - "integrity": "sha512-Cbx4mVHsGbr5D+wlT0yU3n/0c5iLvciU48rSOQR7SCAzu5mTXyM1mqRu6nqnRiMv6G6mO50EL2LCTq6RZrlIOg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-5.0.1.tgz", + "integrity": "sha512-djsJC7OVKUpFdRm/aqBJEUSGP3kw/MDhAt7udYegnyQt2WjL3ZnVoG7r5eOEhPEEKzWVBYoi6UKSNpdQEodlbg==", "dev": true }, "node_modules/@cspell/dict-haskell": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-haskell/-/dict-haskell-4.0.0.tgz", - "integrity": "sha512-U/DPpDoitGeUvduM9teDkDc1zs4Plgh0pNONDP3YbsEICErSlp1NfatD0i35Z6cR0C7I8uEe4gG2phG00zrSqw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-haskell/-/dict-haskell-4.0.1.tgz", + "integrity": "sha512-uRrl65mGrOmwT7NxspB4xKXFUenNC7IikmpRZW8Uzqbqcu7ZRCUfstuVH7T1rmjRgRkjcIjE4PC11luDou4wEQ==", "dev": true }, "node_modules/@cspell/dict-html": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.1.tgz", - "integrity": "sha512-q5fCzkoOz+8BW79qLrnANEDnG+Jb2WS2fXERxg9xwgKBXwXUxH8ttGVNhfkLpNWe/UMm00U1IZMnVGyYLNTO5w==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.2.tgz", + "integrity": "sha512-BskOE2K3AtGLkcjdJmo+H6/fjdfDP4XYAsEGXpB26rvdnXAnGEstE/Q8Do6UfJCvgOVYCpdUZLcMIEpoTy7QhQ==", "dev": true }, "node_modules/@cspell/dict-html-symbol-entities": { @@ -616,15 +632,21 @@ "dev": true }, "node_modules/@cspell/dict-java": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-java/-/dict-java-5.0.2.tgz", - "integrity": "sha512-HWgdp8plZOdYjOkndwmgHGVxoewylZcl886PqSL6TMcDshyI0+2nePft31nIuALRvt7HL8IX++DM1uk4UfY4kg==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-java/-/dict-java-5.0.4.tgz", + "integrity": "sha512-43VrLOLcBxavv6eyL4BpsnHrhVOgyYYeJqQRJG5XKObcpWy3+Lpadj58CfTVOr7M/Je3pUpd4tvsUhf/lWXMVA==", + "dev": true + }, + "node_modules/@cspell/dict-k8s": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-k8s/-/dict-k8s-1.0.0.tgz", + "integrity": "sha512-XqIql+nd2DiuPuL+qPc24bN/L1mZY75kAYcuMBMW5iYgBoivkiVOg7br/aofX3ApajvHDln6tNkPZhmhsOg6Ww==", "dev": true }, "node_modules/@cspell/dict-latex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-latex/-/dict-latex-3.0.0.tgz", - "integrity": "sha512-QsRWj+Jll4ueVbce8ofKa743oQ2exmbVNZN70MaMbmu8PSbjW2+Rj3OdExVStesANMj7qc20inS/TgPr8DrInQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-latex/-/dict-latex-3.1.0.tgz", + "integrity": "sha512-XD5S3FY0DrYiun2vm/KKOkeaD30LXp9v5EzVTVQvmxqQrQh0HvOT3TFD7lgKbyzZaG7E+l3wS94uwwm80cOmuw==", "dev": true }, "node_modules/@cspell/dict-lorem-ipsum": { @@ -634,93 +656,99 @@ "dev": true }, "node_modules/@cspell/dict-lua": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-3.0.0.tgz", - "integrity": "sha512-WOhSCgS5wMxkGQJ8siB90iTB9ElquJB7FeqYSbJqqs6cUwH8G7MM/CEDPL6h7vCo0+v3GuxQ8yKWDSUcUhz9Lg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-4.0.0.tgz", + "integrity": "sha512-aQPyc/nP67tOlW6ACpio9Q5mZ/Z1hqwXC5rt5tkoQ2GsnCqeyIXDrX0CN+RGK53Lj4P02Jz/dPxs/nX8eDUFsw==", "dev": true }, "node_modules/@cspell/dict-node": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-node/-/dict-node-4.0.1.tgz", - "integrity": "sha512-4EmT5yZFitdwnG0hYEd+Ek19zzD81Bp+n7w0kglZKldS5AvapwW6GM/SAps5YMQQc5zZMi+bMgV7NIzapREqUg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-node/-/dict-node-4.0.2.tgz", + "integrity": "sha512-FEQJ4TnMcXEFslqBQkXa5HposMoCGsiBv2ux4IZuIXgadXeHKHUHk60iarWpjhzNzQLyN2GD7NoRMd12bK3Llw==", "dev": true }, "node_modules/@cspell/dict-npm": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-4.0.1.tgz", - "integrity": "sha512-jNKImVG5ZX+Pp6PhbSR3TmC9+0ROx09dGhSgUsZyvXV5CGEr+OQGJtNL98TGwU3pP2Xjc++qnHA/XPwB5WvLfA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.0.3.tgz", + "integrity": "sha512-fEX67zIJISbS3gXVk/y/ZUvDIVtjc/CYJK7Mz0iTVrmlCKnLiD41lApe8v4g/12eE7hLfx/sfCXDrUWyzXVq1A==", "dev": true }, "node_modules/@cspell/dict-php": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-3.0.3.tgz", - "integrity": "sha512-7dvXdPTfbIF2xEob9w94/eV5SU8BkYoN0R7EQghXi0fcF7T1unK+JwDgfoEs6wqApB5aCVYwguiaj8HGX2IRIQ==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-3.0.4.tgz", + "integrity": "sha512-QX6zE/ZfnT3O5lSwV8EPVh8Va39ds34gSNNR8I4GWiuDpKcTkZPFi4OLoP3Tlhbl/3G0Ha35OkSDLvZfu8mnkA==", "dev": true }, "node_modules/@cspell/dict-powershell": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-3.0.0.tgz", - "integrity": "sha512-pkztY9Ak4oc33q+Qxcn9/CTOKo4N8YIRRE6v67WwQOncA5QIJfcOPUrjfR3Z8SpzElXhu3s9qtWWSqbCy6qmcA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-4.0.0.tgz", + "integrity": "sha512-1Lbm+3+Sx63atl4MM3lPeCUc90JjRyKP9+exmy2cQimXNju9ngtuDWwapHUnhQ47qnzrsBY4ydm36KCfJarXJA==", "dev": true }, "node_modules/@cspell/dict-public-licenses": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.0.tgz", - "integrity": "sha512-NdMHnS6xiYJKlzVoTV5CBhMiDpXMZ/PDcvXiOpxeR50xkjR18O/XFP4f4eDZpxGiBSUCMFRWf4JjILJ04Rpcfg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.1.tgz", + "integrity": "sha512-NZNwzkL5BqKddepDxvX/Qbji378Mso1TdnV4RFAN8hJoo6dSR0fv2TTI/Y0i/YWBmfmQGyTpEztBXtAw4qgjiA==", "dev": true }, "node_modules/@cspell/dict-python": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.0.0.tgz", - "integrity": "sha512-MC6CKbYOly3Ig25ZnhlCzPbE/QozqfQv4VYW6HcoMQ5IbHu33ddf2lzkZ89qTXlxsF5NT5qfZEkQYHYuhuL6AQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.0.1.tgz", + "integrity": "sha512-1wtUgyaTqRiQY0/fryk0oW22lcxNUnZ5DwteTzfatMdbgR0OHXTlHbI8vYxpHLWalSoch7EpLsnaymG+fOrt8g==", "dev": true }, "node_modules/@cspell/dict-r": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-r/-/dict-r-2.0.0.tgz", - "integrity": "sha512-rdt1cKc3VL2uXJ2X088gRhTFreN/MkJWK1jccW1EWdFHLzDwhKfrlAkoLCp0paD6HvmloLQ+eSR09D58DdsYfA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-r/-/dict-r-2.0.1.tgz", + "integrity": "sha512-KCmKaeYMLm2Ip79mlYPc8p+B2uzwBp4KMkzeLd5E6jUlCL93Y5Nvq68wV5fRLDRTf7N1LvofkVFWfDcednFOgA==", "dev": true }, "node_modules/@cspell/dict-ruby": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-3.0.0.tgz", - "integrity": "sha512-sA98T8Y1Pmq3RStVkO14E8vTWkq6JUn8c8PldiMyYgV0yfQgwhQfFAzlSfF3Gg2B0VkIdqt2et2SPN7f9wp7fQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-4.0.1.tgz", + "integrity": "sha512-p9nLDsffPadPLLwdLQj4Gk0IsZ64iCSxnSCaeFXslFiD17FtJVh1YMHP7KE9M73u22Hprq+a1Yw25/xp6Tkt3g==", "dev": true }, "node_modules/@cspell/dict-rust": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-3.0.0.tgz", - "integrity": "sha512-L1T1IBsYJZVDmfOGAbVLcpc6arWxRRCSJYvHSwEDBGrNuMyJ4jx/NvBEz5crcKf4vVKgwVlXgzQlJJZ8AVxU9w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.0.0.tgz", + "integrity": "sha512-nzJsgLR6/JXtM41Cr5FG89r8sBKW6aFjvCqPxeaBJYLAL0JuvsVUcd16rW2lTsdbx5J8yUQDD7mgCZFk6merJQ==", "dev": true }, "node_modules/@cspell/dict-scala": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-3.0.0.tgz", - "integrity": "sha512-sIiCQDIMMnNns/fzD61z5npbh5pypaKq07Orqe0+eRfdQpika8iRSGUGFHVbtdd1JzB1DyTCV2e8OwdaQiXqJQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-4.0.0.tgz", + "integrity": "sha512-ugdjt66/Ah34yF3u3DUNjCHXnBqIuxUUfdeBobbGxfm29CNgidrISV1NUh+xi8tPynMzSTpGbBiArFBH6on5XQ==", "dev": true }, "node_modules/@cspell/dict-software-terms": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-3.0.5.tgz", - "integrity": "sha512-xZVcX1zsIUbLvUc/RX+YgJRvbHaGMcdkRR+Vw8UoLjmhnT0yXWLds5uwRwAVjlQIrIcHylfDWuG70Cq5nmJHfA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-3.1.3.tgz", + "integrity": "sha512-gmVR+VgjLGPvUPaF4m1JEv9/mWvKE0bkj5w8nwtijZtAToZ6SKpWM/rkcZOsa691fMyhU6LbIfy4tAZbSSLVYA==", "dev": true }, "node_modules/@cspell/dict-sql": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-sql/-/dict-sql-2.0.0.tgz", - "integrity": "sha512-J3X8VSgWpc/4McQEs138abtBw/SO3Z+vGaYi5X7XV1pKPBxjupHTTNQHSS/HWUDmVWj6fR3OV+ZGptcmvv3Clg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-sql/-/dict-sql-2.0.1.tgz", + "integrity": "sha512-7fvVcvy751cl31KMD5j04yMGq2UKj018/1hx3FNtdUI9UuUTMvhBrTAqHEEemR3ZeIC9i/5p5SQjwQ13bn04qw==", + "dev": true + }, + "node_modules/@cspell/dict-svelte": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-svelte/-/dict-svelte-1.0.2.tgz", + "integrity": "sha512-rPJmnn/GsDs0btNvrRBciOhngKV98yZ9SHmg8qI6HLS8hZKvcXc0LMsf9LLuMK1TmS2+WQFAan6qeqg6bBxL2Q==", "dev": true }, "node_modules/@cspell/dict-swift": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-swift/-/dict-swift-2.0.0.tgz", - "integrity": "sha512-VStJ0fKPPNIXKmxJrbGH6vKNtJCwAnQatfSH0fVj+Unf3QHHlmuLKRG0cN0aVgEIolpRkxNXJcSB3CPbYr0Xhw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-swift/-/dict-swift-2.0.1.tgz", + "integrity": "sha512-gxrCMUOndOk7xZFmXNtkCEeroZRnS2VbeaIPiymGRHj5H+qfTAzAKxtv7jJbVA3YYvEzWcVE2oKDP4wcbhIERw==", "dev": true }, "node_modules/@cspell/dict-typescript": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.0.1.tgz", - "integrity": "sha512-nKEtOpj+rJNIUK268/mCFDCIv1MWFdK1efm9YL4q1q3NHT+qCKhkXoA0eG8k4AaDIpsvebB8CgNIYFPxY92r4A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.1.0.tgz", + "integrity": "sha512-4hdLlQMOYrUbGfJg2cWnbsBUevObwgL76TLVC0rwnrkSwzOxAxiGaG39VtRMvgAAe2lX6L+jka3fy0MmxzFOHw==", "dev": true }, "node_modules/@cspell/dict-vue": { @@ -729,10 +757,22 @@ "integrity": "sha512-niiEMPWPV9IeRBRzZ0TBZmNnkK3olkOPYxC1Ny2AX4TGlYRajcW0WUtoSHmvvjZNfWLSg2L6ruiBeuPSbjnG6A==", "dev": true }, + "node_modules/@cspell/dynamic-import": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-6.26.3.tgz", + "integrity": "sha512-Ic5uNy49mDg/6Qtbuc51zq2sDd0lXiFVN2QKSueNjk5hA5Zh/ZLQhrB70q7qaQwQg7FTiRxvJjpRtNoVqbY/sg==", + "dev": true, + "dependencies": { + "import-meta-resolve": "^2.2.1" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/@cspell/strong-weak-map": { - "version": "6.14.3", - "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-6.14.3.tgz", - "integrity": "sha512-/FTvcywuwfFTMEpRabL8+rqB/ezSjvMp6todO0SwL/agYQmRIuTvTYLh0Ikq430oVnjo7LDgztW0tHq38UlFLw==", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-6.26.3.tgz", + "integrity": "sha512-PC+I5obQY6f/l4/Z4TiE6HJhDiuR8wCPYqezPtBuD1Fw7Op0Nni77gUPKajTxhy1WHpks/PTTSjnV/cX9Mgt1Q==", "dev": true, "engines": { "node": ">=14.6" @@ -760,9 +800,9 @@ } }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.36.0.tgz", - "integrity": "sha512-u0XZyvUF6Urb2cSivSXA8qXIpT/CxkHcdtZKoWusAzgzmsTWpg0F2FpWXsolHmMUyVY3dLWaoy+0ccJ5uf2QjA==", + "version": "0.36.1", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.36.1.tgz", + "integrity": "sha512-922xqFsTpHs6D0BUiG4toiyPOMc8/jafnWKxz1KWgS4XzKPy2qXf1Pe6UFuNSCQqt6tOuhAWXBNuuyUhJmw9Vg==", "dev": true, "dependencies": { "comment-parser": "1.3.1", @@ -773,16 +813,31 @@ "node": "^14 || ^16 || ^17 || ^18 || ^19" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.1.2.tgz", + "integrity": "sha512-7qELuQWWjVDdVsFQ5+beUl+KPczrEDA7S3zM4QUd/bJl7oXgsmpXaEVqrRTnOBqenOV4rWf2kVZk2Ot085zPWA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.4.0", - "globals": "^13.15.0", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -850,14 +905,14 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.6", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.6.tgz", - "integrity": "sha512-jJr+hPTJYKyDILJfhNSHsjiwXYf26Flsz8DvNndOsHs5pwSnpGUEy8yzF0JYhCEvTDdV2vuOK5tt8BVhwO5/hg==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" @@ -1055,21 +1110,12 @@ } }, "node_modules/@sinonjs/fake-timers": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", - "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz", + "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==", "dev": true, "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@sinonjs/fake-timers/node_modules/@sinonjs/commons": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.5.tgz", - "integrity": "sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" + "@sinonjs/commons": "^2.0.0" } }, "node_modules/@sinonjs/samsam": { @@ -1176,12 +1222,12 @@ "dev": true }, "node_modules/@types/glob": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.0.0.tgz", - "integrity": "sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.0.1.tgz", + "integrity": "sha512-8bVUjXZvJacUFkJXHdyZ9iH1Eaj5V7I8c4NdH5sQJsdXkqT4CA5Dhb4yb4VE/3asyx4L9ayZr1NIhTsWHczmMw==", "dev": true, "dependencies": { - "@types/minimatch": "*", + "@types/minimatch": "^5.1.2", "@types/node": "*" } }, @@ -1198,21 +1244,21 @@ "dev": true }, "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", "dev": true }, "node_modules/@types/mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-rADY+HtTOA52l9VZWtgQfn4p+UDVM2eDVkMZT1I6syp0YKxW2F9v+0pbRZLsvskhQv/vMb6ZfCay81GHbz5SHg==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", + "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", "dev": true }, "node_modules/@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" + "version": "18.13.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.13.0.tgz", + "integrity": "sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg==" }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", @@ -1220,16 +1266,10 @@ "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, "node_modules/@types/prompt": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@types/prompt/-/prompt-1.1.4.tgz", - "integrity": "sha512-FLMcf+ol+eUJALeIYWLjQl0hYw86G0PIg7D5+4jJHwr/wKI8p3R0u+oKLbyRkzCxb7e0pHixyCj7UgSv7I/TJQ==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@types/prompt/-/prompt-1.1.5.tgz", + "integrity": "sha512-xvIqQ/DOwlRxVT/P47f85rJGIQLZ59XQnbRpCdSJi93FtaAFOScr6H7GhiaaLGi1jo8WfOy1rhkpjc2zPFXMoQ==", "dev": true, "dependencies": { "@types/node": "*", @@ -1336,15 +1376,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz", - "integrity": "sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.52.0.tgz", + "integrity": "sha512-lHazYdvYVsBokwCdKOppvYJKaJ4S41CgKBcPvyd0xjZNbvQdhn/pnJlGtQksQ/NhInzdaeaSarlBjDXHuclEbg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.43.0", - "@typescript-eslint/type-utils": "5.43.0", - "@typescript-eslint/utils": "5.43.0", + "@typescript-eslint/scope-manager": "5.52.0", + "@typescript-eslint/type-utils": "5.52.0", + "@typescript-eslint/utils": "5.52.0", "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", "regexpp": "^3.2.0", @@ -1369,13 +1410,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", - "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.52.0.tgz", + "integrity": "sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/visitor-keys": "5.43.0" + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1386,9 +1427,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", - "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.52.0.tgz", + "integrity": "sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1399,12 +1440,12 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", - "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.52.0.tgz", + "integrity": "sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/types": "5.52.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -1472,14 +1513,14 @@ "dev": true }, "node_modules/@typescript-eslint/parser": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz", - "integrity": "sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.52.0.tgz", + "integrity": "sha512-e2KiLQOZRo4Y0D/b+3y08i3jsekoSkOYStROYmPUnGMEoA0h+k2qOH5H6tcjIc68WDvGwH+PaOrP1XRzLJ6QlA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.43.0", - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/scope-manager": "5.52.0", + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/typescript-estree": "5.52.0", "debug": "^4.3.4" }, "engines": { @@ -1499,13 +1540,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", - "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.52.0.tgz", + "integrity": "sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/visitor-keys": "5.43.0" + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1516,9 +1557,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", - "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.52.0.tgz", + "integrity": "sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1529,13 +1570,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", - "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.52.0.tgz", + "integrity": "sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/visitor-keys": "5.43.0", + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1556,12 +1597,12 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", - "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.52.0.tgz", + "integrity": "sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/types": "5.52.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -1628,14 +1669,31 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.43.0.tgz", - "integrity": "sha512-K21f+KY2/VvYggLf5Pk4tgBOPs2otTaIHy2zjclo7UZGLyFH86VfUOm5iq+OtDtxq/Zwu2I3ujDBykVW4Xtmtg==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.51.0.tgz", + "integrity": "sha512-gNpxRdlx5qw3yaHA0SFuTjW4rxeYhpHxt491PEcKF8Z6zpq0kMhe0Tolxt0qjlojS+/wArSDlj/LtE69xUJphQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.43.0", - "@typescript-eslint/utils": "5.43.0", + "@typescript-eslint/types": "5.51.0", + "@typescript-eslint/visitor-keys": "5.51.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.52.0.tgz", + "integrity": "sha512-tEKuUHfDOv852QGlpPtB3lHOoig5pyFQN/cUiZtpw99D93nEBjexRLre5sQZlkMoHry/lZr8qDAt2oAHLKA6Jw==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.52.0", + "@typescript-eslint/utils": "5.52.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -1656,9 +1714,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", - "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.52.0.tgz", + "integrity": "sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1669,13 +1727,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", - "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.52.0.tgz", + "integrity": "sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/visitor-keys": "5.43.0", + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1696,12 +1754,12 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", - "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.52.0.tgz", + "integrity": "sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/types": "5.52.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -1768,17 +1826,113 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/@typescript-eslint/types": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.51.0.tgz", + "integrity": "sha512-SqOn0ANn/v6hFn0kjvLwiDi4AzR++CBZz0NV5AnusT2/3y32jdc0G4woXPWHCumWtUXZKPAS27/9vziSsC9jnw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.51.0.tgz", + "integrity": "sha512-TSkNupHvNRkoH9FMA3w7TazVFcBPveAAmb7Sz+kArY6sLT86PA5Vx80cKlYmd8m3Ha2SwofM1KwraF24lM9FvA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.51.0", + "@typescript-eslint/visitor-keys": "5.51.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/@typescript-eslint/utils": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.43.0.tgz", - "integrity": "sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.52.0.tgz", + "integrity": "sha512-As3lChhrbwWQLNk2HC8Ree96hldKIqk98EYvypd3It8Q1f8d5zWyIoaZEp2va5667M4ZyE7X8UUR+azXrFl+NA==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.43.0", - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/scope-manager": "5.52.0", + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/typescript-estree": "5.52.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0", "semver": "^7.3.7" @@ -1795,13 +1949,13 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", - "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.52.0.tgz", + "integrity": "sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/visitor-keys": "5.43.0" + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1812,9 +1966,9 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", - "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.52.0.tgz", + "integrity": "sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1825,13 +1979,13 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", - "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.52.0.tgz", + "integrity": "sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/visitor-keys": "5.43.0", + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1852,12 +2006,12 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", - "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.52.0.tgz", + "integrity": "sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/types": "5.52.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -1924,6 +2078,23 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.51.0.tgz", + "integrity": "sha512-Oh2+eTdjHjOFjKA27sxESlA87YPSOJafGCR0md5oeMdh1ZcCfAGCIOL216uTBAkAIptvLIfKQhl7lHxMJet4GQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.51.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -2071,9 +2242,9 @@ } }, "node_modules/@webpack-cli/configtest": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.0.0.tgz", - "integrity": "sha512-war4OU8NGjBqU3DP3bx6ciODXIh7dSXcpQq+P4K2Tqyd8L5OjZ7COx9QXx/QdCIwL2qoX09Wr4Cwf7uS4qdEng==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.0.1.tgz", + "integrity": "sha512-njsdJXJSiS2iNbQVS0eT8A/KPnmyH4pv1APj2K0d1wrZcBLw+yppxOy4CGqa0OxDJkzfL/XELDhD8rocnIwB5A==", "dev": true, "engines": { "node": ">=14.15.0" @@ -2084,9 +2255,9 @@ } }, "node_modules/@webpack-cli/info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.0.tgz", - "integrity": "sha512-NNxDgbo4VOkNhOlTgY0Elhz3vKpOJq4/PKeKg7r8cmYM+GQA9vDofLYyup8jS6EpUvhNmR30cHTCEIyvXpskwA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.1.tgz", + "integrity": "sha512-fE1UEWTwsAxRhrJNikE7v4EotYflkEhBL7EbajfkPlf6E37/2QshOy/D48Mw8G5XMFlQtS6YV42vtbG9zBpIQA==", "dev": true, "engines": { "node": ">=14.15.0" @@ -2097,9 +2268,9 @@ } }, "node_modules/@webpack-cli/serve": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.0.tgz", - "integrity": "sha512-Rumq5mHvGXamnOh3O8yLk1sjx8dB30qF1OeR6VC00DIR6SLJ4bwwUGKC4pE7qBFoQyyh0H9sAg3fikYgAqVR0w==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.1.tgz", + "integrity": "sha512-0G7tNyS+yW8TdgHwZKlDWYXFA6OJQnoLCQvYKkQP0Q2X205PSQ6RNUj0M+1OB/9gRQaUZ/ccYfaxd0nhaWKfjw==", "dev": true, "engines": { "node": ">=14.15.0" @@ -2230,6 +2401,12 @@ "node": ">=0.10.0" } }, + "node_modules/ansi-sequence-parser": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz", + "integrity": "sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==", + "dev": true + }, "node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -2289,15 +2466,15 @@ } }, "node_modules/array-includes": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", - "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", "is-string": "^1.0.7" }, "engines": { @@ -2323,14 +2500,32 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", - "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -2379,6 +2574,18 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -3135,19 +3342,36 @@ "dev": true }, "node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.0.0.tgz", + "integrity": "sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==", "dev": true, "dependencies": { - "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "path-type": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=14" + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, "node_modules/cp-file": { @@ -3192,26 +3416,26 @@ } }, "node_modules/cspell": { - "version": "6.14.3", - "resolved": "https://registry.npmjs.org/cspell/-/cspell-6.14.3.tgz", - "integrity": "sha512-DimVpUiw2iOSvO1daOTtOWjmryVZdFnPmjPhyhWZUqakOEgE2MgoBuk3cFzXqb8GsGXHQh5PqiWr1rqIkQ99qA==", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/cspell/-/cspell-6.26.3.tgz", + "integrity": "sha512-h7p8JpWSFhgNbsJLlpjzMCQ0k6TuhX/M5JcrED14x17CuZR7ad29lQDRF0Un82Wxhd8hJNxZubV9IBdWZA7Qig==", "dev": true, "dependencies": { - "@cspell/cspell-pipe": "6.14.3", + "@cspell/cspell-pipe": "6.26.3", + "@cspell/dynamic-import": "6.26.3", "chalk": "^4.1.2", - "commander": "^9.4.1", - "cspell-gitignore": "6.14.3", - "cspell-glob": "6.14.3", - "cspell-lib": "6.14.3", + "commander": "^10.0.0", + "cspell-gitignore": "6.26.3", + "cspell-glob": "6.26.3", + "cspell-lib": "6.26.3", + "fast-glob": "^3.2.12", "fast-json-stable-stringify": "^2.1.0", "file-entry-cache": "^6.0.1", - "fs-extra": "^10.1.0", "get-stdin": "^8.0.0", - "glob": "^8.0.3", "imurmurhash": "^0.1.4", "semver": "^7.3.8", "strip-ansi": "^6.0.1", - "vscode-uri": "^3.0.6" + "vscode-uri": "^3.0.7" }, "bin": { "cspell": "bin.js" @@ -3224,28 +3448,28 @@ } }, "node_modules/cspell-dictionary": { - "version": "6.14.3", - "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-6.14.3.tgz", - "integrity": "sha512-yIqJEZZj36j1CmmjAiuQOYZM6T62Ih7k35DhAU1hYVARUEEnFN/Uz72UkDj2SAmURVn2On+bAmZ5zCx0JZzf2g==", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-6.26.3.tgz", + "integrity": "sha512-wUiTHe7OWZuptEROJm3gzSk12ABAozArFnKVNfsfVR/tgBIjLTgX+9RIOuJL0g+vDxIsZu8dpOuty3MPmI3vBg==", "dev": true, "dependencies": { - "@cspell/cspell-pipe": "6.14.3", - "@cspell/cspell-types": "6.14.3", - "cspell-trie-lib": "6.14.3", + "@cspell/cspell-pipe": "6.26.3", + "@cspell/cspell-types": "6.26.3", + "cspell-trie-lib": "6.26.3", "fast-equals": "^4.0.3", - "gensequence": "^4.0.2" + "gensequence": "^4.0.3" }, "engines": { "node": ">=14" } }, "node_modules/cspell-gitignore": { - "version": "6.14.3", - "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-6.14.3.tgz", - "integrity": "sha512-CZTGxx3msF6p1Z0xgLe5LXXvve7DooSuRMBMdGn230usce1nKoxpPoPxgs+zXeCpi+FanykKnoZkdRvjolMpOA==", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-6.26.3.tgz", + "integrity": "sha512-K6Gl3I71UZOU9077xXhJmG2Bwzhj6ay64pnry6+KBHJDAxuSWnXaWg1/KpSf6ciwwvggyRxhKOSykzLI8Ivweg==", "dev": true, "dependencies": { - "cspell-glob": "6.14.3", + "cspell-glob": "6.26.3", "find-up": "^5.0.0" }, "bin": { @@ -3256,9 +3480,9 @@ } }, "node_modules/cspell-glob": { - "version": "6.14.3", - "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-6.14.3.tgz", - "integrity": "sha512-ISwCK8GqM/dnvtaxA17w1MPmMzFLOqdTz+JWIcR4at47T9qd8bNB0X0P4eqyuqgsbKkWbfnSlsYlEjRHTi4a7A==", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-6.26.3.tgz", + "integrity": "sha512-6f6waZGHZ1Vt9HVOqQrkYfq5EMJ+UvJGgiq1tVO8jDGdayupNIaivh9XT6ReWHJVLbKypJddQzrw7eMMEd0Mmg==", "dev": true, "dependencies": { "micromatch": "^4.0.5" @@ -3268,13 +3492,13 @@ } }, "node_modules/cspell-grammar": { - "version": "6.14.3", - "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-6.14.3.tgz", - "integrity": "sha512-Nz8tYUmstyKcFlXbxdw4N8NsQ2ZY/5ztNfouokk47LKaTAS0LyWlLSkZUxN016fMY2h+C+3dI+jaut2H/rtNew==", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-6.26.3.tgz", + "integrity": "sha512-eoqMETuGH6bjsSnK5UGtfLKLkW+VKOQBGRQBVBfI+2KKaZyfvm7/q8ScRYdAsoQg67Ws7/2Dplej7vRltyfCQQ==", "dev": true, "dependencies": { - "@cspell/cspell-pipe": "6.14.3", - "@cspell/cspell-types": "6.14.3" + "@cspell/cspell-pipe": "6.26.3", + "@cspell/cspell-types": "6.26.3" }, "bin": { "cspell-grammar": "bin.js" @@ -3284,136 +3508,64 @@ } }, "node_modules/cspell-io": { - "version": "6.14.3", - "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-6.14.3.tgz", - "integrity": "sha512-EbH+qopgWIzr9SZCGDsF4AWYgucN4QzYeAgyXjTbV9RnNIGKOKovMe3vN9nxjOZyPKv2TvmgU+uMXDM61iObRw==", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-6.26.3.tgz", + "integrity": "sha512-bUzsHM+A+jfMEYuwBnC/w2KIgf4TPEx3E5AIfg+qtRuP2paTYOFulNBWgxzWovSkXH08R4yNgDQIN1dO3Fhzjw==", "dev": true, "dependencies": { - "@cspell/cspell-service-bus": "6.14.3", - "node-fetch": "^2.6.7" + "@cspell/cspell-service-bus": "6.26.3", + "node-fetch": "^2.6.9" }, "engines": { "node": ">=14" } }, "node_modules/cspell-lib": { - "version": "6.14.3", - "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-6.14.3.tgz", - "integrity": "sha512-RJT5Tbe0UCMCtqDWRujjxq9u23sc2XylIpDP7MnpLx8wLVgFv2WPzESYNRGZqceqZYwBAPnpqS9h2ANxXSi8UQ==", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-6.26.3.tgz", + "integrity": "sha512-UwtrGSHoZxQmTm78yB55KLIz46THG1neZ87mYHdoYgc5EOc2gKTWRPfYsioUs8fH31L+4CwHNbdxvTRg+Vpg/Q==", "dev": true, "dependencies": { - "@cspell/cspell-bundled-dicts": "6.14.3", - "@cspell/cspell-pipe": "6.14.3", - "@cspell/cspell-types": "6.14.3", - "@cspell/strong-weak-map": "6.14.3", + "@cspell/cspell-bundled-dicts": "6.26.3", + "@cspell/cspell-pipe": "6.26.3", + "@cspell/cspell-types": "6.26.3", + "@cspell/strong-weak-map": "6.26.3", "clear-module": "^4.1.2", "comment-json": "^4.2.3", "configstore": "^5.0.1", - "cosmiconfig": "^7.1.0", - "cspell-dictionary": "6.14.3", - "cspell-glob": "6.14.3", - "cspell-grammar": "6.14.3", - "cspell-io": "6.14.3", - "cspell-trie-lib": "6.14.3", + "cosmiconfig": "^8.0.0", + "cspell-dictionary": "6.26.3", + "cspell-glob": "6.26.3", + "cspell-grammar": "6.26.3", + "cspell-io": "6.26.3", + "cspell-trie-lib": "6.26.3", "fast-equals": "^4.0.3", "find-up": "^5.0.0", - "fs-extra": "^10.1.0", - "gensequence": "^4.0.2", + "gensequence": "^4.0.3", "import-fresh": "^3.3.0", "resolve-from": "^5.0.0", "resolve-global": "^1.0.0", - "vscode-languageserver-textdocument": "^1.0.7", - "vscode-uri": "^3.0.6" + "vscode-languageserver-textdocument": "^1.0.8", + "vscode-uri": "^3.0.7" }, "engines": { "node": ">=14.6" } }, - "node_modules/cspell-lib/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cspell-lib/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/cspell-lib/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/cspell-trie-lib": { - "version": "6.14.3", - "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-6.14.3.tgz", - "integrity": "sha512-WVa5gbD9glsZ4c60qPD5RTwojKc5ooxw/Gn+HC9CBdWv5rE1AmM1V3yVWhYx2ZMbJufboBrzmSjJB9qdmUl3oA==", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-6.26.3.tgz", + "integrity": "sha512-pda7iXr74SC9eD5ksAEDDR2M/ervnGaHXugTjn+TVXXBH16lnmqz/Ns5Zlp351lwb3BhqjVU+XqZ0tn28ISvAw==", "dev": true, "dependencies": { - "@cspell/cspell-pipe": "6.14.3", - "@cspell/cspell-types": "6.14.3", - "fs-extra": "^10.1.0", - "gensequence": "^4.0.2" + "@cspell/cspell-pipe": "6.26.3", + "@cspell/cspell-types": "6.26.3", + "gensequence": "^4.0.3" }, "engines": { "node": ">=14" } }, - "node_modules/cspell-trie-lib/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cspell-trie-lib/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/cspell-trie-lib/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/cspell/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -3472,18 +3624,13 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/cspell/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/cspell/node_modules/commander": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", + "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, "engines": { - "node": ">=12" + "node": ">=14" } }, "node_modules/cspell/node_modules/has-flag": { @@ -3495,18 +3642,6 @@ "node": ">=8" } }, - "node_modules/cspell/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/cspell/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -3558,15 +3693,6 @@ "node": ">=8" } }, - "node_modules/cspell/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/cspell/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -3652,9 +3778,9 @@ "dev": true }, "node_modules/deepmerge-ts": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-4.2.1.tgz", - "integrity": "sha512-xzJLiUo4z1dD2nggSfaMvHo5qWLoy/JVa9rKuktC6FrQQEBI8Qnj7KwuCYZhqBoGOOpGqs6+3MR2ZhSMcTr4BA==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-4.2.2.tgz", + "integrity": "sha512-Ka3Kb21tiWjvQvS9U+1Dx+aqFAHsdTnMdYptLTmC2VAmDFMugWMY1e15aTODstipmCun8iNuqeSfcx6rsUUk0Q==", "dev": true, "engines": { "node": ">=12.4.0" @@ -4106,34 +4232,44 @@ } }, "node_modules/es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", + "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", "dev": true, "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.1.1", + "get-intrinsic": "^1.1.3", "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.3", - "is-callable": "^1.2.4", + "internal-slot": "^1.0.4", + "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.0", + "object-inspect": "^1.12.2", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", + "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" + "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" }, "engines": { "node": ">= 0.4" @@ -4148,6 +4284,20 @@ "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-shim-unscopables": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", @@ -4214,13 +4364,13 @@ } }, "node_modules/eslint": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz", - "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", + "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.11.6", + "@eslint/eslintrc": "^1.4.1", + "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", @@ -4239,7 +4389,7 @@ "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.15.0", + "globals": "^13.19.0", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", @@ -4270,13 +4420,14 @@ } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", "dev": true, "dependencies": { "debug": "^3.2.7", - "resolve": "^1.20.0" + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -4327,28 +4478,32 @@ "dev": true }, "node_modules/eslint-plugin-functional": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-functional/-/eslint-plugin-functional-4.4.1.tgz", - "integrity": "sha512-YhSfHS52Si62Sn126g9wGx+XnWMoWhwEt6ctVXfcJj+xMUiggjOqUVMca7fuLNzX8jYiNBIeU1Y0teHGePZ3NA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-functional/-/eslint-plugin-functional-5.0.4.tgz", + "integrity": "sha512-vV5jUAWfFQfe4OfE1YM99mUYX5AW0uL7tJa+rYIwwTRzeQc39j6SfvGdLUg2sXkTpmcfO3VwBLD7Ij5yjpRM8w==", "dev": true, + "funding": [ + { + "type": "ko-fi", + "url": "https://ko-fi.com/rebeccastevens" + } + ], "dependencies": { - "@typescript-eslint/utils": "^5.10.2", - "deepmerge-ts": "^4.0.3", + "@typescript-eslint/type-utils": "^5.50.0", + "@typescript-eslint/utils": "^5.50.0", + "deepmerge-ts": "^4.2.2", "escape-string-regexp": "^4.0.0", - "semver": "^7.3.7" + "is-immutable-type": "^1.2.4", + "semver": "^7.3.8" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=16.10.0" }, "peerDependencies": { "eslint": "^8.0.0", - "tsutils": "^3.0.0", - "typescript": "^3.4.1 || ^4.0.0" + "typescript": ">=4.0.2" }, "peerDependenciesMeta": { - "tsutils": { - "optional": true - }, "typescript": { "optional": true } @@ -4379,9 +4534,9 @@ } }, "node_modules/eslint-plugin-functional/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -4400,23 +4555,25 @@ "dev": true }, "node_modules/eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", "dev": true, "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", "has": "^1.0.3", - "is-core-module": "^2.8.1", + "is-core-module": "^2.11.0", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", "tsconfig-paths": "^3.14.1" }, "engines": { @@ -4426,6 +4583,15 @@ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, "node_modules/eslint-plugin-import/node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -4439,9 +4605,9 @@ } }, "node_modules/eslint-plugin-import/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "dependencies": { "minimist": "^1.2.0" @@ -4450,6 +4616,21 @@ "json5": "lib/cli.js" } }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", @@ -4463,12 +4644,12 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "39.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.6.2.tgz", - "integrity": "sha512-dvgY/W7eUFoAIIiaWHERIMI61ZWqcz9YFjEeyTzdPlrZc3TY/3aZm5aB91NUoTLWYZmO/vFlYSuQi15tF7uE5A==", + "version": "40.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-40.0.0.tgz", + "integrity": "sha512-LOPyIu1vAVvGPkye3ci0moj0iNf3f8bmin6do2DYDj+77NRXWnkmhKRy8swWsatUs3mB5jYPWPUsFg9pyfEiyA==", "dev": true, "dependencies": { - "@es-joy/jsdoccomment": "~0.36.0", + "@es-joy/jsdoccomment": "~0.36.1", "comment-parser": "1.3.1", "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", @@ -4573,24 +4754,26 @@ } }, "node_modules/eslint-plugin-unicorn": { - "version": "44.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-44.0.2.tgz", - "integrity": "sha512-GLIDX1wmeEqpGaKcnMcqRvMVsoabeF0Ton0EX4Th5u6Kmf7RM9WBl705AXFEsns56ESkEs0uyelLuUTvz9Tr0w==", + "version": "45.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-45.0.2.tgz", + "integrity": "sha512-Y0WUDXRyGDMcKLiwgL3zSMpHrXI00xmdyixEGIg90gHnj0PcHY4moNv3Ppje/kDivdAy5vUeUr7z211ImPv2gw==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.19.1", - "ci-info": "^3.4.0", + "@eslint-community/eslint-utils": "^4.1.2", + "ci-info": "^3.6.1", "clean-regexp": "^1.0.0", - "eslint-utils": "^3.0.0", "esquery": "^1.4.0", "indent-string": "^4.0.0", "is-builtin-module": "^3.2.0", + "jsesc": "^3.0.2", "lodash": "^4.17.21", "pluralize": "^8.0.0", "read-pkg-up": "^7.0.1", "regexp-tree": "^0.1.24", + "regjsparser": "^0.9.1", "safe-regex": "^2.1.1", - "semver": "^7.3.7", + "semver": "^7.3.8", "strip-indent": "^3.0.0" }, "engines": { @@ -4600,14 +4783,17 @@ "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" }, "peerDependencies": { - "eslint": ">=8.23.1" + "eslint": ">=8.28.0" } }, "node_modules/eslint-plugin-unicorn/node_modules/ci-info": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz", - "integrity": "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==", - "dev": true + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.6.1.tgz", + "integrity": "sha512-up5ggbaDqOqJ4UqLKZ2naVkyqSJQgJi5lwD6b6mM748ysrghDBX0bx/qJTUHzw7zu6Mq4gycviSF5hJnwceD8w==", + "dev": true, + "engines": { + "node": ">=8" + } }, "node_modules/eslint-plugin-unicorn/node_modules/lru-cache": { "version": "6.0.0", @@ -4622,9 +4808,9 @@ } }, "node_modules/eslint-plugin-unicorn/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -4932,9 +5118,9 @@ } }, "node_modules/espree": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", - "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dev": true, "dependencies": { "acorn": "^8.8.0", @@ -5076,9 +5262,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -5269,12 +5455,56 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/flat-cache/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/flatted": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", "dev": true }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/foreground-child": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", @@ -5505,9 +5735,9 @@ } }, "node_modules/gensequence": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gensequence/-/gensequence-4.0.2.tgz", - "integrity": "sha512-mQiFskYFPFDSUpBJ/n3ebAV2Ufu6DZGvUPXzyWYzFfJr6/DyOOZVnjx6VTWE4y0RLvYWnc5tZq5sCjzEWhRjqQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gensequence/-/gensequence-4.0.3.tgz", + "integrity": "sha512-izr+MKqJKjexkvLiPGhW96elQX8TuUR/su/xzILxjqzU1RDz1n1ZbqwDUnNFaRcq0gFR3oQfNH2JOH4Je1x/QA==", "dev": true, "engines": { "node": ">=14" @@ -5541,9 +5771,9 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", "dev": true, "dependencies": { "function-bind": "^1.1.1", @@ -5625,9 +5855,9 @@ } }, "node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -5698,9 +5928,9 @@ } }, "node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.19.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -5724,6 +5954,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -5744,6 +5989,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -5864,6 +6121,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -5944,9 +6213,9 @@ "dev": true }, "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "dev": true }, "node_modules/http-errors": { @@ -6080,6 +6349,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-meta-resolve": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.1.tgz", + "integrity": "sha512-C6lLL7EJPY44kBvA80gq4uMsVFw5x3oSKfuMl1cuZ2RkI5+UJqQXgn+6hlUew0y4ig7Ypt4CObAAIzU53Nfpuw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -6121,12 +6400,12 @@ "dev": true }, "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", + "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.1.3", "has": "^1.0.3", "side-channel": "^1.0.4" }, @@ -6143,6 +6422,20 @@ "node": ">= 0.10" } }, + "node_modules/is-array-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", + "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -6217,9 +6510,9 @@ } }, "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "engines": { "node": ">= 0.4" @@ -6241,9 +6534,9 @@ } }, "node_modules/is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -6288,6 +6581,17 @@ "node": ">=0.10.0" } }, + "node_modules/is-immutable-type": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-immutable-type/-/is-immutable-type-1.2.4.tgz", + "integrity": "sha512-H/famjtztrVEl/P9izGTFLEJjmKsDoj+WBMVo+oSSDEuNTZpJFDn37/ovEb+3a3K5UU8zdkVUwBgddeBPH41pA==", + "dev": true, + "peerDependencies": { + "@typescript-eslint/type-utils": ">=5.30.5", + "@typescript-eslint/utils": ">=5.30.5", + "typescript": ">=4.7.4" + } + }, "node_modules/is-installed-globally": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", @@ -6446,6 +6750,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -6571,6 +6894,26 @@ "node": ">= 8" } }, + "node_modules/istanbul-lib-processinfo/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/istanbul-lib-processinfo/node_modules/istanbul-lib-coverage": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", @@ -6580,6 +6923,21 @@ "node": ">=8" } }, + "node_modules/istanbul-lib-processinfo/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/istanbul-lib-processinfo/node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -6794,6 +7152,18 @@ "node": ">=12.0.0" } }, + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", @@ -6831,9 +7201,9 @@ "dev": true }, "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "bin": { "json5": "lib/cli.js" @@ -6843,9 +7213,9 @@ } }, "node_modules/jsonc-parser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz", - "integrity": "sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", "dev": true }, "node_modules/jsonfile": { @@ -7174,9 +7544,9 @@ "dev": true }, "node_modules/marked": { - "version": "4.0.19", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.19.tgz", - "integrity": "sha512-rgQF/OxOiLcvgUAj1Q1tAf4Bgxn5h5JZTp04Fx4XUkVhs7B+7YA9JEWJhJpoO8eJt8MkZMwqLCNeNqj1bCREZQ==", + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.12.tgz", + "integrity": "sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw==", "dev": true, "bin": { "marked": "bin/marked.js" @@ -7313,9 +7683,9 @@ } }, "node_modules/mocha": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", - "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", "dev": true, "dependencies": { "ansi-colors": "4.1.1", @@ -7534,14 +7904,14 @@ "dev": true }, "node_modules/nanoid": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.0.tgz", - "integrity": "sha512-IgBP8piMxe/gf73RTQx7hmnhwz0aaEXYakvqZyE302IXW3HyVNhdNGC+O2MwMAVhLEnvXlvKtGbtJf6wvHihCg==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", "bin": { - "nanoid": "bin/nanoid.js" + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": "^14 || ^16 || >=18" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, "node_modules/natural-compare": { @@ -7600,9 +7970,9 @@ } }, "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", "dev": true, "dependencies": { "whatwg-url": "^5.0.0" @@ -7828,6 +8198,21 @@ "node": ">=8" } }, + "node_modules/nyc/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/nyc/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -7931,14 +8316,14 @@ } }, "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" @@ -8359,9 +8744,9 @@ } }, "node_modules/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", + "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -8469,9 +8854,9 @@ } }, "node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "dev": true, "engines": { "node": ">=0.6" @@ -8697,6 +9082,27 @@ "node": ">=8" } }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, "node_modules/release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", @@ -9052,35 +9458,15 @@ } }, "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.1.2.tgz", + "integrity": "sha512-BlIbgFryTbw3Dz6hyoWFhKk+unCcHMSkZGrTFVAx2WmttdBSonsdtRlwiuTbDqTKr+UlXIUqJVS4QT5tUzGENQ==", "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "rimraf": "dist/cjs/src/bin.js" }, "engines": { - "node": "*" + "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -9124,6 +9510,20 @@ "regexp-tree": "~0.1.1" } }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -9326,14 +9726,15 @@ } }, "node_modules/shiki": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.11.1.tgz", - "integrity": "sha512-EugY9VASFuDqOexOgXR18ZV+TbFrQHeCpEYaXamO+SZlsnT/2LxuLBX25GGtIrwaEVFXUAbUQ601SWE2rMwWHA==", + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.1.tgz", + "integrity": "sha512-+Jz4nBkCBe0mEDqo1eKRcCdjRtrCjozmcbTUjbPTX7OOJfEbTZzlUWlZtGe3Gb5oV1/jnojhG//YZc3rs9zSEw==", "dev": true, "dependencies": { - "jsonc-parser": "^3.0.0", - "vscode-oniguruma": "^1.6.1", - "vscode-textmate": "^6.0.0" + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" } }, "node_modules/side-channel": { @@ -9357,13 +9758,13 @@ "dev": true }, "node_modules/sinon": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-14.0.2.tgz", - "integrity": "sha512-PDpV0ZI3ZCS3pEqx0vpNp6kzPhHrLx72wA0G+ZLaaJjLIYeE0n8INlgaohKuGy7hP0as5tbUd23QWu5U233t+w==", + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-15.0.1.tgz", + "integrity": "sha512-PZXKc08f/wcA/BMRGBze2Wmw50CWPiAH3E21EOi4B49vJ616vW4DQh4fQrqsYox2aNR/N3kCqLuB0PwwOucQrg==", "dev": true, "dependencies": { "@sinonjs/commons": "^2.0.0", - "@sinonjs/fake-timers": "^9.1.2", + "@sinonjs/fake-timers": "10.0.2", "@sinonjs/samsam": "^7.0.1", "diff": "^5.0.0", "nise": "^5.1.2", @@ -9451,6 +9852,41 @@ "node": ">=8" } }, + "node_modules/spawn-wrap/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/spawn-wrap/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/spawn-wrap/node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -9640,28 +10076,28 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -9926,9 +10362,9 @@ } }, "node_modules/ts-loader": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.1.tgz", - "integrity": "sha512-384TYAqGs70rn9F0VBnh6BPTfhga7yFNdC5gXbQpDrBj9/KsT4iRkGqKXhziofHOlE2j6YEaiTYVGKKvPhGWvw==", + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.2.tgz", + "integrity": "sha512-OmlC4WVmFv5I0PpaxYb+qGeGOdm5giHU7HwDDUjw59emP2UYMHy9fFSDcYgSNoH8sXcj4hGCSEhlDZ9ULeDraA==", "dev": true, "dependencies": { "chalk": "^4.1.0", @@ -10100,12 +10536,12 @@ } }, "node_modules/tsconfig-paths": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.0.tgz", - "integrity": "sha512-AHx4Euop/dXFC+Vx589alFba8QItjF+8hf8LtmuiCwHyI4rHXQtOOENaM8kvYf5fR0dRChy3wzWIZ9WbB7FWow==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.2.tgz", + "integrity": "sha512-uhxiMgnXQp1IR622dUXI+9Ehnws7i/y6xvpZB9IbUVOPy0muvdvgXeZOn88UcGPiT98Vp3rJPTa8bFoalZ3Qhw==", "dev": true, "dependencies": { - "json5": "^2.2.1", + "json5": "^2.2.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" }, @@ -10272,6 +10708,20 @@ "node": ">=8" } }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -10288,15 +10738,15 @@ } }, "node_modules/typedoc": { - "version": "0.23.21", - "resolved": "http://registry.npmjs.org/typedoc/-/typedoc-0.23.21.tgz", - "integrity": "sha512-VNE9Jv7BgclvyH9moi2mluneSviD43dCE9pY8RWkO88/DrEgJZk9KpUk7WO468c9WWs/+aG6dOnoH7ccjnErhg==", + "version": "0.23.25", + "resolved": "http://registry.npmjs.org/typedoc/-/typedoc-0.23.25.tgz", + "integrity": "sha512-O1he153qVyoCgJYSvIyY3bPP1wAJTegZfa6tL3APinSZhJOf8CSd8F/21M6ex8pUY/fuY6n0jAsT4fIuMGA6sA==", "dev": true, "dependencies": { "lunr": "^2.3.9", - "marked": "^4.0.19", - "minimatch": "^5.1.0", - "shiki": "^0.11.1" + "marked": "^4.2.12", + "minimatch": "^6.1.6", + "shiki": "^0.14.1" }, "bin": { "typedoc": "bin/typedoc" @@ -10318,21 +10768,24 @@ } }, "node_modules/typedoc/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-6.2.0.tgz", + "integrity": "sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/typescript": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", - "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -10582,27 +11035,27 @@ } }, "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.7.tgz", - "integrity": "sha512-bFJH7UQxlXT8kKeyiyu41r22jCZXG8kuuVVA33OEJn1diWOZK5n8zBSPZFHVBOu8kXZ6h0LIRhf5UnCo61J4Hg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", + "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==", "dev": true }, "node_modules/vscode-oniguruma": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.2.tgz", - "integrity": "sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", "dev": true }, "node_modules/vscode-textmate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-6.0.0.tgz", - "integrity": "sha512-gu73tuZfJgu+mvCSy4UZwd2JXykjK9zAZsfmDeut5dx/1a7FeTk0XwJsSuqQn+cuMCGVbIBfl+s53X4T19DnzQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", + "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", "dev": true }, "node_modules/vscode-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.6.tgz", - "integrity": "sha512-fmL7V1eiDBFRRnu+gfRWTzyPpNIHJTc4mWnFkwBUmO9U3KPgJAmTx7oxi2bl/Rh6HLdU7+4C9wlj0k2E4AdKFQ==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", + "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==", "dev": true }, "node_modules/watchpack": { @@ -10672,15 +11125,15 @@ } }, "node_modules/webpack-cli": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.0.0.tgz", - "integrity": "sha512-AACDTo20yG+xn6HPW5xjbn2Be4KUzQPebWXsDMHwPPyKh9OnTOJgZN2Nc+g/FZKV3ObRTYsGvibAvc+5jAUrVA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.0.1.tgz", + "integrity": "sha512-S3KVAyfwUqr0Mo/ur3NzIp6jnerNpo7GUO6so51mxLi1spqsA17YcMXy0WOIJtBSnj748lthxC6XLbNKh/ZC+A==", "dev": true, "dependencies": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^2.0.0", - "@webpack-cli/info": "^2.0.0", - "@webpack-cli/serve": "^2.0.0", + "@webpack-cli/configtest": "^2.0.1", + "@webpack-cli/info": "^2.0.1", + "@webpack-cli/serve": "^2.0.1", "colorette": "^2.0.14", "commander": "^9.4.1", "cross-spawn": "^7.0.3", @@ -10853,6 +11306,26 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", @@ -11056,15 +11529,6 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, "node_modules/yargonaut": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/yargonaut/-/yargonaut-1.1.4.tgz", @@ -11523,77 +11987,81 @@ "dev": true }, "@cspell/cspell-bundled-dicts": { - "version": "6.14.3", - "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-6.14.3.tgz", - "integrity": "sha512-bgPBduoDi1jkrcLkmAwRG1c6F1iprF2yfBgEDT19dRG1kYuq/fLGNOcSmEp4CbApn8m0MmxsrhEp8O0Q9owQRQ==", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-6.26.3.tgz", + "integrity": "sha512-ZOQI5XSJiLJi9GEbdjKJvMDbgzevsmoQzvAHZ2ujwzoWfhxCeEET0+6fs88/5QvHgXwl0CDsFspXZr1OFfZLHA==", "dev": true, "requires": { - "@cspell/dict-ada": "^4.0.0", + "@cspell/dict-ada": "^4.0.1", "@cspell/dict-aws": "^3.0.0", - "@cspell/dict-bash": "^4.1.0", - "@cspell/dict-companies": "^3.0.3", - "@cspell/dict-cpp": "^4.0.0", + "@cspell/dict-bash": "^4.1.1", + "@cspell/dict-companies": "^3.0.6", + "@cspell/dict-cpp": "^4.0.2", "@cspell/dict-cryptocurrencies": "^3.0.1", - "@cspell/dict-csharp": "^4.0.1", - "@cspell/dict-css": "^4.0.0", - "@cspell/dict-dart": "^2.0.0", - "@cspell/dict-django": "^4.0.0", - "@cspell/dict-docker": "^1.1.3", - "@cspell/dict-dotnet": "^4.0.0", - "@cspell/dict-elixir": "^4.0.0", - "@cspell/dict-en_us": "^4.1.0", + "@cspell/dict-csharp": "^4.0.2", + "@cspell/dict-css": "^4.0.3", + "@cspell/dict-dart": "^2.0.1", + "@cspell/dict-django": "^4.0.1", + "@cspell/dict-docker": "^1.1.5", + "@cspell/dict-dotnet": "^4.0.1", + "@cspell/dict-elixir": "^4.0.1", + "@cspell/dict-en_us": "^4.2.2", + "@cspell/dict-en-common-misspellings": "^1.0.2", "@cspell/dict-en-gb": "1.1.33", "@cspell/dict-filetypes": "^3.0.0", "@cspell/dict-fonts": "^3.0.0", - "@cspell/dict-fullstack": "^3.0.0", + "@cspell/dict-fullstack": "^3.1.1", + "@cspell/dict-gaming-terms": "^1.0.4", "@cspell/dict-git": "^2.0.0", - "@cspell/dict-golang": "^5.0.0", - "@cspell/dict-haskell": "^4.0.0", - "@cspell/dict-html": "^4.0.1", + "@cspell/dict-golang": "^5.0.1", + "@cspell/dict-haskell": "^4.0.1", + "@cspell/dict-html": "^4.0.2", "@cspell/dict-html-symbol-entities": "^4.0.0", - "@cspell/dict-java": "^5.0.2", - "@cspell/dict-latex": "^3.0.0", + "@cspell/dict-java": "^5.0.4", + "@cspell/dict-k8s": "^1.0.0", + "@cspell/dict-latex": "^3.1.0", "@cspell/dict-lorem-ipsum": "^3.0.0", - "@cspell/dict-lua": "^3.0.0", - "@cspell/dict-node": "^4.0.1", - "@cspell/dict-npm": "^4.0.1", - "@cspell/dict-php": "^3.0.3", - "@cspell/dict-powershell": "^3.0.0", - "@cspell/dict-public-licenses": "^2.0.0", - "@cspell/dict-python": "^4.0.0", - "@cspell/dict-r": "^2.0.0", - "@cspell/dict-ruby": "^3.0.0", - "@cspell/dict-rust": "^3.0.0", - "@cspell/dict-scala": "^3.0.0", - "@cspell/dict-software-terms": "^3.0.5", - "@cspell/dict-sql": "^2.0.0", - "@cspell/dict-swift": "^2.0.0", - "@cspell/dict-typescript": "^3.0.1", + "@cspell/dict-lua": "^4.0.0", + "@cspell/dict-node": "^4.0.2", + "@cspell/dict-npm": "^5.0.3", + "@cspell/dict-php": "^3.0.4", + "@cspell/dict-powershell": "^4.0.0", + "@cspell/dict-public-licenses": "^2.0.1", + "@cspell/dict-python": "^4.0.1", + "@cspell/dict-r": "^2.0.1", + "@cspell/dict-ruby": "^4.0.1", + "@cspell/dict-rust": "^4.0.0", + "@cspell/dict-scala": "^4.0.0", + "@cspell/dict-software-terms": "^3.1.3", + "@cspell/dict-sql": "^2.0.1", + "@cspell/dict-svelte": "^1.0.2", + "@cspell/dict-swift": "^2.0.1", + "@cspell/dict-typescript": "^3.1.0", "@cspell/dict-vue": "^3.0.0" } }, "@cspell/cspell-pipe": { - "version": "6.14.3", - "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-6.14.3.tgz", - "integrity": "sha512-/mLZxJOK3/UFpnR4jrImKY5W4cn5XWjvQPXnFCEzpU0tAAF6GboJgWl30TegqFJjLVCKTNRMOtT1r6kgvb66zw==", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-6.26.3.tgz", + "integrity": "sha512-e4LKHgXnYj8lO2qFaPaGUjgS2Vps464sc8lRt65MJ3iHR3/AzQO1mB+MDLCqItaLmcyA/llrEY1D8m9dGiBFxA==", "dev": true }, "@cspell/cspell-service-bus": { - "version": "6.14.3", - "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-6.14.3.tgz", - "integrity": "sha512-89OWGBzhorhiWcFqFTeHl9Y6WTdd5MGC2XNNCVZLM3VTYaFx4DVkiyxWdkE7gHjYxvNdGSH54/fE18TqLc//dQ==", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-6.26.3.tgz", + "integrity": "sha512-dbhsB8d4dEd8adyA+/KpNYERyOt8y3VSvOdgusjweEKjezCNxIwLR3GFQHi4QWCevDzrqS+mt9hAvO5RlYP7Bg==", "dev": true }, "@cspell/cspell-types": { - "version": "6.14.3", - "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-6.14.3.tgz", - "integrity": "sha512-u4Hun0vOQVkk3tJ6VzPjHVmv2dq0D6jYqX8pWLKWRwo38rdoIkdWseN359sWCz96tDM8g5rpSFdmecbWLU7BYg==", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-6.26.3.tgz", + "integrity": "sha512-s5SjHbpCP/MBTCCwgADzmZvsxpygIiH/2JytVUBrk8TWr4U8/EE3gXPdJ8EUAW3Ndgls/OpGn9c31F6sFjsLjg==", "dev": true }, "@cspell/dict-ada": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-ada/-/dict-ada-4.0.0.tgz", - "integrity": "sha512-M0n4ZYmpLOXbDD07Qb/Ekk0K5pX2C+mCuJ2ZxPgbTq9HGlrN43PmqrGJHWcgtVHE3fd1D4VxS85QcQP6r1Y+KQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-ada/-/dict-ada-4.0.1.tgz", + "integrity": "sha512-/E9o3nHrXOhYmQE43deKbxZcR3MIJAsa+66IzP9TXGHheKEx8b9dVMVVqydDDH8oom1H0U20NRPtu6KRVbT9xw==", "dev": true }, "@cspell/dict-aws": { @@ -11603,21 +12071,21 @@ "dev": true }, "@cspell/dict-bash": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-bash/-/dict-bash-4.1.0.tgz", - "integrity": "sha512-8pFL03ZKejynfbsa2UZ3iZ7BrT1TAGTD8ZlK822ioAb7aoDvQhYao2Bjz5cXU0uk7CyrlgsSnYX94sLfqDfTxQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-bash/-/dict-bash-4.1.1.tgz", + "integrity": "sha512-8czAa/Mh96wu2xr0RXQEGMTBUGkTvYn/Pb0o+gqOO1YW+poXGQc3gx0YPqILDryP/KCERrNvkWUJz3iGbvwC2A==", "dev": true }, "@cspell/dict-companies": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.0.3.tgz", - "integrity": "sha512-qBWdwA97HdnLbxPLOUTZ+/mg9eYhi14hM7PEUM1PZ004MEIxQHum0IQpypKAwP3teR1KEsyxEPHp8v24Dw45Zg==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.0.6.tgz", + "integrity": "sha512-6rWuwZxPisn/MP41DzBtChVgbz9b6HSjBH3X0s3k7zlBaxrw6xFAZGKH9KGFSPTiV+WD9j+IIn2/ITXERGjNLA==", "dev": true }, "@cspell/dict-cpp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-4.0.0.tgz", - "integrity": "sha512-NrCmer14tTSbPs1TwqyCjFEmWCBw0UFvAn4O3pdWuxktArHxRJ5vUQOoL2Gus2H9s3ihhOJZkcuJ47Kd21E7BQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-4.0.2.tgz", + "integrity": "sha512-Wi/ZUPoGaqvxeyaAdMtXFtfc3mZ4bw5nKYZrVHCsMzyGTC6IXL9Xp6KbwU0zEJXyNvvmRP5zd+Q4RnMf4abgCg==", "dev": true }, "@cspell/dict-cryptocurrencies": { @@ -11627,51 +12095,57 @@ "dev": true }, "@cspell/dict-csharp": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.1.tgz", - "integrity": "sha512-BkfT6S790FcyWLTWYBwkj9dKxuNz4pHFDrj9GFrmqXd2HWzfSa944S0NJhal42TnW30JJljQY5P1ZYau+s2Pbg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.2.tgz", + "integrity": "sha512-1JMofhLK+4p4KairF75D3A924m5ERMgd1GvzhwK2geuYgd2ZKuGW72gvXpIV7aGf52E3Uu1kDXxxGAiZ5uVG7g==", "dev": true }, "@cspell/dict-css": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.0.tgz", - "integrity": "sha512-ieSeG9KAJGIr5eK0JRWqD5KXstPPUw6JUTmGWc7P/qiqj/sjmhWqWKEt7HhoSNcb8uQxAkAoxhrNpfbKzqnKAw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.3.tgz", + "integrity": "sha512-sLhutH5hlhPGuOtObR3Q0qezywuwREIcyTeERQw14kizYA3jA/J8YxSPcX2r9TsNFPHY85NAMyrH6Q38iyBGbw==", "dev": true }, "@cspell/dict-dart": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-dart/-/dict-dart-2.0.0.tgz", - "integrity": "sha512-p7vHszsu2uJt+F04gvNy1e5okypFfVEYHBWgpOV/Jrvs0F5A+gUzFTG2Ix9b1jkCigAULYKQkIGue+qlhSoK5Q==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-dart/-/dict-dart-2.0.1.tgz", + "integrity": "sha512-YRuDX9k2qPSWDEsM26j8o7KMvaZ0DXc74ijK/VRwaksm1CBRPBW289pe2TE2K7y4SJjTKXgQ9urOVlozeQDpuA==", "dev": true }, "@cspell/dict-django": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-4.0.0.tgz", - "integrity": "sha512-k0npSzQrPQSqjR2XtumV14sv9waTRMUzPx0UfOuJZcnCCZY8ofPeqFYoku+O+9Kc9etFOziOxnScshKVDzYWOQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-4.0.1.tgz", + "integrity": "sha512-q3l7OH39qzeN2Y64jpY39SEAqki5BUzPTypnhzM40yT+LOGSWqSh9Ix5UecejtXPDVrD8vML+m7Bp5070h52HQ==", "dev": true }, "@cspell/dict-docker": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.3.tgz", - "integrity": "sha512-Iz7EQGnLBgnnmzCC8iLQ7JssCCQlCjZLiCs0qhooETWLifob3nzsI9AVBh3gkYLhISLIIjBpfa4LTknskT7LzA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.5.tgz", + "integrity": "sha512-SNEohOScQ+0+y9dp/jKTx60OOJQrf5es5BJ32gh5Ck3jKXNo4wd9KLgPOmQMUpencb5SGjrBsC4rr1fyfCwytg==", "dev": true }, "@cspell/dict-dotnet": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-dotnet/-/dict-dotnet-4.0.0.tgz", - "integrity": "sha512-biZiTWyDqwVV2m+c17lLIliPDXPjOR1VwwmyMxvb3nFS84aP9x52SAVCf0w7Io1CIpUiY7XnG6/xeI7esYU78w==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-dotnet/-/dict-dotnet-4.0.1.tgz", + "integrity": "sha512-l11TqlUX8cDgsE/1Zrea1PqLn63s20MY3jKWMbQVB5DMDPDO2f8Pukckkwxq5p/cxDABEjuGzfF1kTX3pAakBw==", "dev": true }, "@cspell/dict-elixir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-elixir/-/dict-elixir-4.0.0.tgz", - "integrity": "sha512-0TqqdQjg/zu3wAjk2FQkZ87pPIS9tA9kl6he5NJB729ysrWhND/7aSPC48QrP46VZ+oFrvFZK8DC8ZlYs16cjQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-elixir/-/dict-elixir-4.0.1.tgz", + "integrity": "sha512-IejBqiTTWSXpvBm6yg4qUfnJR0LwbUUCJcK5wXOMKEJitu3yDfrT9GPc6NQJXgokbg9nBjEyxVIzNcLgx2x3/Q==", "dev": true }, "@cspell/dict-en_us": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.1.0.tgz", - "integrity": "sha512-EnfxP/5U3kDhmTWcHV7Xs2Fxa9KAE5fbHm+4u8LGBOUZvSkZC5+ayjQ50CfEyTGuaI/946ITQYPRNxUZ7oqOiQ==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.2.2.tgz", + "integrity": "sha512-NSlvE6bIkgRRlBkfltiwREu2NYT4PrLmpdi9zSeWuUMlGB+0wUGAal3B7zKC1pirhueH20W6to0lPdnEWaqa8Q==", + "dev": true + }, + "@cspell/dict-en-common-misspellings": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-1.0.2.tgz", + "integrity": "sha512-jg7ZQZpZH7+aAxNBlcAG4tGhYF6Ksy+QS5Df73Oo+XyckBjC9QS+PrRwLTeYoFIgXy5j3ICParK5r3MSSoL4gw==", "dev": true }, "@cspell/dict-en-gb": { @@ -11693,9 +12167,15 @@ "dev": true }, "@cspell/dict-fullstack": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.0.0.tgz", - "integrity": "sha512-BMQRTaeReLufjMwgWqqwPdrXQ7jkVGTv7/YvOLsHFZvcAP3eM7WqX+rvdXckLhJmuuzbceFRDKs5F/9Ig2x/tQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.1.1.tgz", + "integrity": "sha512-w2n3QvqEiufmvlBuNduury/pySrhfOcWFfCvvpUXTJvWbfRVGkt6ANZuTuy3/7Z2q4GYUqsd139te4Q8m0jRHQ==", + "dev": true + }, + "@cspell/dict-gaming-terms": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.0.4.tgz", + "integrity": "sha512-hbDduNXlk4AOY0wFxcDMWBPpm34rpqJBeqaySeoUH70eKxpxm+dvjpoRLJgyu0TmymEICCQSl6lAHTHSDiWKZg==", "dev": true }, "@cspell/dict-git": { @@ -11705,21 +12185,21 @@ "dev": true }, "@cspell/dict-golang": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-5.0.0.tgz", - "integrity": "sha512-Cbx4mVHsGbr5D+wlT0yU3n/0c5iLvciU48rSOQR7SCAzu5mTXyM1mqRu6nqnRiMv6G6mO50EL2LCTq6RZrlIOg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-5.0.1.tgz", + "integrity": "sha512-djsJC7OVKUpFdRm/aqBJEUSGP3kw/MDhAt7udYegnyQt2WjL3ZnVoG7r5eOEhPEEKzWVBYoi6UKSNpdQEodlbg==", "dev": true }, "@cspell/dict-haskell": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-haskell/-/dict-haskell-4.0.0.tgz", - "integrity": "sha512-U/DPpDoitGeUvduM9teDkDc1zs4Plgh0pNONDP3YbsEICErSlp1NfatD0i35Z6cR0C7I8uEe4gG2phG00zrSqw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-haskell/-/dict-haskell-4.0.1.tgz", + "integrity": "sha512-uRrl65mGrOmwT7NxspB4xKXFUenNC7IikmpRZW8Uzqbqcu7ZRCUfstuVH7T1rmjRgRkjcIjE4PC11luDou4wEQ==", "dev": true }, "@cspell/dict-html": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.1.tgz", - "integrity": "sha512-q5fCzkoOz+8BW79qLrnANEDnG+Jb2WS2fXERxg9xwgKBXwXUxH8ttGVNhfkLpNWe/UMm00U1IZMnVGyYLNTO5w==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.2.tgz", + "integrity": "sha512-BskOE2K3AtGLkcjdJmo+H6/fjdfDP4XYAsEGXpB26rvdnXAnGEstE/Q8Do6UfJCvgOVYCpdUZLcMIEpoTy7QhQ==", "dev": true }, "@cspell/dict-html-symbol-entities": { @@ -11729,15 +12209,21 @@ "dev": true }, "@cspell/dict-java": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-java/-/dict-java-5.0.2.tgz", - "integrity": "sha512-HWgdp8plZOdYjOkndwmgHGVxoewylZcl886PqSL6TMcDshyI0+2nePft31nIuALRvt7HL8IX++DM1uk4UfY4kg==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-java/-/dict-java-5.0.4.tgz", + "integrity": "sha512-43VrLOLcBxavv6eyL4BpsnHrhVOgyYYeJqQRJG5XKObcpWy3+Lpadj58CfTVOr7M/Je3pUpd4tvsUhf/lWXMVA==", + "dev": true + }, + "@cspell/dict-k8s": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-k8s/-/dict-k8s-1.0.0.tgz", + "integrity": "sha512-XqIql+nd2DiuPuL+qPc24bN/L1mZY75kAYcuMBMW5iYgBoivkiVOg7br/aofX3ApajvHDln6tNkPZhmhsOg6Ww==", "dev": true }, "@cspell/dict-latex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-latex/-/dict-latex-3.0.0.tgz", - "integrity": "sha512-QsRWj+Jll4ueVbce8ofKa743oQ2exmbVNZN70MaMbmu8PSbjW2+Rj3OdExVStesANMj7qc20inS/TgPr8DrInQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-latex/-/dict-latex-3.1.0.tgz", + "integrity": "sha512-XD5S3FY0DrYiun2vm/KKOkeaD30LXp9v5EzVTVQvmxqQrQh0HvOT3TFD7lgKbyzZaG7E+l3wS94uwwm80cOmuw==", "dev": true }, "@cspell/dict-lorem-ipsum": { @@ -11747,93 +12233,99 @@ "dev": true }, "@cspell/dict-lua": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-3.0.0.tgz", - "integrity": "sha512-WOhSCgS5wMxkGQJ8siB90iTB9ElquJB7FeqYSbJqqs6cUwH8G7MM/CEDPL6h7vCo0+v3GuxQ8yKWDSUcUhz9Lg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-4.0.0.tgz", + "integrity": "sha512-aQPyc/nP67tOlW6ACpio9Q5mZ/Z1hqwXC5rt5tkoQ2GsnCqeyIXDrX0CN+RGK53Lj4P02Jz/dPxs/nX8eDUFsw==", "dev": true }, "@cspell/dict-node": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-node/-/dict-node-4.0.1.tgz", - "integrity": "sha512-4EmT5yZFitdwnG0hYEd+Ek19zzD81Bp+n7w0kglZKldS5AvapwW6GM/SAps5YMQQc5zZMi+bMgV7NIzapREqUg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-node/-/dict-node-4.0.2.tgz", + "integrity": "sha512-FEQJ4TnMcXEFslqBQkXa5HposMoCGsiBv2ux4IZuIXgadXeHKHUHk60iarWpjhzNzQLyN2GD7NoRMd12bK3Llw==", "dev": true }, "@cspell/dict-npm": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-4.0.1.tgz", - "integrity": "sha512-jNKImVG5ZX+Pp6PhbSR3TmC9+0ROx09dGhSgUsZyvXV5CGEr+OQGJtNL98TGwU3pP2Xjc++qnHA/XPwB5WvLfA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.0.3.tgz", + "integrity": "sha512-fEX67zIJISbS3gXVk/y/ZUvDIVtjc/CYJK7Mz0iTVrmlCKnLiD41lApe8v4g/12eE7hLfx/sfCXDrUWyzXVq1A==", "dev": true }, "@cspell/dict-php": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-3.0.3.tgz", - "integrity": "sha512-7dvXdPTfbIF2xEob9w94/eV5SU8BkYoN0R7EQghXi0fcF7T1unK+JwDgfoEs6wqApB5aCVYwguiaj8HGX2IRIQ==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-3.0.4.tgz", + "integrity": "sha512-QX6zE/ZfnT3O5lSwV8EPVh8Va39ds34gSNNR8I4GWiuDpKcTkZPFi4OLoP3Tlhbl/3G0Ha35OkSDLvZfu8mnkA==", "dev": true }, "@cspell/dict-powershell": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-3.0.0.tgz", - "integrity": "sha512-pkztY9Ak4oc33q+Qxcn9/CTOKo4N8YIRRE6v67WwQOncA5QIJfcOPUrjfR3Z8SpzElXhu3s9qtWWSqbCy6qmcA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-4.0.0.tgz", + "integrity": "sha512-1Lbm+3+Sx63atl4MM3lPeCUc90JjRyKP9+exmy2cQimXNju9ngtuDWwapHUnhQ47qnzrsBY4ydm36KCfJarXJA==", "dev": true }, "@cspell/dict-public-licenses": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.0.tgz", - "integrity": "sha512-NdMHnS6xiYJKlzVoTV5CBhMiDpXMZ/PDcvXiOpxeR50xkjR18O/XFP4f4eDZpxGiBSUCMFRWf4JjILJ04Rpcfg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.1.tgz", + "integrity": "sha512-NZNwzkL5BqKddepDxvX/Qbji378Mso1TdnV4RFAN8hJoo6dSR0fv2TTI/Y0i/YWBmfmQGyTpEztBXtAw4qgjiA==", "dev": true }, "@cspell/dict-python": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.0.0.tgz", - "integrity": "sha512-MC6CKbYOly3Ig25ZnhlCzPbE/QozqfQv4VYW6HcoMQ5IbHu33ddf2lzkZ89qTXlxsF5NT5qfZEkQYHYuhuL6AQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.0.1.tgz", + "integrity": "sha512-1wtUgyaTqRiQY0/fryk0oW22lcxNUnZ5DwteTzfatMdbgR0OHXTlHbI8vYxpHLWalSoch7EpLsnaymG+fOrt8g==", "dev": true }, "@cspell/dict-r": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-r/-/dict-r-2.0.0.tgz", - "integrity": "sha512-rdt1cKc3VL2uXJ2X088gRhTFreN/MkJWK1jccW1EWdFHLzDwhKfrlAkoLCp0paD6HvmloLQ+eSR09D58DdsYfA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-r/-/dict-r-2.0.1.tgz", + "integrity": "sha512-KCmKaeYMLm2Ip79mlYPc8p+B2uzwBp4KMkzeLd5E6jUlCL93Y5Nvq68wV5fRLDRTf7N1LvofkVFWfDcednFOgA==", "dev": true }, "@cspell/dict-ruby": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-3.0.0.tgz", - "integrity": "sha512-sA98T8Y1Pmq3RStVkO14E8vTWkq6JUn8c8PldiMyYgV0yfQgwhQfFAzlSfF3Gg2B0VkIdqt2et2SPN7f9wp7fQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-4.0.1.tgz", + "integrity": "sha512-p9nLDsffPadPLLwdLQj4Gk0IsZ64iCSxnSCaeFXslFiD17FtJVh1YMHP7KE9M73u22Hprq+a1Yw25/xp6Tkt3g==", "dev": true }, "@cspell/dict-rust": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-3.0.0.tgz", - "integrity": "sha512-L1T1IBsYJZVDmfOGAbVLcpc6arWxRRCSJYvHSwEDBGrNuMyJ4jx/NvBEz5crcKf4vVKgwVlXgzQlJJZ8AVxU9w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.0.0.tgz", + "integrity": "sha512-nzJsgLR6/JXtM41Cr5FG89r8sBKW6aFjvCqPxeaBJYLAL0JuvsVUcd16rW2lTsdbx5J8yUQDD7mgCZFk6merJQ==", "dev": true }, "@cspell/dict-scala": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-3.0.0.tgz", - "integrity": "sha512-sIiCQDIMMnNns/fzD61z5npbh5pypaKq07Orqe0+eRfdQpika8iRSGUGFHVbtdd1JzB1DyTCV2e8OwdaQiXqJQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-4.0.0.tgz", + "integrity": "sha512-ugdjt66/Ah34yF3u3DUNjCHXnBqIuxUUfdeBobbGxfm29CNgidrISV1NUh+xi8tPynMzSTpGbBiArFBH6on5XQ==", "dev": true }, "@cspell/dict-software-terms": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-3.0.5.tgz", - "integrity": "sha512-xZVcX1zsIUbLvUc/RX+YgJRvbHaGMcdkRR+Vw8UoLjmhnT0yXWLds5uwRwAVjlQIrIcHylfDWuG70Cq5nmJHfA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-3.1.3.tgz", + "integrity": "sha512-gmVR+VgjLGPvUPaF4m1JEv9/mWvKE0bkj5w8nwtijZtAToZ6SKpWM/rkcZOsa691fMyhU6LbIfy4tAZbSSLVYA==", "dev": true }, "@cspell/dict-sql": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-sql/-/dict-sql-2.0.0.tgz", - "integrity": "sha512-J3X8VSgWpc/4McQEs138abtBw/SO3Z+vGaYi5X7XV1pKPBxjupHTTNQHSS/HWUDmVWj6fR3OV+ZGptcmvv3Clg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-sql/-/dict-sql-2.0.1.tgz", + "integrity": "sha512-7fvVcvy751cl31KMD5j04yMGq2UKj018/1hx3FNtdUI9UuUTMvhBrTAqHEEemR3ZeIC9i/5p5SQjwQ13bn04qw==", + "dev": true + }, + "@cspell/dict-svelte": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-svelte/-/dict-svelte-1.0.2.tgz", + "integrity": "sha512-rPJmnn/GsDs0btNvrRBciOhngKV98yZ9SHmg8qI6HLS8hZKvcXc0LMsf9LLuMK1TmS2+WQFAan6qeqg6bBxL2Q==", "dev": true }, "@cspell/dict-swift": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-swift/-/dict-swift-2.0.0.tgz", - "integrity": "sha512-VStJ0fKPPNIXKmxJrbGH6vKNtJCwAnQatfSH0fVj+Unf3QHHlmuLKRG0cN0aVgEIolpRkxNXJcSB3CPbYr0Xhw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-swift/-/dict-swift-2.0.1.tgz", + "integrity": "sha512-gxrCMUOndOk7xZFmXNtkCEeroZRnS2VbeaIPiymGRHj5H+qfTAzAKxtv7jJbVA3YYvEzWcVE2oKDP4wcbhIERw==", "dev": true }, "@cspell/dict-typescript": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.0.1.tgz", - "integrity": "sha512-nKEtOpj+rJNIUK268/mCFDCIv1MWFdK1efm9YL4q1q3NHT+qCKhkXoA0eG8k4AaDIpsvebB8CgNIYFPxY92r4A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.1.0.tgz", + "integrity": "sha512-4hdLlQMOYrUbGfJg2cWnbsBUevObwgL76TLVC0rwnrkSwzOxAxiGaG39VtRMvgAAe2lX6L+jka3fy0MmxzFOHw==", "dev": true }, "@cspell/dict-vue": { @@ -11842,10 +12334,19 @@ "integrity": "sha512-niiEMPWPV9IeRBRzZ0TBZmNnkK3olkOPYxC1Ny2AX4TGlYRajcW0WUtoSHmvvjZNfWLSg2L6ruiBeuPSbjnG6A==", "dev": true }, + "@cspell/dynamic-import": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-6.26.3.tgz", + "integrity": "sha512-Ic5uNy49mDg/6Qtbuc51zq2sDd0lXiFVN2QKSueNjk5hA5Zh/ZLQhrB70q7qaQwQg7FTiRxvJjpRtNoVqbY/sg==", + "dev": true, + "requires": { + "import-meta-resolve": "^2.2.1" + } + }, "@cspell/strong-weak-map": { - "version": "6.14.3", - "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-6.14.3.tgz", - "integrity": "sha512-/FTvcywuwfFTMEpRabL8+rqB/ezSjvMp6todO0SwL/agYQmRIuTvTYLh0Ikq430oVnjo7LDgztW0tHq38UlFLw==", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-6.26.3.tgz", + "integrity": "sha512-PC+I5obQY6f/l4/Z4TiE6HJhDiuR8wCPYqezPtBuD1Fw7Op0Nni77gUPKajTxhy1WHpks/PTTSjnV/cX9Mgt1Q==", "dev": true }, "@cspotcode/source-map-support": { @@ -11864,9 +12365,9 @@ "dev": true }, "@es-joy/jsdoccomment": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.36.0.tgz", - "integrity": "sha512-u0XZyvUF6Urb2cSivSXA8qXIpT/CxkHcdtZKoWusAzgzmsTWpg0F2FpWXsolHmMUyVY3dLWaoy+0ccJ5uf2QjA==", + "version": "0.36.1", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.36.1.tgz", + "integrity": "sha512-922xqFsTpHs6D0BUiG4toiyPOMc8/jafnWKxz1KWgS4XzKPy2qXf1Pe6UFuNSCQqt6tOuhAWXBNuuyUhJmw9Vg==", "dev": true, "requires": { "comment-parser": "1.3.1", @@ -11874,16 +12375,25 @@ "jsdoc-type-pratt-parser": "~3.1.0" } }, + "@eslint-community/eslint-utils": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.1.2.tgz", + "integrity": "sha512-7qELuQWWjVDdVsFQ5+beUl+KPczrEDA7S3zM4QUd/bJl7oXgsmpXaEVqrRTnOBqenOV4rWf2kVZk2Ot085zPWA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, "@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.4.0", - "globals": "^13.15.0", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -11930,14 +12440,14 @@ } }, "@humanwhocodes/config-array": { - "version": "0.11.6", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.6.tgz", - "integrity": "sha512-jJr+hPTJYKyDILJfhNSHsjiwXYf26Flsz8DvNndOsHs5pwSnpGUEy8yzF0JYhCEvTDdV2vuOK5tt8BVhwO5/hg==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "dependencies": { "debug": { @@ -12091,23 +12601,12 @@ } }, "@sinonjs/fake-timers": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", - "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz", + "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==", "dev": true, "requires": { - "@sinonjs/commons": "^1.7.0" - }, - "dependencies": { - "@sinonjs/commons": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.5.tgz", - "integrity": "sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - } + "@sinonjs/commons": "^2.0.0" } }, "@sinonjs/samsam": { @@ -12211,12 +12710,12 @@ "dev": true }, "@types/glob": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.0.0.tgz", - "integrity": "sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.0.1.tgz", + "integrity": "sha512-8bVUjXZvJacUFkJXHdyZ9iH1Eaj5V7I8c4NdH5sQJsdXkqT4CA5Dhb4yb4VE/3asyx4L9ayZr1NIhTsWHczmMw==", "dev": true, "requires": { - "@types/minimatch": "*", + "@types/minimatch": "^5.1.2", "@types/node": "*" } }, @@ -12233,21 +12732,21 @@ "dev": true }, "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", "dev": true }, "@types/mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-rADY+HtTOA52l9VZWtgQfn4p+UDVM2eDVkMZT1I6syp0YKxW2F9v+0pbRZLsvskhQv/vMb6ZfCay81GHbz5SHg==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", + "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", "dev": true }, "@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" + "version": "18.13.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.13.0.tgz", + "integrity": "sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg==" }, "@types/normalize-package-data": { "version": "2.4.1", @@ -12255,16 +12754,10 @@ "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, "@types/prompt": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@types/prompt/-/prompt-1.1.4.tgz", - "integrity": "sha512-FLMcf+ol+eUJALeIYWLjQl0hYw86G0PIg7D5+4jJHwr/wKI8p3R0u+oKLbyRkzCxb7e0pHixyCj7UgSv7I/TJQ==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@types/prompt/-/prompt-1.1.5.tgz", + "integrity": "sha512-xvIqQ/DOwlRxVT/P47f85rJGIQLZ59XQnbRpCdSJi93FtaAFOScr6H7GhiaaLGi1jo8WfOy1rhkpjc2zPFXMoQ==", "dev": true, "requires": { "@types/node": "*", @@ -12370,15 +12863,16 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.43.0.tgz", - "integrity": "sha512-wNPzG+eDR6+hhW4yobEmpR36jrqqQv1vxBq5LJO3fBAktjkvekfr4BRl+3Fn1CM/A+s8/EiGUbOMDoYqWdbtXA==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.52.0.tgz", + "integrity": "sha512-lHazYdvYVsBokwCdKOppvYJKaJ4S41CgKBcPvyd0xjZNbvQdhn/pnJlGtQksQ/NhInzdaeaSarlBjDXHuclEbg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.43.0", - "@typescript-eslint/type-utils": "5.43.0", - "@typescript-eslint/utils": "5.43.0", + "@typescript-eslint/scope-manager": "5.52.0", + "@typescript-eslint/type-utils": "5.52.0", + "@typescript-eslint/utils": "5.52.0", "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", "regexpp": "^3.2.0", @@ -12387,28 +12881,28 @@ }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", - "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.52.0.tgz", + "integrity": "sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/visitor-keys": "5.43.0" + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0" } }, "@typescript-eslint/types": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", - "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.52.0.tgz", + "integrity": "sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==", "dev": true }, "@typescript-eslint/visitor-keys": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", - "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.52.0.tgz", + "integrity": "sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/types": "5.52.0", "eslint-visitor-keys": "^3.3.0" } }, @@ -12454,41 +12948,41 @@ } }, "@typescript-eslint/parser": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.43.0.tgz", - "integrity": "sha512-2iHUK2Lh7PwNUlhFxxLI2haSDNyXvebBO9izhjhMoDC+S3XI9qt2DGFUsiJ89m2k7gGYch2aEpYqV5F/+nwZug==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.52.0.tgz", + "integrity": "sha512-e2KiLQOZRo4Y0D/b+3y08i3jsekoSkOYStROYmPUnGMEoA0h+k2qOH5H6tcjIc68WDvGwH+PaOrP1XRzLJ6QlA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.43.0", - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/scope-manager": "5.52.0", + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/typescript-estree": "5.52.0", "debug": "^4.3.4" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", - "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.52.0.tgz", + "integrity": "sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/visitor-keys": "5.43.0" + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0" } }, "@typescript-eslint/types": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", - "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.52.0.tgz", + "integrity": "sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", - "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.52.0.tgz", + "integrity": "sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/visitor-keys": "5.43.0", + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -12497,12 +12991,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", - "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.52.0.tgz", + "integrity": "sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/types": "5.52.0", "eslint-visitor-keys": "^3.3.0" } }, @@ -12547,32 +13041,42 @@ } } }, - "@typescript-eslint/type-utils": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.43.0.tgz", - "integrity": "sha512-K21f+KY2/VvYggLf5Pk4tgBOPs2otTaIHy2zjclo7UZGLyFH86VfUOm5iq+OtDtxq/Zwu2I3ujDBykVW4Xtmtg==", + "@typescript-eslint/scope-manager": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.51.0.tgz", + "integrity": "sha512-gNpxRdlx5qw3yaHA0SFuTjW4rxeYhpHxt491PEcKF8Z6zpq0kMhe0Tolxt0qjlojS+/wArSDlj/LtE69xUJphQ==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.43.0", - "@typescript-eslint/utils": "5.43.0", + "@typescript-eslint/types": "5.51.0", + "@typescript-eslint/visitor-keys": "5.51.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.52.0.tgz", + "integrity": "sha512-tEKuUHfDOv852QGlpPtB3lHOoig5pyFQN/cUiZtpw99D93nEBjexRLre5sQZlkMoHry/lZr8qDAt2oAHLKA6Jw==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.52.0", + "@typescript-eslint/utils": "5.52.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, "dependencies": { "@typescript-eslint/types": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", - "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.52.0.tgz", + "integrity": "sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", - "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.52.0.tgz", + "integrity": "sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/visitor-keys": "5.43.0", + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -12581,12 +13085,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", - "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.52.0.tgz", + "integrity": "sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/types": "5.52.0", "eslint-visitor-keys": "^3.3.0" } }, @@ -12631,46 +13135,108 @@ } } }, + "@typescript-eslint/types": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.51.0.tgz", + "integrity": "sha512-SqOn0ANn/v6hFn0kjvLwiDi4AzR++CBZz0NV5AnusT2/3y32jdc0G4woXPWHCumWtUXZKPAS27/9vziSsC9jnw==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.51.0.tgz", + "integrity": "sha512-TSkNupHvNRkoH9FMA3w7TazVFcBPveAAmb7Sz+kArY6sLT86PA5Vx80cKlYmd8m3Ha2SwofM1KwraF24lM9FvA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.51.0", + "@typescript-eslint/visitor-keys": "5.51.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, "@typescript-eslint/utils": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.43.0.tgz", - "integrity": "sha512-8nVpA6yX0sCjf7v/NDfeaOlyaIIqL7OaIGOWSPFqUKK59Gnumd3Wa+2l8oAaYO2lk0sO+SbWFWRSvhu8gLGv4A==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.52.0.tgz", + "integrity": "sha512-As3lChhrbwWQLNk2HC8Ree96hldKIqk98EYvypd3It8Q1f8d5zWyIoaZEp2va5667M4ZyE7X8UUR+azXrFl+NA==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.43.0", - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/scope-manager": "5.52.0", + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/typescript-estree": "5.52.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0", "semver": "^7.3.7" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.43.0.tgz", - "integrity": "sha512-XNWnGaqAtTJsUiZaoiGIrdJYHsUOd3BZ3Qj5zKp9w6km6HsrjPk/TGZv0qMTWyWj0+1QOqpHQ2gZOLXaGA9Ekw==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.52.0.tgz", + "integrity": "sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/visitor-keys": "5.43.0" + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0" } }, "@typescript-eslint/types": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.43.0.tgz", - "integrity": "sha512-jpsbcD0x6AUvV7tyOlyvon0aUsQpF8W+7TpJntfCUWU1qaIKu2K34pMwQKSzQH8ORgUrGYY6pVIh1Pi8TNeteg==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.52.0.tgz", + "integrity": "sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.43.0.tgz", - "integrity": "sha512-BZ1WVe+QQ+igWal2tDbNg1j2HWUkAa+CVqdU79L4HP9izQY6CNhXfkNwd1SS4+sSZAP/EthI1uiCSY/+H0pROg==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.52.0.tgz", + "integrity": "sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.43.0", - "@typescript-eslint/visitor-keys": "5.43.0", + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -12679,12 +13245,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.43.0.tgz", - "integrity": "sha512-icl1jNH/d18OVHLfcwdL3bWUKsBeIiKYTGxMJCoGe7xFht+E4QgzOqoWYrU8XSLJWhVw8nTacbm03v23J/hFTg==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.52.0.tgz", + "integrity": "sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/types": "5.52.0", "eslint-visitor-keys": "^3.3.0" } }, @@ -12729,6 +13295,16 @@ } } }, + "@typescript-eslint/visitor-keys": { + "version": "5.51.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.51.0.tgz", + "integrity": "sha512-Oh2+eTdjHjOFjKA27sxESlA87YPSOJafGCR0md5oeMdh1ZcCfAGCIOL216uTBAkAIptvLIfKQhl7lHxMJet4GQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.51.0", + "eslint-visitor-keys": "^3.3.0" + } + }, "@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -12876,23 +13452,23 @@ } }, "@webpack-cli/configtest": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.0.0.tgz", - "integrity": "sha512-war4OU8NGjBqU3DP3bx6ciODXIh7dSXcpQq+P4K2Tqyd8L5OjZ7COx9QXx/QdCIwL2qoX09Wr4Cwf7uS4qdEng==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.0.1.tgz", + "integrity": "sha512-njsdJXJSiS2iNbQVS0eT8A/KPnmyH4pv1APj2K0d1wrZcBLw+yppxOy4CGqa0OxDJkzfL/XELDhD8rocnIwB5A==", "dev": true, "requires": {} }, "@webpack-cli/info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.0.tgz", - "integrity": "sha512-NNxDgbo4VOkNhOlTgY0Elhz3vKpOJq4/PKeKg7r8cmYM+GQA9vDofLYyup8jS6EpUvhNmR30cHTCEIyvXpskwA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.1.tgz", + "integrity": "sha512-fE1UEWTwsAxRhrJNikE7v4EotYflkEhBL7EbajfkPlf6E37/2QshOy/D48Mw8G5XMFlQtS6YV42vtbG9zBpIQA==", "dev": true, "requires": {} }, "@webpack-cli/serve": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.0.tgz", - "integrity": "sha512-Rumq5mHvGXamnOh3O8yLk1sjx8dB30qF1OeR6VC00DIR6SLJ4bwwUGKC4pE7qBFoQyyh0H9sAg3fikYgAqVR0w==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.1.tgz", + "integrity": "sha512-0G7tNyS+yW8TdgHwZKlDWYXFA6OJQnoLCQvYKkQP0Q2X205PSQ6RNUj0M+1OB/9gRQaUZ/ccYfaxd0nhaWKfjw==", "dev": true, "requires": {} }, @@ -12984,6 +13560,12 @@ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, + "ansi-sequence-parser": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz", + "integrity": "sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==", + "dev": true + }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -13034,15 +13616,15 @@ } }, "array-includes": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", - "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", "is-string": "^1.0.7" } }, @@ -13059,14 +13641,26 @@ "dev": true }, "array.prototype.flat": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", - "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", "es-shim-unscopables": "^1.0.0" } }, @@ -13103,6 +13697,12 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -13661,16 +14261,32 @@ "dev": true }, "cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.0.0.tgz", + "integrity": "sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==", "dev": true, "requires": { - "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "path-type": "^4.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + } } }, "cp-file": { @@ -13709,26 +14325,26 @@ "dev": true }, "cspell": { - "version": "6.14.3", - "resolved": "https://registry.npmjs.org/cspell/-/cspell-6.14.3.tgz", - "integrity": "sha512-DimVpUiw2iOSvO1daOTtOWjmryVZdFnPmjPhyhWZUqakOEgE2MgoBuk3cFzXqb8GsGXHQh5PqiWr1rqIkQ99qA==", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/cspell/-/cspell-6.26.3.tgz", + "integrity": "sha512-h7p8JpWSFhgNbsJLlpjzMCQ0k6TuhX/M5JcrED14x17CuZR7ad29lQDRF0Un82Wxhd8hJNxZubV9IBdWZA7Qig==", "dev": true, "requires": { - "@cspell/cspell-pipe": "6.14.3", + "@cspell/cspell-pipe": "6.26.3", + "@cspell/dynamic-import": "6.26.3", "chalk": "^4.1.2", - "commander": "^9.4.1", - "cspell-gitignore": "6.14.3", - "cspell-glob": "6.14.3", - "cspell-lib": "6.14.3", + "commander": "^10.0.0", + "cspell-gitignore": "6.26.3", + "cspell-glob": "6.26.3", + "cspell-lib": "6.26.3", + "fast-glob": "^3.2.12", "fast-json-stable-stringify": "^2.1.0", "file-entry-cache": "^6.0.1", - "fs-extra": "^10.1.0", "get-stdin": "^8.0.0", - "glob": "^8.0.3", "imurmurhash": "^0.1.4", "semver": "^7.3.8", "strip-ansi": "^6.0.1", - "vscode-uri": "^3.0.6" + "vscode-uri": "^3.0.7" }, "dependencies": { "ansi-regex": { @@ -13771,16 +14387,11 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } + "commander": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", + "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", + "dev": true }, "has-flag": { "version": "4.0.0", @@ -13788,16 +14399,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -13834,12 +14435,6 @@ "has-flag": "^4.0.0" } }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -13849,155 +14444,95 @@ } }, "cspell-dictionary": { - "version": "6.14.3", - "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-6.14.3.tgz", - "integrity": "sha512-yIqJEZZj36j1CmmjAiuQOYZM6T62Ih7k35DhAU1hYVARUEEnFN/Uz72UkDj2SAmURVn2On+bAmZ5zCx0JZzf2g==", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-6.26.3.tgz", + "integrity": "sha512-wUiTHe7OWZuptEROJm3gzSk12ABAozArFnKVNfsfVR/tgBIjLTgX+9RIOuJL0g+vDxIsZu8dpOuty3MPmI3vBg==", "dev": true, "requires": { - "@cspell/cspell-pipe": "6.14.3", - "@cspell/cspell-types": "6.14.3", - "cspell-trie-lib": "6.14.3", + "@cspell/cspell-pipe": "6.26.3", + "@cspell/cspell-types": "6.26.3", + "cspell-trie-lib": "6.26.3", "fast-equals": "^4.0.3", - "gensequence": "^4.0.2" + "gensequence": "^4.0.3" } }, "cspell-gitignore": { - "version": "6.14.3", - "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-6.14.3.tgz", - "integrity": "sha512-CZTGxx3msF6p1Z0xgLe5LXXvve7DooSuRMBMdGn230usce1nKoxpPoPxgs+zXeCpi+FanykKnoZkdRvjolMpOA==", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-6.26.3.tgz", + "integrity": "sha512-K6Gl3I71UZOU9077xXhJmG2Bwzhj6ay64pnry6+KBHJDAxuSWnXaWg1/KpSf6ciwwvggyRxhKOSykzLI8Ivweg==", "dev": true, "requires": { - "cspell-glob": "6.14.3", + "cspell-glob": "6.26.3", "find-up": "^5.0.0" } }, "cspell-glob": { - "version": "6.14.3", - "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-6.14.3.tgz", - "integrity": "sha512-ISwCK8GqM/dnvtaxA17w1MPmMzFLOqdTz+JWIcR4at47T9qd8bNB0X0P4eqyuqgsbKkWbfnSlsYlEjRHTi4a7A==", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-6.26.3.tgz", + "integrity": "sha512-6f6waZGHZ1Vt9HVOqQrkYfq5EMJ+UvJGgiq1tVO8jDGdayupNIaivh9XT6ReWHJVLbKypJddQzrw7eMMEd0Mmg==", "dev": true, "requires": { "micromatch": "^4.0.5" } }, "cspell-grammar": { - "version": "6.14.3", - "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-6.14.3.tgz", - "integrity": "sha512-Nz8tYUmstyKcFlXbxdw4N8NsQ2ZY/5ztNfouokk47LKaTAS0LyWlLSkZUxN016fMY2h+C+3dI+jaut2H/rtNew==", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-6.26.3.tgz", + "integrity": "sha512-eoqMETuGH6bjsSnK5UGtfLKLkW+VKOQBGRQBVBfI+2KKaZyfvm7/q8ScRYdAsoQg67Ws7/2Dplej7vRltyfCQQ==", "dev": true, "requires": { - "@cspell/cspell-pipe": "6.14.3", - "@cspell/cspell-types": "6.14.3" + "@cspell/cspell-pipe": "6.26.3", + "@cspell/cspell-types": "6.26.3" } }, "cspell-io": { - "version": "6.14.3", - "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-6.14.3.tgz", - "integrity": "sha512-EbH+qopgWIzr9SZCGDsF4AWYgucN4QzYeAgyXjTbV9RnNIGKOKovMe3vN9nxjOZyPKv2TvmgU+uMXDM61iObRw==", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-6.26.3.tgz", + "integrity": "sha512-bUzsHM+A+jfMEYuwBnC/w2KIgf4TPEx3E5AIfg+qtRuP2paTYOFulNBWgxzWovSkXH08R4yNgDQIN1dO3Fhzjw==", "dev": true, "requires": { - "@cspell/cspell-service-bus": "6.14.3", - "node-fetch": "^2.6.7" + "@cspell/cspell-service-bus": "6.26.3", + "node-fetch": "^2.6.9" } }, "cspell-lib": { - "version": "6.14.3", - "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-6.14.3.tgz", - "integrity": "sha512-RJT5Tbe0UCMCtqDWRujjxq9u23sc2XylIpDP7MnpLx8wLVgFv2WPzESYNRGZqceqZYwBAPnpqS9h2ANxXSi8UQ==", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-6.26.3.tgz", + "integrity": "sha512-UwtrGSHoZxQmTm78yB55KLIz46THG1neZ87mYHdoYgc5EOc2gKTWRPfYsioUs8fH31L+4CwHNbdxvTRg+Vpg/Q==", "dev": true, "requires": { - "@cspell/cspell-bundled-dicts": "6.14.3", - "@cspell/cspell-pipe": "6.14.3", - "@cspell/cspell-types": "6.14.3", - "@cspell/strong-weak-map": "6.14.3", + "@cspell/cspell-bundled-dicts": "6.26.3", + "@cspell/cspell-pipe": "6.26.3", + "@cspell/cspell-types": "6.26.3", + "@cspell/strong-weak-map": "6.26.3", "clear-module": "^4.1.2", "comment-json": "^4.2.3", "configstore": "^5.0.1", - "cosmiconfig": "^7.1.0", - "cspell-dictionary": "6.14.3", - "cspell-glob": "6.14.3", - "cspell-grammar": "6.14.3", - "cspell-io": "6.14.3", - "cspell-trie-lib": "6.14.3", + "cosmiconfig": "^8.0.0", + "cspell-dictionary": "6.26.3", + "cspell-glob": "6.26.3", + "cspell-grammar": "6.26.3", + "cspell-io": "6.26.3", + "cspell-trie-lib": "6.26.3", "fast-equals": "^4.0.3", "find-up": "^5.0.0", - "fs-extra": "^10.1.0", - "gensequence": "^4.0.2", + "gensequence": "^4.0.3", "import-fresh": "^3.3.0", "resolve-from": "^5.0.0", "resolve-global": "^1.0.0", - "vscode-languageserver-textdocument": "^1.0.7", - "vscode-uri": "^3.0.6" - }, - "dependencies": { - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } + "vscode-languageserver-textdocument": "^1.0.8", + "vscode-uri": "^3.0.7" } }, "cspell-trie-lib": { - "version": "6.14.3", - "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-6.14.3.tgz", - "integrity": "sha512-WVa5gbD9glsZ4c60qPD5RTwojKc5ooxw/Gn+HC9CBdWv5rE1AmM1V3yVWhYx2ZMbJufboBrzmSjJB9qdmUl3oA==", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-6.26.3.tgz", + "integrity": "sha512-pda7iXr74SC9eD5ksAEDDR2M/ervnGaHXugTjn+TVXXBH16lnmqz/Ns5Zlp351lwb3BhqjVU+XqZ0tn28ISvAw==", "dev": true, "requires": { - "@cspell/cspell-pipe": "6.14.3", - "@cspell/cspell-types": "6.14.3", - "fs-extra": "^10.1.0", - "gensequence": "^4.0.2" - }, - "dependencies": { - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } + "@cspell/cspell-pipe": "6.26.3", + "@cspell/cspell-types": "6.26.3", + "gensequence": "^4.0.3" } }, "cycle": { @@ -14061,9 +14596,9 @@ "dev": true }, "deepmerge-ts": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-4.2.1.tgz", - "integrity": "sha512-xzJLiUo4z1dD2nggSfaMvHo5qWLoy/JVa9rKuktC6FrQQEBI8Qnj7KwuCYZhqBoGOOpGqs6+3MR2ZhSMcTr4BA==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-4.2.2.tgz", + "integrity": "sha512-Ka3Kb21tiWjvQvS9U+1Dx+aqFAHsdTnMdYptLTmC2VAmDFMugWMY1e15aTODstipmCun8iNuqeSfcx6rsUUk0Q==", "dev": true }, "default-require-extensions": { @@ -14429,34 +14964,44 @@ } }, "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", + "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", "dev": true, "requires": { + "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.1.1", + "get-intrinsic": "^1.1.3", "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.3", - "is-callable": "^1.2.4", + "internal-slot": "^1.0.4", + "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.0", + "object-inspect": "^1.12.2", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", + "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" + "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" } }, "es-module-lexer": { @@ -14465,6 +15010,17 @@ "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, + "es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + } + }, "es-shim-unscopables": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", @@ -14516,13 +15072,13 @@ "dev": true }, "eslint": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz", - "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", + "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.11.6", + "@eslint/eslintrc": "^1.4.1", + "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", @@ -14541,7 +15097,7 @@ "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.15.0", + "globals": "^13.19.0", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", @@ -14731,13 +15287,14 @@ } }, "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", "dev": true, "requires": { "debug": "^3.2.7", - "resolve": "^1.20.0" + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" }, "dependencies": { "debug": { @@ -14784,15 +15341,17 @@ } }, "eslint-plugin-functional": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-functional/-/eslint-plugin-functional-4.4.1.tgz", - "integrity": "sha512-YhSfHS52Si62Sn126g9wGx+XnWMoWhwEt6ctVXfcJj+xMUiggjOqUVMca7fuLNzX8jYiNBIeU1Y0teHGePZ3NA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-functional/-/eslint-plugin-functional-5.0.4.tgz", + "integrity": "sha512-vV5jUAWfFQfe4OfE1YM99mUYX5AW0uL7tJa+rYIwwTRzeQc39j6SfvGdLUg2sXkTpmcfO3VwBLD7Ij5yjpRM8w==", "dev": true, "requires": { - "@typescript-eslint/utils": "^5.10.2", - "deepmerge-ts": "^4.0.3", + "@typescript-eslint/type-utils": "^5.50.0", + "@typescript-eslint/utils": "^5.50.0", + "deepmerge-ts": "^4.2.2", "escape-string-regexp": "^4.0.0", - "semver": "^7.3.7" + "is-immutable-type": "^1.2.4", + "semver": "^7.3.8" }, "dependencies": { "escape-string-regexp": { @@ -14811,9 +15370,9 @@ } }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -14828,26 +15387,37 @@ } }, "eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", "dev": true, "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", "has": "^1.0.3", - "is-core-module": "^2.8.1", + "is-core-module": "^2.11.0", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", "tsconfig-paths": "^3.14.1" }, "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, "doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -14858,14 +15428,26 @@ } }, "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "requires": { "minimist": "^1.2.0" } }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, "tsconfig-paths": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", @@ -14881,12 +15463,12 @@ } }, "eslint-plugin-jsdoc": { - "version": "39.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.6.2.tgz", - "integrity": "sha512-dvgY/W7eUFoAIIiaWHERIMI61ZWqcz9YFjEeyTzdPlrZc3TY/3aZm5aB91NUoTLWYZmO/vFlYSuQi15tF7uE5A==", + "version": "40.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-40.0.0.tgz", + "integrity": "sha512-LOPyIu1vAVvGPkye3ci0moj0iNf3f8bmin6do2DYDj+77NRXWnkmhKRy8swWsatUs3mB5jYPWPUsFg9pyfEiyA==", "dev": true, "requires": { - "@es-joy/jsdoccomment": "~0.36.0", + "@es-joy/jsdoccomment": "~0.36.1", "comment-parser": "1.3.1", "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", @@ -14957,31 +15539,33 @@ "requires": {} }, "eslint-plugin-unicorn": { - "version": "44.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-44.0.2.tgz", - "integrity": "sha512-GLIDX1wmeEqpGaKcnMcqRvMVsoabeF0Ton0EX4Th5u6Kmf7RM9WBl705AXFEsns56ESkEs0uyelLuUTvz9Tr0w==", + "version": "45.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-45.0.2.tgz", + "integrity": "sha512-Y0WUDXRyGDMcKLiwgL3zSMpHrXI00xmdyixEGIg90gHnj0PcHY4moNv3Ppje/kDivdAy5vUeUr7z211ImPv2gw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.19.1", - "ci-info": "^3.4.0", + "@eslint-community/eslint-utils": "^4.1.2", + "ci-info": "^3.6.1", "clean-regexp": "^1.0.0", - "eslint-utils": "^3.0.0", "esquery": "^1.4.0", "indent-string": "^4.0.0", "is-builtin-module": "^3.2.0", + "jsesc": "^3.0.2", "lodash": "^4.17.21", "pluralize": "^8.0.0", "read-pkg-up": "^7.0.1", "regexp-tree": "^0.1.24", + "regjsparser": "^0.9.1", "safe-regex": "^2.1.1", - "semver": "^7.3.7", + "semver": "^7.3.8", "strip-indent": "^3.0.0" }, "dependencies": { "ci-info": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz", - "integrity": "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.6.1.tgz", + "integrity": "sha512-up5ggbaDqOqJ4UqLKZ2naVkyqSJQgJi5lwD6b6mM748ysrghDBX0bx/qJTUHzw7zu6Mq4gycviSF5hJnwceD8w==", "dev": true }, "lru-cache": { @@ -14994,9 +15578,9 @@ } }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -15044,9 +15628,9 @@ "dev": true }, "espree": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", - "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dev": true, "requires": { "acorn": "^8.8.0", @@ -15149,9 +15733,9 @@ "dev": true }, "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -15291,6 +15875,31 @@ "requires": { "flatted": "^3.1.0", "rimraf": "^3.0.2" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, "flatted": { @@ -15299,6 +15908,15 @@ "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", "dev": true }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, "foreground-child": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", @@ -15463,9 +16081,9 @@ "dev": true }, "gensequence": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gensequence/-/gensequence-4.0.2.tgz", - "integrity": "sha512-mQiFskYFPFDSUpBJ/n3ebAV2Ufu6DZGvUPXzyWYzFfJr6/DyOOZVnjx6VTWE4y0RLvYWnc5tZq5sCjzEWhRjqQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gensequence/-/gensequence-4.0.3.tgz", + "integrity": "sha512-izr+MKqJKjexkvLiPGhW96elQX8TuUR/su/xzILxjqzU1RDz1n1ZbqwDUnNFaRcq0gFR3oQfNH2JOH4Je1x/QA==", "dev": true }, "gensync": { @@ -15487,9 +16105,9 @@ "dev": true }, "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", "dev": true, "requires": { "function-bind": "^1.1.1", @@ -15544,9 +16162,9 @@ } }, "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -15601,9 +16219,9 @@ } }, "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.19.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -15617,6 +16235,15 @@ } } }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } + }, "globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -15631,6 +16258,15 @@ "slash": "^3.0.0" } }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -15723,6 +16359,12 @@ "get-intrinsic": "^1.1.1" } }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -15781,9 +16423,9 @@ "dev": true }, "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "dev": true }, "http-errors": { @@ -15871,6 +16513,12 @@ "resolve-cwd": "^3.0.0" } }, + "import-meta-resolve": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.1.tgz", + "integrity": "sha512-C6lLL7EJPY44kBvA80gq4uMsVFw5x3oSKfuMl1cuZ2RkI5+UJqQXgn+6hlUew0y4ig7Ypt4CObAAIzU53Nfpuw==", + "dev": true + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -15906,12 +16554,12 @@ "dev": true }, "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", + "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", "dev": true, "requires": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.1.3", "has": "^1.0.3", "side-channel": "^1.0.4" } @@ -15922,6 +16570,17 @@ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true }, + "is-array-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", + "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-typed-array": "^1.1.10" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -15974,9 +16633,9 @@ } }, "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true }, "is-ci": { @@ -15989,9 +16648,9 @@ } }, "is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, "requires": { "has": "^1.0.3" @@ -16023,6 +16682,13 @@ } } }, + "is-immutable-type": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-immutable-type/-/is-immutable-type-1.2.4.tgz", + "integrity": "sha512-H/famjtztrVEl/P9izGTFLEJjmKsDoj+WBMVo+oSSDEuNTZpJFDn37/ovEb+3a3K5UU8zdkVUwBgddeBPH41pA==", + "dev": true, + "requires": {} + }, "is-installed-globally": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", @@ -16124,6 +16790,19 @@ "has-symbols": "^1.0.2" } }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "requires": { + "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-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -16222,12 +16901,35 @@ "which": "^2.0.1" } }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "istanbul-lib-coverage": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", "dev": true }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -16394,6 +17096,12 @@ "integrity": "sha512-MgtD0ZiCDk9B+eI73BextfRrVQl0oyzRG8B2BjORts6jbunj4ScKPcyXGTbB6eXL4y9TzxCm6hyeLq/2ASzNdw==", "dev": true }, + "jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true + }, "json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", @@ -16431,15 +17139,15 @@ "dev": true }, "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, "jsonc-parser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz", - "integrity": "sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", "dev": true }, "jsonfile": { @@ -16709,9 +17417,9 @@ "dev": true }, "marked": { - "version": "4.0.19", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.19.tgz", - "integrity": "sha512-rgQF/OxOiLcvgUAj1Q1tAf4Bgxn5h5JZTp04Fx4XUkVhs7B+7YA9JEWJhJpoO8eJt8MkZMwqLCNeNqj1bCREZQ==", + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.12.tgz", + "integrity": "sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw==", "dev": true }, "medium-zoom": { @@ -16808,9 +17516,9 @@ } }, "mocha": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", - "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", "dev": true, "requires": { "ansi-colors": "4.1.1", @@ -16973,9 +17681,9 @@ "dev": true }, "nanoid": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.0.tgz", - "integrity": "sha512-IgBP8piMxe/gf73RTQx7hmnhwz0aaEXYakvqZyE302IXW3HyVNhdNGC+O2MwMAVhLEnvXlvKtGbtJf6wvHihCg==" + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" }, "natural-compare": { "version": "1.4.0", @@ -17037,9 +17745,9 @@ } }, "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", "dev": true, "requires": { "whatwg-url": "^5.0.0" @@ -17212,6 +17920,15 @@ "semver": "^6.3.0" } }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -17290,14 +18007,14 @@ } }, "object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, "on-finished": { @@ -17615,9 +18332,9 @@ "dev": true }, "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", + "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", "dev": true }, "prismjs": { @@ -17698,9 +18415,9 @@ } }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "dev": true }, "queue-microtask": { @@ -17862,6 +18579,23 @@ "rc": "^1.2.8" } }, + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } + } + }, "release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", @@ -18127,29 +18861,10 @@ "dev": true }, "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.1.2.tgz", + "integrity": "sha512-BlIbgFryTbw3Dz6hyoWFhKk+unCcHMSkZGrTFVAx2WmttdBSonsdtRlwiuTbDqTKr+UlXIUqJVS4QT5tUzGENQ==", + "dev": true }, "run-parallel": { "version": "1.2.0", @@ -18175,6 +18890,17 @@ "regexp-tree": "~0.1.1" } }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -18340,14 +19066,15 @@ } }, "shiki": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.11.1.tgz", - "integrity": "sha512-EugY9VASFuDqOexOgXR18ZV+TbFrQHeCpEYaXamO+SZlsnT/2LxuLBX25GGtIrwaEVFXUAbUQ601SWE2rMwWHA==", + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.1.tgz", + "integrity": "sha512-+Jz4nBkCBe0mEDqo1eKRcCdjRtrCjozmcbTUjbPTX7OOJfEbTZzlUWlZtGe3Gb5oV1/jnojhG//YZc3rs9zSEw==", "dev": true, "requires": { - "jsonc-parser": "^3.0.0", - "vscode-oniguruma": "^1.6.1", - "vscode-textmate": "^6.0.0" + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" } }, "side-channel": { @@ -18368,13 +19095,13 @@ "dev": true }, "sinon": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-14.0.2.tgz", - "integrity": "sha512-PDpV0ZI3ZCS3pEqx0vpNp6kzPhHrLx72wA0G+ZLaaJjLIYeE0n8INlgaohKuGy7hP0as5tbUd23QWu5U233t+w==", + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-15.0.1.tgz", + "integrity": "sha512-PZXKc08f/wcA/BMRGBze2Wmw50CWPiAH3E21EOi4B49vJ616vW4DQh4fQrqsYox2aNR/N3kCqLuB0PwwOucQrg==", "dev": true, "requires": { "@sinonjs/commons": "^2.0.0", - "@sinonjs/fake-timers": "^9.1.2", + "@sinonjs/fake-timers": "10.0.2", "@sinonjs/samsam": "^7.0.1", "diff": "^5.0.0", "nise": "^5.1.2", @@ -18444,6 +19171,29 @@ "which": "^2.0.1" }, "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -18601,25 +19351,25 @@ } }, "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "es-abstract": "^1.20.4" } }, "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "es-abstract": "^1.20.4" } }, "strip-ansi": { @@ -18803,9 +19553,9 @@ "dev": true }, "ts-loader": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.1.tgz", - "integrity": "sha512-384TYAqGs70rn9F0VBnh6BPTfhga7yFNdC5gXbQpDrBj9/KsT4iRkGqKXhziofHOlE2j6YEaiTYVGKKvPhGWvw==", + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.2.tgz", + "integrity": "sha512-OmlC4WVmFv5I0PpaxYb+qGeGOdm5giHU7HwDDUjw59emP2UYMHy9fFSDcYgSNoH8sXcj4hGCSEhlDZ9ULeDraA==", "dev": true, "requires": { "chalk": "^4.1.0", @@ -18919,12 +19669,12 @@ } }, "tsconfig-paths": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.0.tgz", - "integrity": "sha512-AHx4Euop/dXFC+Vx589alFba8QItjF+8hf8LtmuiCwHyI4rHXQtOOENaM8kvYf5fR0dRChy3wzWIZ9WbB7FWow==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.2.tgz", + "integrity": "sha512-uhxiMgnXQp1IR622dUXI+9Ehnws7i/y6xvpZB9IbUVOPy0muvdvgXeZOn88UcGPiT98Vp3rJPTa8bFoalZ3Qhw==", "dev": true, "requires": { - "json5": "^2.2.1", + "json5": "^2.2.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } @@ -19048,6 +19798,17 @@ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true }, + "typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + } + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -19064,15 +19825,15 @@ } }, "typedoc": { - "version": "0.23.21", - "resolved": "http://registry.npmjs.org/typedoc/-/typedoc-0.23.21.tgz", - "integrity": "sha512-VNE9Jv7BgclvyH9moi2mluneSviD43dCE9pY8RWkO88/DrEgJZk9KpUk7WO468c9WWs/+aG6dOnoH7ccjnErhg==", + "version": "0.23.25", + "resolved": "http://registry.npmjs.org/typedoc/-/typedoc-0.23.25.tgz", + "integrity": "sha512-O1he153qVyoCgJYSvIyY3bPP1wAJTegZfa6tL3APinSZhJOf8CSd8F/21M6ex8pUY/fuY6n0jAsT4fIuMGA6sA==", "dev": true, "requires": { "lunr": "^2.3.9", - "marked": "^4.0.19", - "minimatch": "^5.1.0", - "shiki": "^0.11.1" + "marked": "^4.2.12", + "minimatch": "^6.1.6", + "shiki": "^0.14.1" }, "dependencies": { "brace-expansion": { @@ -19085,9 +19846,9 @@ } }, "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-6.2.0.tgz", + "integrity": "sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -19096,9 +19857,9 @@ } }, "typescript": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", - "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true }, "unbox-primitive": { @@ -19296,27 +20057,27 @@ } }, "vscode-languageserver-textdocument": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.7.tgz", - "integrity": "sha512-bFJH7UQxlXT8kKeyiyu41r22jCZXG8kuuVVA33OEJn1diWOZK5n8zBSPZFHVBOu8kXZ6h0LIRhf5UnCo61J4Hg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", + "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==", "dev": true }, "vscode-oniguruma": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.2.tgz", - "integrity": "sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", "dev": true }, "vscode-textmate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-6.0.0.tgz", - "integrity": "sha512-gu73tuZfJgu+mvCSy4UZwd2JXykjK9zAZsfmDeut5dx/1a7FeTk0XwJsSuqQn+cuMCGVbIBfl+s53X4T19DnzQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", + "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", "dev": true }, "vscode-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.6.tgz", - "integrity": "sha512-fmL7V1eiDBFRRnu+gfRWTzyPpNIHJTc4mWnFkwBUmO9U3KPgJAmTx7oxi2bl/Rh6HLdU7+4C9wlj0k2E4AdKFQ==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", + "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==", "dev": true }, "watchpack": { @@ -19368,15 +20129,15 @@ } }, "webpack-cli": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.0.0.tgz", - "integrity": "sha512-AACDTo20yG+xn6HPW5xjbn2Be4KUzQPebWXsDMHwPPyKh9OnTOJgZN2Nc+g/FZKV3ObRTYsGvibAvc+5jAUrVA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.0.1.tgz", + "integrity": "sha512-S3KVAyfwUqr0Mo/ur3NzIp6jnerNpo7GUO6so51mxLi1spqsA17YcMXy0WOIJtBSnj748lthxC6XLbNKh/ZC+A==", "dev": true, "requires": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^2.0.0", - "@webpack-cli/info": "^2.0.0", - "@webpack-cli/serve": "^2.0.0", + "@webpack-cli/configtest": "^2.0.1", + "@webpack-cli/info": "^2.0.1", + "@webpack-cli/serve": "^2.0.1", "colorette": "^2.0.14", "commander": "^9.4.1", "cross-spawn": "^7.0.3", @@ -19494,6 +20255,20 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "requires": { + "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" + } + }, "widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", @@ -19651,12 +20426,6 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, "yargonaut": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/yargonaut/-/yargonaut-1.1.4.tgz", diff --git a/package.json b/package.json index 22132c1de7..c08a2678b2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "docx", - "version": "7.7.0", + "version": "7.8.2", "description": "Easily generate .docx files with JS/TS with a nice declarative API. Works for Node and on the Browser.", "main": "build/index.js", "scripts": { @@ -52,7 +52,7 @@ "dependencies": { "@types/node": "^18.0.0", "jszip": "^3.1.5", - "nanoid": "^4.0.0", + "nanoid": "^3.3.4", "xml": "^1.0.1", "xml-js": "^1.6.8" }, @@ -79,12 +79,12 @@ "cspell": "^6.2.2", "docsify-cli": "^4.3.0", "eslint": "^8.23.0", - "eslint-plugin-functional": "^4.3.1", + "eslint-plugin-functional": "^5.0.1", "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsdoc": "^39.3.6", + "eslint-plugin-jsdoc": "^40.0.0", "eslint-plugin-no-null": "^1.0.2", "eslint-plugin-prefer-arrow": "^1.2.3", - "eslint-plugin-unicorn": "^44.0.0", + "eslint-plugin-unicorn": "^45.0.0", "glob": "^8.0.1", "jszip": "^3.1.5", "mocha": "^10.0.0", @@ -96,16 +96,16 @@ "replace-in-file": "^6.2.0", "request": "^2.88.0", "request-promise": "^4.2.2", - "rimraf": "^3.0.2", + "rimraf": "^4.0.4", "shelljs": "^0.8.4", - "sinon": "^14.0.0", + "sinon": "^15.0.0", "stream-browserify": "^3.0.0", "ts-loader": "^9.0.0", "ts-node": "^10.2.1", "tsconfig-paths": "^4.0.0", "tsconfig-paths-webpack-plugin": "^4.0.0", "typedoc": "^0.23.2", - "typescript": "4.9.3", + "typescript": "4.9.5", "unzipper": "^0.10.11", "webpack": "^5.28.0", "webpack-cli": "^5.0.0" diff --git a/src/export/formatter.ts b/src/export/formatter.ts index 60a372cdd5..26dc04eb09 100644 --- a/src/export/formatter.ts +++ b/src/export/formatter.ts @@ -2,7 +2,7 @@ import { BaseXmlComponent, IContext, IXmlableObject } from "@file/xml-components export class Formatter { // tslint:disable-next-line: no-object-literal-type-assertion - public format(input: BaseXmlComponent, context: IContext = {} as IContext): IXmlableObject { + public format(input: BaseXmlComponent, context: IContext = { stack: [] } as unknown as IContext): IXmlableObject { const output = input.prepForXml(context); if (output) { diff --git a/src/export/packer/next-compiler.ts b/src/export/packer/next-compiler.ts index 8fd5f68144..46f72139c5 100644 --- a/src/export/packer/next-compiler.ts +++ b/src/export/packer/next-compiler.ts @@ -74,6 +74,7 @@ export class Compiler { this.formatter.format(file.Document.View, { viewWrapper: file.Document, file, + stack: [], }), { indent: prettify, @@ -100,6 +101,7 @@ export class Compiler { this.formatter.format(file.Document.Relationships, { viewWrapper: file.Document, file, + stack: [], }), { indent: prettify, @@ -125,6 +127,7 @@ export class Compiler { this.formatter.format(file.Styles, { viewWrapper: file.Document, file, + stack: [], }), { indent: prettify, @@ -144,6 +147,7 @@ export class Compiler { this.formatter.format(file.CoreProperties, { viewWrapper: file.Document, file, + stack: [], }), { indent: prettify, @@ -160,6 +164,7 @@ export class Compiler { this.formatter.format(file.Numbering, { viewWrapper: file.Document, file, + stack: [], }), { indent: prettify, @@ -176,6 +181,7 @@ export class Compiler { this.formatter.format(file.FileRelationships, { viewWrapper: file.Document, file, + stack: [], }), { indent: prettify, @@ -191,6 +197,7 @@ export class Compiler { this.formatter.format(headerWrapper.View, { viewWrapper: headerWrapper, file, + stack: [], }), { indent: prettify, @@ -214,6 +221,7 @@ export class Compiler { this.formatter.format(headerWrapper.Relationships, { viewWrapper: headerWrapper, file, + stack: [], }), { indent: prettify, @@ -230,6 +238,7 @@ export class Compiler { this.formatter.format(footerWrapper.View, { viewWrapper: footerWrapper, file, + stack: [], }), { indent: prettify, @@ -253,6 +262,7 @@ export class Compiler { this.formatter.format(footerWrapper.Relationships, { viewWrapper: footerWrapper, file, + stack: [], }), { indent: prettify, @@ -269,6 +279,7 @@ export class Compiler { this.formatter.format(headerWrapper.View, { viewWrapper: headerWrapper, file, + stack: [], }), { indent: prettify, @@ -293,6 +304,7 @@ export class Compiler { this.formatter.format(footerWrapper.View, { viewWrapper: footerWrapper, file, + stack: [], }), { indent: prettify, @@ -317,6 +329,7 @@ export class Compiler { this.formatter.format(file.ContentTypes, { viewWrapper: file.Document, file, + stack: [], }), { indent: prettify, @@ -332,6 +345,7 @@ export class Compiler { this.formatter.format(file.CustomProperties, { viewWrapper: file.Document, file, + stack: [], }), { indent: prettify, @@ -348,6 +362,7 @@ export class Compiler { this.formatter.format(file.AppProperties, { viewWrapper: file.Document, file, + stack: [], }), { indent: prettify, @@ -363,7 +378,8 @@ export class Compiler { data: xml( this.formatter.format(file.FootNotes.View, { viewWrapper: file.FootNotes, - file: file, + file, + stack: [], }), { indent: prettify, @@ -378,7 +394,8 @@ export class Compiler { data: xml( this.formatter.format(file.FootNotes.Relationships, { viewWrapper: file.FootNotes, - file: file, + file, + stack: [], }), { indent: prettify, @@ -394,6 +411,7 @@ export class Compiler { this.formatter.format(file.Settings, { viewWrapper: file.Document, file, + stack: [], }), { indent: prettify, @@ -410,6 +428,7 @@ export class Compiler { this.formatter.format(file.Comments, { viewWrapper: file.Document, file, + stack: [], }), { indent: prettify, diff --git a/src/file/document/body/section-properties/properties/column.ts b/src/file/document/body/section-properties/properties/column.ts index b0b12d9c8e..b90606f436 100644 --- a/src/file/document/body/section-properties/properties/column.ts +++ b/src/file/document/body/section-properties/properties/column.ts @@ -1,25 +1,23 @@ -import { XmlAttributeComponent, XmlComponent } from "@file/xml-components"; -import { twipsMeasureValue } from "@util/values"; +import { NextAttributeComponent, XmlComponent } from "@file/xml-components"; +import { PositiveUniversalMeasure, twipsMeasureValue } from "@util/values"; -export interface IColumnAttributes { - readonly width: number | string; - readonly space?: number | string; -} +// +// +// +// -export class ColumnAttributes extends XmlAttributeComponent { - protected readonly xmlKeys = { - width: "w:w", - space: "w:space", - }; -} +type IColumnAttributes = { + readonly width: number | PositiveUniversalMeasure; + readonly space?: number | PositiveUniversalMeasure; +}; export class Column extends XmlComponent { public constructor({ width, space }: IColumnAttributes) { super("w:col"); this.root.push( - new ColumnAttributes({ - width: twipsMeasureValue(width), - space: space === undefined ? undefined : twipsMeasureValue(space), + new NextAttributeComponent({ + width: { key: "w:w", value: twipsMeasureValue(width) }, + space: { key: "w:space", value: space === undefined ? undefined : twipsMeasureValue(space) }, }), ); } diff --git a/src/file/document/body/section-properties/properties/columns.ts b/src/file/document/body/section-properties/properties/columns.ts index dc09e60462..8cf204d1a6 100644 --- a/src/file/document/body/section-properties/properties/columns.ts +++ b/src/file/document/body/section-properties/properties/columns.ts @@ -1,5 +1,5 @@ -import { XmlAttributeComponent, XmlComponent } from "@file/xml-components"; -import { decimalNumber, twipsMeasureValue } from "@util/values"; +import { NextAttributeComponent, XmlComponent } from "@file/xml-components"; +import { decimalNumber, PositiveUniversalMeasure, twipsMeasureValue } from "@util/values"; import { Column } from "./column"; @@ -12,32 +12,23 @@ import { Column } from "./column"; // // // -export interface IColumnsAttributes { - readonly space?: number | string; +export type IColumnsAttributes = { + readonly space?: number | PositiveUniversalMeasure; readonly count?: number; readonly separate?: boolean; readonly equalWidth?: boolean; readonly children?: readonly Column[]; -} - -export class ColumnsAttributes extends XmlAttributeComponent { - protected readonly xmlKeys = { - space: "w:space", - count: "w:num", - separate: "w:sep", - equalWidth: "w:equalWidth", - }; -} +}; export class Columns extends XmlComponent { public constructor({ space, count, separate, equalWidth, children }: IColumnsAttributes) { super("w:cols"); this.root.push( - new ColumnsAttributes({ - space: space === undefined ? undefined : twipsMeasureValue(space), - count: count === undefined ? undefined : decimalNumber(count), - separate, - equalWidth, + new NextAttributeComponent>({ + space: { key: "w:space", value: space === undefined ? undefined : twipsMeasureValue(space) }, + count: { key: "w:num", value: count === undefined ? undefined : decimalNumber(count) }, + separate: { key: "w:sep", value: separate }, + equalWidth: { key: "w:equalWidth", value: equalWidth }, }), ); diff --git a/src/file/document/body/section-properties/properties/line-number.ts b/src/file/document/body/section-properties/properties/line-number.ts index 4d0e622119..845c7b70e1 100644 --- a/src/file/document/body/section-properties/properties/line-number.ts +++ b/src/file/document/body/section-properties/properties/line-number.ts @@ -1,6 +1,6 @@ // http://officeopenxml.com/WPsectionLineNumbering.php -import { XmlAttributeComponent, XmlComponent } from "@file/xml-components"; -import { decimalNumber, twipsMeasureValue } from "@util/values"; +import { NextAttributeComponent, XmlComponent } from "@file/xml-components"; +import { decimalNumber, PositiveUniversalMeasure, twipsMeasureValue } from "@util/values"; // // @@ -26,27 +26,23 @@ export interface ILineNumberAttributes { readonly countBy?: number; readonly start?: number; readonly restart?: LineNumberRestartFormat; - readonly distance?: number | string; -} - -export class LineNumberAttributes extends XmlAttributeComponent { - protected readonly xmlKeys = { - countBy: "w:countBy", - start: "w:start", - restart: "w:restart", - distance: "w:distance", - }; + readonly distance?: number | PositiveUniversalMeasure; } export class LineNumberType extends XmlComponent { public constructor({ countBy, start, restart, distance }: ILineNumberAttributes) { super("w:lnNumType"); this.root.push( - new LineNumberAttributes({ - countBy: countBy === undefined ? undefined : decimalNumber(countBy), - start: start === undefined ? undefined : decimalNumber(start), - restart, - distance: distance === undefined ? undefined : twipsMeasureValue(distance), + new NextAttributeComponent<{ + readonly countBy?: number; + readonly start?: number; + readonly restart?: LineNumberRestartFormat; + readonly distance?: number | PositiveUniversalMeasure; + }>({ + countBy: { key: "w:countBy", value: countBy === undefined ? undefined : decimalNumber(countBy) }, + start: { key: "w:start", value: start === undefined ? undefined : decimalNumber(start) }, + restart: { key: "w:restart", value: restart }, + distance: { key: "w:distance", value: distance === undefined ? undefined : twipsMeasureValue(distance) }, }), ); } diff --git a/src/file/document/body/section-properties/properties/page-borders.ts b/src/file/document/body/section-properties/properties/page-borders.ts index 9477315838..894a805316 100644 --- a/src/file/document/body/section-properties/properties/page-borders.ts +++ b/src/file/document/body/section-properties/properties/page-borders.ts @@ -75,7 +75,7 @@ export class PageBorders extends IgnoreIfEmptyXmlComponent { super("w:pgBorders"); if (!options) { - return; + return this; } if (options.pageBorders) { diff --git a/src/file/document/body/section-properties/properties/page-margin.ts b/src/file/document/body/section-properties/properties/page-margin.ts index ed0044a417..5e905c0f73 100644 --- a/src/file/document/body/section-properties/properties/page-margin.ts +++ b/src/file/document/body/section-properties/properties/page-margin.ts @@ -1,5 +1,5 @@ -import { XmlAttributeComponent, XmlComponent } from "@file/xml-components"; -import { signedTwipsMeasureValue, twipsMeasureValue } from "@util/values"; +import { NextAttributeComponent, XmlComponent } from "@file/xml-components"; +import { PositiveUniversalMeasure, signedTwipsMeasureValue, twipsMeasureValue, UniversalMeasure } from "@util/values"; // // @@ -10,48 +10,36 @@ import { signedTwipsMeasureValue, twipsMeasureValue } from "@util/values"; // // // -export interface IPageMarginAttributes { - readonly top?: number | string; - readonly right?: number | string; - readonly bottom?: number | string; - readonly left?: number | string; - readonly header?: number | string; - readonly footer?: number | string; - readonly gutter?: number | string; -} - -export class PageMarginAttributes extends XmlAttributeComponent { - protected readonly xmlKeys = { - top: "w:top", - right: "w:right", - bottom: "w:bottom", - left: "w:left", - header: "w:header", - footer: "w:footer", - gutter: "w:gutter", - }; -} +export type IPageMarginAttributes = { + readonly top?: number | UniversalMeasure; + readonly right?: number | PositiveUniversalMeasure; + readonly bottom?: number | UniversalMeasure; + readonly left?: number | PositiveUniversalMeasure; + readonly header?: number | PositiveUniversalMeasure; + readonly footer?: number | PositiveUniversalMeasure; + readonly gutter?: number | PositiveUniversalMeasure; +}; export class PageMargin extends XmlComponent { public constructor( - top: number | string, - right: number | string, - bottom: number | string, - left: number | string, - header: number | string, - footer: number | string, - gutter: number | string, + top: number | UniversalMeasure, + right: number | PositiveUniversalMeasure, + bottom: number | UniversalMeasure, + left: number | PositiveUniversalMeasure, + header: number | PositiveUniversalMeasure, + footer: number | PositiveUniversalMeasure, + gutter: number | PositiveUniversalMeasure, ) { super("w:pgMar"); this.root.push( - new PageMarginAttributes({ - top: signedTwipsMeasureValue(top), - right: twipsMeasureValue(right), - bottom: signedTwipsMeasureValue(bottom), - left: twipsMeasureValue(left), - header: twipsMeasureValue(header), - footer: twipsMeasureValue(footer), - gutter: twipsMeasureValue(gutter), + new NextAttributeComponent({ + top: { key: "w:top", value: signedTwipsMeasureValue(top) }, + right: { key: "w:right", value: twipsMeasureValue(right) }, + bottom: { key: "w:bottom", value: signedTwipsMeasureValue(bottom) }, + left: { key: "w:left", value: twipsMeasureValue(left) }, + header: { key: "w:header", value: twipsMeasureValue(header) }, + footer: { key: "w:footer", value: twipsMeasureValue(footer) }, + gutter: { key: "w:gutter", value: twipsMeasureValue(gutter) }, }), ); } diff --git a/src/file/document/body/section-properties/properties/page-size.ts b/src/file/document/body/section-properties/properties/page-size.ts index c1e10c48c4..efc4ad404f 100644 --- a/src/file/document/body/section-properties/properties/page-size.ts +++ b/src/file/document/body/section-properties/properties/page-size.ts @@ -1,5 +1,5 @@ -import { XmlAttributeComponent, XmlComponent } from "@file/xml-components"; -import { twipsMeasureValue } from "@util/values"; +import { NextAttributeComponent, XmlComponent } from "@file/xml-components"; +import { PositiveUniversalMeasure, twipsMeasureValue } from "@util/values"; // // @@ -18,22 +18,14 @@ export enum PageOrientation { // // // -export interface IPageSizeAttributes { - readonly width?: number | string; - readonly height?: number | string; +export type IPageSizeAttributes = { + readonly width?: number | PositiveUniversalMeasure; + readonly height?: number | PositiveUniversalMeasure; readonly orientation?: PageOrientation; -} - -export class PageSizeAttributes extends XmlAttributeComponent { - protected readonly xmlKeys = { - width: "w:w", - height: "w:h", - orientation: "w:orient", - }; -} +}; export class PageSize extends XmlComponent { - public constructor(width: number | string, height: number | string, orientation: PageOrientation) { + public constructor(width: number | PositiveUniversalMeasure, height: number | PositiveUniversalMeasure, orientation: PageOrientation) { super("w:pgSz"); const flip = orientation === PageOrientation.LANDSCAPE; @@ -42,10 +34,10 @@ export class PageSize extends XmlComponent { const heightTwips = twipsMeasureValue(height); this.root.push( - new PageSizeAttributes({ - width: flip ? heightTwips : widthTwips, - height: flip ? widthTwips : heightTwips, - orientation: orientation, + new NextAttributeComponent({ + width: { key: "w:w", value: flip ? heightTwips : widthTwips }, + height: { key: "w:h", value: flip ? widthTwips : heightTwips }, + orientation: { key: "w:orient", value: orientation }, }), ); } diff --git a/src/file/document/body/section-properties/section-properties.ts b/src/file/document/body/section-properties/section-properties.ts index 5323b77c74..fbcdcf9f88 100644 --- a/src/file/document/body/section-properties/section-properties.ts +++ b/src/file/document/body/section-properties/section-properties.ts @@ -5,9 +5,9 @@ import { FooterWrapper } from "@file/footer-wrapper"; import { HeaderWrapper } from "@file/header-wrapper"; import { VerticalAlign, VerticalAlignElement } from "@file/vertical-align"; import { OnOffElement, XmlComponent } from "@file/xml-components"; +import { PositiveUniversalMeasure, UniversalMeasure } from "@util/values"; import { HeaderFooterReference, HeaderFooterReferenceType, HeaderFooterType } from "./properties/header-footer-reference"; - import { Columns, IColumnsAttributes } from "./properties/columns"; import { DocumentGrid, IDocGridAttributesProperties } from "./properties/doc-grid"; import { ILineNumberAttributes, LineNumberType } from "./properties/line-number"; @@ -76,10 +76,10 @@ export interface ISectionPropertiesOptions { // export const sectionMarginDefaults = { - TOP: "1in", - RIGHT: "1in", - BOTTOM: "1in", - LEFT: "1in", + TOP: "1in" as UniversalMeasure, + RIGHT: "1in" as PositiveUniversalMeasure, + BOTTOM: "1in" as UniversalMeasure, + LEFT: "1in" as PositiveUniversalMeasure, HEADER: 708, FOOTER: 708, GUTTER: 0, diff --git a/src/file/document/document.ts b/src/file/document/document.ts index 37e2f141eb..3af4aadf31 100644 --- a/src/file/document/document.ts +++ b/src/file/document/document.ts @@ -8,7 +8,7 @@ import { DocumentAttributes } from "./document-attributes"; import { DocumentBackground, IDocumentBackgroundOptions } from "./document-background"; export interface IDocumentOptions { - readonly background: IDocumentBackgroundOptions; + readonly background?: IDocumentBackgroundOptions; } // @@ -73,7 +73,9 @@ export class Document extends XmlComponent { }), ); this.body = new Body(); - this.root.push(new DocumentBackground(options.background)); + if (options.background) { + this.root.push(new DocumentBackground(options.background)); + } this.root.push(this.body); } diff --git a/src/file/drawing/doc-properties/doc-properties-children.spec.ts b/src/file/drawing/doc-properties/doc-properties-children.spec.ts new file mode 100644 index 0000000000..826c732b8b --- /dev/null +++ b/src/file/drawing/doc-properties/doc-properties-children.spec.ts @@ -0,0 +1,61 @@ +import { expect } from "chai"; + +import { Formatter } from "@export/formatter"; + +import { createHyperlinkClick, createHyperlinkHover } from "./doc-properties-children"; + +describe("Document Properties Children", () => { + describe("#createHyperlinkClick", () => { + it("should create a Hyperlink Click component", () => { + const tree = new Formatter().format(createHyperlinkClick("1", false)); + + expect(tree).to.deep.equal({ + "a:hlinkClick": { + _attr: { + "r:id": "rId1", + }, + }, + }); + }); + + it("should create a Hyperlink Click component with xmlns:a", () => { + const tree = new Formatter().format(createHyperlinkClick("1", true)); + + expect(tree).to.deep.equal({ + "a:hlinkClick": { + _attr: { + "r:id": "rId1", + "xmlns:a": "http://schemas.openxmlformats.org/drawingml/2006/main", + }, + }, + }); + }); + }); + + describe("#createHyperlinkHover", () => { + it("should create a Hyperlink Hover component", () => { + const tree = new Formatter().format(createHyperlinkHover("1", false)); + + expect(tree).to.deep.equal({ + "a:hlinkHover": { + _attr: { + "r:id": "rId1", + }, + }, + }); + }); + + it("should create a Hyperlink Hover component with xmlns:a", () => { + const tree = new Formatter().format(createHyperlinkHover("1", true)); + + expect(tree).to.deep.equal({ + "a:hlinkHover": { + _attr: { + "r:id": "rId1", + "xmlns:a": "http://schemas.openxmlformats.org/drawingml/2006/main", + }, + }, + }); + }); + }); +}); diff --git a/src/file/drawing/doc-properties/doc-properties-children.ts b/src/file/drawing/doc-properties/doc-properties-children.ts new file mode 100644 index 0000000000..0809f581e5 --- /dev/null +++ b/src/file/drawing/doc-properties/doc-properties-children.ts @@ -0,0 +1,57 @@ +// +// +// +// +// + +import { BuilderElement, XmlComponent } from "@file/xml-components"; + +// +// +// +// +// +// +// +// +// + +// TODO: Implement the rest of the attributes + +export const createHyperlinkClick = (linkId: string, hasXmlNs: boolean): XmlComponent => + new BuilderElement({ + name: "a:hlinkClick", + attributes: { + ...(hasXmlNs + ? { + xmlns: { + key: "xmlns:a", + value: "http://schemas.openxmlformats.org/drawingml/2006/main", + }, + } + : {}), + id: { + key: "r:id", + value: `rId${linkId}`, + }, + }, + }); + +export const createHyperlinkHover = (linkId: string, hasXmlNs: boolean): XmlComponent => + new BuilderElement({ + name: "a:hlinkHover", + attributes: { + ...(hasXmlNs + ? { + xmlns: { + key: "xmlns:a", + value: "http://schemas.openxmlformats.org/drawingml/2006/main", + }, + } + : {}), + id: { + key: "r:id", + value: `rId${linkId}`, + }, + }, + }); diff --git a/src/file/drawing/doc-properties/doc-properties.ts b/src/file/drawing/doc-properties/doc-properties.ts index 0724cd9513..ab5145cd5d 100644 --- a/src/file/drawing/doc-properties/doc-properties.ts +++ b/src/file/drawing/doc-properties/doc-properties.ts @@ -1,19 +1,22 @@ -import { XmlAttributeComponent, XmlComponent } from "@file/xml-components"; +// https://c-rex.net/projects/samples/ooxml/e1/Part4/OOXML_P4_DOCX_docPr_topic_ID0ES32OB.html +import { IContext, IXmlableObject, NextAttributeComponent, XmlComponent } from "@file/xml-components"; +import { ConcreteHyperlink } from "@file/paragraph"; + import { uniqueNumericId } from "@util/convenience-functions"; -class DocPropertiesAttributes extends XmlAttributeComponent<{ - readonly id?: number; - readonly name?: string; - readonly description?: string; - readonly title?: string; -}> { - protected readonly xmlKeys = { - id: "id", - name: "name", - description: "descr", - title: "title", - }; -} +import { createHyperlinkClick } from "./doc-properties-children"; + +// +// +// +// +// +// +// +// +// +// +// export interface DocPropertiesOptions { readonly name: string; @@ -26,12 +29,39 @@ export class DocProperties extends XmlComponent { super("wp:docPr"); this.root.push( - new DocPropertiesAttributes({ - id: uniqueNumericId(), - name, - description, - title, + new NextAttributeComponent({ + id: { + key: "id", + value: uniqueNumericId(), + }, + name: { + key: "name", + value: name, + }, + description: { + key: "descr", + value: description, + }, + title: { + key: "title", + value: title, + }, }), ); } + + public prepForXml(context: IContext): IXmlableObject | undefined { + for (let i = context.stack.length - 1; i >= 0; i--) { + const element = context.stack[i]; + if (!(element instanceof ConcreteHyperlink)) { + continue; + } + + this.root.push(createHyperlinkClick(element.linkId, true)); + + break; + } + + return super.prepForXml(context); + } } diff --git a/src/file/drawing/drawing.spec.ts b/src/file/drawing/drawing.spec.ts index 4b01e84a81..d445a01055 100644 --- a/src/file/drawing/drawing.spec.ts +++ b/src/file/drawing/drawing.spec.ts @@ -1,9 +1,11 @@ import { expect } from "chai"; import { SinonStub, stub } from "sinon"; +import { IContext } from "@file/xml-components"; import { Formatter } from "@export/formatter"; import * as convenienceFunctions from "@util/convenience-functions"; +import { ConcreteHyperlink, TextRun } from "../"; import { Drawing, IDrawingOptions } from "./drawing"; const imageBase64Data = `iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAACzVBMVEUAAAAAAAAAAAAAAAA/AD8zMzMqKiokJCQfHx8cHBwZGRkuFxcqFSonJyckJCQiIiIfHx8eHh4cHBwoGhomGSYkJCQhISEfHx8eHh4nHR0lHBwkGyQjIyMiIiIgICAfHx8mHh4lHh4kHR0jHCMiGyIhISEgICAfHx8lHx8kHh4jHR0hHCEhISEgICAlHx8kHx8jHh4jHh4iHSIhHCEhISElICAkHx8jHx8jHh4iHh4iHSIhHSElICAkICAjHx8jHx8iHh4iHh4hHiEhHSEkICAjHx8iHx8iHx8hHh4hHiEkHSEjHSAjHx8iHx8iHx8hHh4kHiEkHiEjHSAiHx8hHx8hHh4kHiEjHiAjHSAiHx8iHx8hHx8kHh4jHiEjHiAjHiAiICAiHx8kHx8jHh4jHiEjHiAiHiAiHSAiHx8jHx8jHx8jHiAiHiAiHiAiHSAiHx8jHx8jHx8iHiAiHiAiHiAjHx8jHx8jHx8jHx8iHiAiHiAiHiAjHx8jHx8jHx8iHx8iHSAiHiAjHiAjHx8jHx8hHx8iHx8iHyAiHiAjHiAjHiAjHh4hHx8iHx8iHx8iHyAjHSAjHiAjHiAjHh4hHx8iHx8iHx8jHyAjHiAhHh4iHx8iHx8jHyAjHSAjHSAhHiAhHh4iHx8iHx8jHx8jHyAjHSAjHSAiHh4iHh4jHx8jHx8jHyAjHyAhHSAhHSAiHh4iHh4jHx8jHx8jHyAhHyAhHSAiHSAiHh4jHh4jHx8jHx8jHyAhHyAhHSAiHSAjHR4jHh4jHx8jHx8hHyAhHyAiHSAjHSAjHR4jHh4jHx8hHx8hHyAhHyAiHyAjHSAjHR4jHR4hHh4hHx8hHyAiHyAjHyAjHSAjHR4jHR4hHh4hHx8hHyAjHyAjHyAjHSAjHR4hHR4hHR4hHx8iHyAjHyAjHyAjHSAhHR4hHR4hHR4hHx8jHyAjHyAjHyAjHyC9S2xeAAAA7nRSTlMAAQIDBAUGBwgJCgsMDQ4PEBESExQVFxgZGhscHR4fICEiIyQlJicoKSorLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZISUpLTE1OUFFSU1RVVllaW1xdXmBhYmNkZWZnaGprbG1ub3Byc3R1dnd4eXp8fn+AgYKDhIWGiImKi4yNj5CRkpOUlZaXmJmam5ydnp+goaKjpKaoqqusra6vsLGys7S1tri5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+fkZpVQAABcBJREFUGBntwftjlQMcBvDnnLNL22qzJjWlKLHFVogyty3SiFq6EZliqZGyhnSxsLlMRahYoZKRFcul5dKFCatYqWZaNKvWtrPz/A2+7/b27qRzec/lPfvl/XxgMplMJpPJZDKZAtA9HJ3ppnIez0KnSdtC0RCNznHdJrbrh85wdSlVVRaEXuoGamYi5K5430HNiTiEWHKJg05eRWgNfKeV7RxbqUhGKPV/207VupQ8is0IoX5vtFC18SqEHaK4GyHTZ2kzVR8PBTCO4oANIZL4ShNVZcOhKKeYg9DoWdhI1ec3os2VFI0JCIUez5+i6st0qJZRrEAIJCw+QdW223BG/EmKwTBc/IJ/qfp2FDrkUnwFo8U9dZyqnaPhxLqfYjyM1S3vb6p+GGOBszsojoTDSDFz6qj66R4LzvYJxVMwUNRjf1H1ywQr/megg2RzLximy8waqvbda8M5iijegVEiHjlM1W/3h+FcXesphsMY4dMOUnUgOxyuPEzxPQwRNvV3qg5Nj4BreyimwADWe/dRVTMjEm6MoGLzGwtystL6RyOY3qSqdlYU3FpLZw1VW0sK5943MvUCKwJ1noNtjs6Ohge76Zq9ZkfpigU5WWkDYuCfbs1U5HWFR8/Qq4a9W0uK5k4ZmdrTCl8spGIePLPlbqqsc1Afe83O0hULc8alDYiBd7ZyitYMeBfR55rR2fOKP6ioPk2dGvZ+UVI0d8rtqT2tcCexlqK2F3wRn5Q+YVbBqrLKOupkr9lZujAOrmS0UpTb4JeIPkNHZ+cXr6uoPk2vyuBSPhWLEKj45PQJuQWryyqP0Z14uGLdROHIRNBEXDR09EP5r62rOHCazhrD4VKPwxTH+sIA3ZPTJ+YuWV22n+IruHFDC8X2CBjnPoolcGc2FYUwzmsUWXDHsoGKLBhmN0VvuBVfTVE/AAbpaid5CB4MbaLY1QXGuIViLTyZQcVyGGMuxWPwaA0Vk2GI9RRp8Ci2iuLkIBjhT5LNUfAspZFiTwyC72KK7+DNg1SsRvCNp3gZXq2k4iEEXSHFJHgVXUlxejCCbTvFAHiXdIJiXxyCK7KJ5FHoMZGK9xBcwyg2QpdlVMxEUM2iyIMuXXZQNF+HswxMsSAAJRQjoE//eoqDCXBSTO6f1xd+O0iyNRY6jaWi1ALNYCocZROj4JdEikroVkjFk9DcStXxpdfCD2MoXodu4RUU9ptxxmXssOfxnvDVcxRTod9FxyhqLoAqis5aPhwTDp9spRgEH2Q6KLbYoKqlaKTm6Isp0C/sJMnjFvhiERXPQvUNRe9p29lhR04CdBpC8Sl8YiuncIxEuzUUg4Dkgj+paVozygY9plPMh28SaymO9kabAopREGF3vt9MzeFFl8G7lRSZ8FFGK8XX4VA8QjEd7XrM3M0OXz8YCy+qKBLgq3wqnofiTorF0Ax56Rg1J1elW+BBAsVe+My6iYq7IK6keBdOIseV2qn5Pb8f3MqkWAXf9ThM8c8lAOIotuFsF875lRrH5klRcG0+xcPwQ1oLxfeRAP4heQTnGL78X2rqlw2DK59SXAV/zKaiGMAuko5InCt68mcOan5+ohf+z1pP8lQY/GHZQMV4YD3FpXDp4qerqbF/lBWBswyi+AL+ia+maLgcRRQj4IYlY/UpauqKBsPJAxQF8NM1TRQ/RudSPAD34rK3scOuR8/HGcspxsJfOVS8NZbiGXiUtPgINU3v3WFDmx8pEuG3EiqKKVbCC1vm2iZqap5LAtCtleQf8F9sFYWDohzeJczYyQ4V2bEZFGsQgJRGqqqhS2phHTWn9lDkIhBTqWqxQZ+IsRvtdHY9AvI2VX2hW68nfqGmuQsCEl3JdjfCF8OW1bPdtwhQ0gm2mQzfRE3a7KCYj0BNZJs8+Kxf/r6WtTEI2FIqlsMfFgRB5A6KUnSe/vUkX0AnuvUIt8SjM1m6wWQymUwmk8lkMgXRf5vi8rLQxtUhAAAAAElFTkSuQmCC`; @@ -450,5 +452,257 @@ describe("Drawing", () => { ], }); }); + + it("should create a drawing with a hyperlink", () => { + currentBreak = createDrawing({ + floating: { + horizontalPosition: { + offset: 0, + }, + verticalPosition: { + offset: 0, + }, + }, + }); + const tree = new Formatter().format(currentBreak, { + stack: [new ConcreteHyperlink([new TextRun("Test")], "1")], + } as unknown as IContext); + expect(tree).to.deep.equal({ + "w:drawing": [ + { + "wp:anchor": [ + { + _attr: { + allowOverlap: "1", + behindDoc: "0", + distB: 0, + distL: 0, + distR: 0, + distT: 0, + layoutInCell: "1", + locked: "0", + relativeHeight: 952500, + simplePos: "0", + }, + }, + { + "wp:simplePos": { + _attr: { + x: 0, + y: 0, + }, + }, + }, + { + "wp:positionH": [ + { + _attr: { + relativeFrom: "page", + }, + }, + { + "wp:posOffset": ["0"], + }, + ], + }, + { + "wp:positionV": [ + { + _attr: { + relativeFrom: "page", + }, + }, + { + "wp:posOffset": ["0"], + }, + ], + }, + { + "wp:extent": { + _attr: { + cx: 952500, + cy: 952500, + }, + }, + }, + { + "wp:effectExtent": { + _attr: { + b: 0, + l: 0, + r: 0, + t: 0, + }, + }, + }, + { + "wp:wrapNone": {}, + }, + { + "wp:docPr": [ + { + _attr: { + descr: "", + id: 0, + name: "", + title: "", + }, + }, + { + "a:hlinkClick": { + _attr: { + "r:id": "rId1", + "xmlns:a": "http://schemas.openxmlformats.org/drawingml/2006/main", + }, + }, + }, + ], + }, + { + "wp:cNvGraphicFramePr": [ + { + "a:graphicFrameLocks": { + _attr: { + // tslint:disable-next-line:object-literal-key-quotes + noChangeAspect: 1, + "xmlns:a": "http://schemas.openxmlformats.org/drawingml/2006/main", + }, + }, + }, + ], + }, + { + "a:graphic": [ + { + _attr: { + "xmlns:a": "http://schemas.openxmlformats.org/drawingml/2006/main", + }, + }, + { + "a:graphicData": [ + { + _attr: { + uri: "http://schemas.openxmlformats.org/drawingml/2006/picture", + }, + }, + { + "pic:pic": [ + { + _attr: { + "xmlns:pic": "http://schemas.openxmlformats.org/drawingml/2006/picture", + }, + }, + { + "pic:nvPicPr": [ + { + "pic:cNvPr": [ + { + _attr: { + descr: "", + id: 0, + name: "", + }, + }, + { + "a:hlinkClick": { + _attr: { + "r:id": "rId1", + }, + }, + }, + ], + }, + { + "pic:cNvPicPr": [ + { + "a:picLocks": { + _attr: { + noChangeArrowheads: 1, + noChangeAspect: 1, + }, + }, + }, + ], + }, + ], + }, + { + "pic:blipFill": [ + { + "a:blip": { + _attr: { + // tslint:disable-next-line:object-literal-key-quotes + cstate: "none", + "r:embed": "rId{test.jpg}", + }, + }, + }, + { + "a:srcRect": {}, + }, + { + "a:stretch": [ + { + "a:fillRect": {}, + }, + ], + }, + ], + }, + { + "pic:spPr": [ + { + _attr: { + bwMode: "auto", + }, + }, + { + "a:xfrm": [ + { + _attr: {}, + }, + { + "a:off": { + _attr: { + x: 0, + y: 0, + }, + }, + }, + { + "a:ext": { + _attr: { + cx: 952500, + cy: 952500, + }, + }, + }, + ], + }, + { + "a:prstGeom": [ + { + _attr: { + prst: "rect", + }, + }, + { + "a:avLst": {}, + }, + ], + }, + ], + }, + ], + }, + ], + }, + ], + }, + ], + }, + ], + }); + }); }); }); diff --git a/src/file/drawing/inline/graphic/graphic-data/pic/non-visual-pic-properties/non-visual-properties/non-visual-properties.ts b/src/file/drawing/inline/graphic/graphic-data/pic/non-visual-pic-properties/non-visual-properties/non-visual-properties.ts index 0b2b5a249c..31842356c0 100644 --- a/src/file/drawing/inline/graphic/graphic-data/pic/non-visual-pic-properties/non-visual-properties/non-visual-properties.ts +++ b/src/file/drawing/inline/graphic/graphic-data/pic/non-visual-pic-properties/non-visual-properties/non-visual-properties.ts @@ -1,6 +1,21 @@ -import { XmlComponent } from "@file/xml-components"; +import { IContext, IXmlableObject, XmlComponent } from "@file/xml-components"; +import { createHyperlinkClick } from "@file/drawing/doc-properties/doc-properties-children"; +import { ConcreteHyperlink } from "@file/paragraph"; + import { NonVisualPropertiesAttributes } from "./non-visual-properties-attributes"; +// +// +// +// +// +// +// +// +// +// +// + export class NonVisualProperties extends XmlComponent { public constructor() { super("pic:cNvPr"); @@ -13,4 +28,19 @@ export class NonVisualProperties extends XmlComponent { }), ); } + + public prepForXml(context: IContext): IXmlableObject | undefined { + for (let i = context.stack.length - 1; i >= 0; i--) { + const element = context.stack[i]; + if (!(element instanceof ConcreteHyperlink)) { + continue; + } + + this.root.push(createHyperlinkClick(element.linkId, false)); + + break; + } + + return super.prepForXml(context); + } } diff --git a/src/file/file-child.ts b/src/file/file-child.ts new file mode 100644 index 0000000000..005be22641 --- /dev/null +++ b/src/file/file-child.ts @@ -0,0 +1,5 @@ +import { XmlComponent } from "@file/xml-components"; + +export class FileChild extends XmlComponent { + public readonly fileChild = Symbol(); +} diff --git a/src/file/file.ts b/src/file/file.ts index 383babc378..1fa9da3c9c 100644 --- a/src/file/file.ts +++ b/src/file/file.ts @@ -11,15 +11,13 @@ import { Footer, Header } from "./header"; import { HeaderWrapper, IDocumentHeader } from "./header-wrapper"; import { Media } from "./media"; import { Numbering } from "./numbering"; -import { Paragraph } from "./paragraph"; import { Comments } from "./paragraph/run/comment-run"; import { Relationships } from "./relationships"; import { Settings } from "./settings"; import { Styles } from "./styles"; import { ExternalStylesFactory } from "./styles/external-styles-factory"; import { DefaultStylesFactory } from "./styles/factory"; -import { Table } from "./table"; -import { TableOfContents } from "./table-of-contents"; +import { FileChild } from "./file-child"; export interface ISectionOptions { readonly headers?: { @@ -33,7 +31,7 @@ export interface ISectionOptions { readonly even?: Footer; }; readonly properties?: ISectionPropertiesOptions; - readonly children: readonly (Paragraph | Table | TableOfContents)[]; + readonly children: readonly FileChild[]; } export class File { @@ -73,7 +71,7 @@ export class File { this.appProperties = new AppProperties(); this.footnotesWrapper = new FootnotesWrapper(); this.contentTypes = new ContentTypes(); - this.documentWrapper = new DocumentWrapper({ background: options.background || {} }); + this.documentWrapper = new DocumentWrapper({ background: options.background }); this.settings = new Settings({ compatibilityModeVersion: options.compatabilityModeVersion, compatibility: options.compatibility, diff --git a/src/file/numbering/concrete-numbering.spec.ts b/src/file/numbering/concrete-numbering.spec.ts index ef73d18983..1239a2b4fc 100644 --- a/src/file/numbering/concrete-numbering.spec.ts +++ b/src/file/numbering/concrete-numbering.spec.ts @@ -12,9 +12,11 @@ describe("ConcreteNumbering", () => { abstractNumId: 1, reference: "1", instance: 0, - overrideLevel: { - num: 3, - }, + overrideLevels: [ + { + num: 3, + }, + ], }); const tree = new Formatter().format(concreteNumbering); @@ -44,16 +46,61 @@ describe("ConcreteNumbering", () => { }); }); + it("sets a new override level for two different level numbers", () => { + const concreteNumbering = new ConcreteNumbering({ + numId: 0, + abstractNumId: 1, + reference: "1", + instance: 0, + overrideLevels: [{ num: 3 }, { num: 5 }], + }); + + const tree = new Formatter().format(concreteNumbering); + + expect(tree).to.deep.equal({ + "w:num": [ + { + _attr: { + "w:numId": 0, + }, + }, + { + "w:abstractNumId": { + _attr: { + "w:val": 1, + }, + }, + }, + { + "w:lvlOverride": { + _attr: { + "w:ilvl": 3, + }, + }, + }, + { + "w:lvlOverride": { + _attr: { + "w:ilvl": 5, + }, + }, + }, + ], + }); + }); + it("sets the startOverride element if start is given", () => { const concreteNumbering = new ConcreteNumbering({ numId: 0, abstractNumId: 1, reference: "1", instance: 0, - overrideLevel: { - num: 1, - start: 9, - }, + overrideLevels: [ + { + num: 1, + start: 9, + }, + ], }); const tree = new Formatter().format(concreteNumbering); expect(tree).to.deep.equal({ @@ -90,15 +137,143 @@ describe("ConcreteNumbering", () => { }); }); + it("sets the startOverride element for several levels if start is given", () => { + const concreteNumbering = new ConcreteNumbering({ + numId: 0, + abstractNumId: 1, + reference: "1", + instance: 0, + overrideLevels: [ + { + num: 1, + start: 9, + }, + { + num: 3, + start: 10, + }, + ], + }); + const tree = new Formatter().format(concreteNumbering); + expect(tree).to.deep.equal({ + "w:num": [ + { + _attr: { + "w:numId": 0, + }, + }, + { + "w:abstractNumId": { + _attr: { + "w:val": 1, + }, + }, + }, + { + "w:lvlOverride": [ + { + _attr: { + "w:ilvl": 1, + }, + }, + { + "w:startOverride": { + _attr: { + "w:val": 9, + }, + }, + }, + ], + }, + { + "w:lvlOverride": [ + { + _attr: { + "w:ilvl": 3, + }, + }, + { + "w:startOverride": { + _attr: { + "w:val": 10, + }, + }, + }, + ], + }, + ], + }); + }); + + it("Mix of overrideLevels with start and without", () => { + const concreteNumbering = new ConcreteNumbering({ + numId: 0, + abstractNumId: 1, + reference: "1", + instance: 0, + overrideLevels: [ + { + num: 1, + start: 9, + }, + { + num: 3, + }, + ], + }); + const tree = new Formatter().format(concreteNumbering); + expect(tree).to.deep.equal({ + "w:num": [ + { + _attr: { + "w:numId": 0, + }, + }, + { + "w:abstractNumId": { + _attr: { + "w:val": 1, + }, + }, + }, + { + "w:lvlOverride": [ + { + _attr: { + "w:ilvl": 1, + }, + }, + { + "w:startOverride": { + _attr: { + "w:val": 9, + }, + }, + }, + ], + }, + { + "w:lvlOverride": { + _attr: { + "w:ilvl": 3, + }, + }, + }, + ], + }); + }); + it("sets the lvl element if overrideLevel.Level is accessed", () => { const concreteNumbering = new ConcreteNumbering({ numId: 0, abstractNumId: 1, reference: "1", instance: 0, - overrideLevel: { - num: 1, - }, + overrideLevels: [ + { + num: 1, + }, + ], }); const tree = new Formatter().format(concreteNumbering); expect(tree).to.deep.equal({ diff --git a/src/file/numbering/level.ts b/src/file/numbering/level.ts index 0bf575ada1..e053c6c79b 100644 --- a/src/file/numbering/level.ts +++ b/src/file/numbering/level.ts @@ -1,4 +1,5 @@ // http://officeopenxml.com/WPnumbering-numFmt.php +// http://www.datypic.com/sc/ooxml/a-w_val-57.html import { Attributes, NumberValueElement, XmlAttributeComponent, XmlComponent } from "@file/xml-components"; import { decimalNumber } from "@util/values"; @@ -6,21 +7,138 @@ import { AlignmentType } from "../paragraph/formatting"; import { ILevelParagraphStylePropertiesOptions, ParagraphProperties } from "../paragraph/properties"; import { IRunStylePropertiesOptions, RunProperties } from "../paragraph/run/properties"; +// TODO: Breaking change - consolidate with number-format +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// export enum LevelFormat { - BULLET = "bullet", - CARDINAL_TEXT = "cardinalText", - CHICAGO = "chicago", DECIMAL = "decimal", + UPPER_ROMAN = "upperRoman", + LOWER_ROMAN = "lowerRoman", + UPPER_LETTER = "upperLetter", + LOWER_LETTER = "lowerLetter", + ORDINAL = "ordinal", + CARDINAL_TEXT = "cardinalText", + ORDINAL_TEXT = "ordinalText", + HEX = "hex", + CHICAGO = "chicago", + IDEOGRAPH__DIGITAL = "ideographDigital", + JAPANESE_COUNTING = "japaneseCounting", + AIUEO = "aiueo", + IROHA = "iroha", + DECIMAL_FULL_WIDTH = "decimalFullWidth", + DECIMAL_HALF_WIDTH = "decimalHalfWidth", + JAPANESE_LEGAL = "japaneseLegal", + JAPANESE_DIGITAL_TEN_THOUSAND = "japaneseDigitalTenThousand", DECIMAL_ENCLOSED_CIRCLE = "decimalEnclosedCircle", + DECIMAL_FULL_WIDTH2 = "decimalFullWidth2", + AIUEO_FULL_WIDTH = "aiueoFullWidth", + IROHA_FULL_WIDTH = "irohaFullWidth", + DECIMAL_ZERO = "decimalZero", + BULLET = "bullet", + GANADA = "ganada", + CHOSUNG = "chosung", DECIMAL_ENCLOSED_FULLSTOP = "decimalEnclosedFullstop", DECIMAL_ENCLOSED_PARENTHESES = "decimalEnclosedParen", - DECIMAL_ZERO = "decimalZero", - LOWER_LETTER = "lowerLetter", - LOWER_ROMAN = "lowerRoman", + DECIMAL_ENCLOSED_CIRCLE_CHINESE = "decimalEnclosedCircleChinese", + IDEOGRAPH_ENCLOSED_CIRCLE = "ideographEnclosedCircle", + IDEOGRAPH_TRADITIONAL = "ideographTraditional", + IDEOGRAPH_ZODIAC = "ideographZodiac", + IDEOGRAPH_ZODIAC_TRADITIONAL = "ideographZodiacTraditional", + TAIWANESE_COUNTING = "taiwaneseCounting", + IDEOGRAPH_LEGAL_TRADITIONAL = "ideographLegalTraditional", + TAIWANESE_COUNTING_THOUSAND = "taiwaneseCountingThousand", + TAIWANESE_DIGITAL = "taiwaneseDigital", + CHINESE_COUNTING = "chineseCounting", + CHINESE_LEGAL_SIMPLIFIED = "chineseLegalSimplified", + CHINESE_COUNTING_THOUSAND = "chineseCountingThousand", + KOREAN_DIGITAL = "koreanDigital", + KOREAN_COUNTING = "koreanCounting", + KOREAN_LEGAL = "koreanLegal", + KOREAN_DIGITAL2 = "koreanDigital2", + VIETNAMESE_COUNTING = "vietnameseCounting", + RUSSIAN_LOWER = "russianLower", + RUSSIAN_UPPER = "russianUpper", NONE = "none", - ORDINAL_TEXT = "ordinalText", - UPPER_LETTER = "upperLetter", - UPPER_ROMAN = "upperRoman", + NUMBER_IN_DASH = "numberInDash", + HEBREW1 = "hebrew1", + HEBREW2 = "hebrew2", + ARABIC_ALPHA = "arabicAlpha", + ARABIC_ABJAD = "arabicAbjad", + HINDI_VOWELS = "hindiVowels", + HINDI_CONSONANTS = "hindiConsonants", + HINDI_NUMBERS = "hindiNumbers", + HINDI_COUNTING = "hindiCounting", + THAI_LETTERS = "thaiLetters", + THAI_NUMBERS = "thaiNumbers", + THAI_COUNTING = "thaiCounting", + BAHT_TEXT = "bahtText", + DOLLAR_TEXT = "dollarText", + CUSTOM = "custom", } class LevelAttributes extends XmlAttributeComponent<{ diff --git a/src/file/numbering/num.ts b/src/file/numbering/num.ts index 983544b447..597f7530d1 100644 --- a/src/file/numbering/num.ts +++ b/src/file/numbering/num.ts @@ -18,15 +18,17 @@ class NumAttributes extends XmlAttributeComponent<{ protected readonly xmlKeys = { numId: "w:numId" }; } +interface IOverrideLevel { + readonly num: number; + readonly start?: number; +} + export interface IConcreteNumberingOptions { readonly numId: number; readonly abstractNumId: number; readonly reference: string; readonly instance: number; - readonly overrideLevel?: { - readonly num: number; - readonly start?: number; - }; + readonly overrideLevels?: readonly IOverrideLevel[]; } // @@ -60,8 +62,10 @@ export class ConcreteNumbering extends XmlComponent { this.root.push(new AbstractNumId(decimalNumber(options.abstractNumId))); - if (options.overrideLevel) { - this.root.push(new LevelOverride(options.overrideLevel.num, options.overrideLevel.start)); + if (options.overrideLevels && options.overrideLevels.length) { + for (const level of options.overrideLevels) { + this.root.push(new LevelOverride(level.num, level.start)); + } } } } diff --git a/src/file/numbering/numbering.ts b/src/file/numbering/numbering.ts index 233fbeb95a..b52d6ba56c 100644 --- a/src/file/numbering/numbering.ts +++ b/src/file/numbering/numbering.ts @@ -164,10 +164,12 @@ export class Numbering extends XmlComponent { abstractNumId: abstractNumbering.id, reference: "default-bullet-numbering", instance: 0, - overrideLevel: { - num: 0, - start: 1, - }, + overrideLevels: [ + { + num: 0, + start: 1, + }, + ], }), ); diff --git a/src/file/paragraph/formatting/indent.ts b/src/file/paragraph/formatting/indent.ts index daa5d2925e..059cf9c2a9 100644 --- a/src/file/paragraph/formatting/indent.ts +++ b/src/file/paragraph/formatting/indent.ts @@ -1,39 +1,14 @@ // http://officeopenxml.com/WPindentation.php -import { XmlAttributeComponent, XmlComponent } from "@file/xml-components"; -import { signedTwipsMeasureValue, twipsMeasureValue } from "@util/values"; +import { NextAttributeComponent, XmlComponent } from "@file/xml-components"; +import { PositiveUniversalMeasure, signedTwipsMeasureValue, twipsMeasureValue, UniversalMeasure } from "@util/values"; export interface IIndentAttributesProperties { - readonly start?: number | string; - readonly end?: number | string; - readonly left?: number | string; - readonly right?: number | string; - readonly hanging?: number | string; - readonly firstLine?: number | string; -} - -// -// -// -// -// -// -// -// -// -// -// -// -// -// -class IndentAttributes extends XmlAttributeComponent { - protected readonly xmlKeys = { - start: "w:start", - end: "w:end", - left: "w:left", - right: "w:right", - hanging: "w:hanging", - firstLine: "w:firstLine", - }; + readonly start?: number | UniversalMeasure; + readonly end?: number | UniversalMeasure; + readonly left?: number | UniversalMeasure; + readonly right?: number | UniversalMeasure; + readonly hanging?: number | PositiveUniversalMeasure; + readonly firstLine?: number | PositiveUniversalMeasure; } // @@ -43,14 +18,53 @@ class IndentAttributes extends XmlAttributeComponent + // + // + // + // + // + // + // + // + // + // + // + // + // this.root.push( - new IndentAttributes({ - start: start === undefined ? undefined : signedTwipsMeasureValue(start), - end: end === undefined ? undefined : signedTwipsMeasureValue(end), - left: left === undefined ? undefined : signedTwipsMeasureValue(left), - right: right === undefined ? undefined : signedTwipsMeasureValue(right), - hanging: hanging === undefined ? undefined : twipsMeasureValue(hanging), - firstLine: firstLine === undefined ? undefined : twipsMeasureValue(firstLine), + new NextAttributeComponent<{ + readonly start?: number | UniversalMeasure; + readonly end?: number | UniversalMeasure; + readonly left?: number | UniversalMeasure; + readonly right?: number | UniversalMeasure; + readonly hanging?: number | PositiveUniversalMeasure; + readonly firstLine?: number | PositiveUniversalMeasure; + }>({ + start: { + key: "w:start", + value: start === undefined ? undefined : signedTwipsMeasureValue(start), + }, + end: { + key: "w:end", + value: end === undefined ? undefined : signedTwipsMeasureValue(end), + }, + left: { + key: "w:left", + value: left === undefined ? undefined : signedTwipsMeasureValue(left), + }, + right: { + key: "w:right", + value: right === undefined ? undefined : signedTwipsMeasureValue(right), + }, + hanging: { + key: "w:hanging", + value: hanging === undefined ? undefined : twipsMeasureValue(hanging), + }, + firstLine: { + key: "w:firstLine", + value: firstLine === undefined ? undefined : twipsMeasureValue(firstLine), + }, }), ); } diff --git a/src/file/paragraph/paragraph.spec.ts b/src/file/paragraph/paragraph.spec.ts index c8b4135288..b74359de86 100644 --- a/src/file/paragraph/paragraph.spec.ts +++ b/src/file/paragraph/paragraph.spec.ts @@ -954,6 +954,7 @@ describe("Paragraph", () => { paragraph.prepForXml({ viewWrapper: viewWrapperMock, file: file, + stack: [], }); const tree = new Formatter().format(paragraph); expect(tree).to.deep.equal({ diff --git a/src/file/paragraph/paragraph.ts b/src/file/paragraph/paragraph.ts index 6d8074ffa8..a12b88df6a 100644 --- a/src/file/paragraph/paragraph.ts +++ b/src/file/paragraph/paragraph.ts @@ -1,7 +1,8 @@ // http://officeopenxml.com/WPparagraph.php import { FootnoteReferenceRun } from "@file/footnotes"; -import { IContext, IXmlableObject, XmlComponent } from "@file/xml-components"; +import { IContext, IXmlableObject } from "@file/xml-components"; import { uniqueId } from "@util/convenience-functions"; +import { FileChild } from "@file/file-child"; import { TargetModeType } from "../relationships/relationship/relationship"; import { DeletedTextRun, InsertedTextRun } from "../track-revision"; @@ -39,7 +40,7 @@ export interface IParagraphOptions extends IParagraphPropertiesOptions { readonly children?: readonly ParagraphChild[]; } -export class Paragraph extends XmlComponent { +export class Paragraph extends FileChild { private readonly properties: ParagraphProperties; public constructor(options: string | IParagraphOptions) { diff --git a/src/file/paragraph/properties.spec.ts b/src/file/paragraph/properties.spec.ts index 0890d65f5b..4c4fe41d5b 100644 --- a/src/file/paragraph/properties.spec.ts +++ b/src/file/paragraph/properties.spec.ts @@ -31,6 +31,7 @@ describe("ParagraphProperties", () => { } as File, // tslint:disable-next-line: no-object-literal-type-assertion viewWrapper: new DocumentWrapper({ background: {} }), + stack: [], }); expect(tree).to.deep.equal({ diff --git a/src/file/paragraph/run/comment-run.spec.ts b/src/file/paragraph/run/comment-run.spec.ts index 1900f31c03..62d3a624b8 100644 --- a/src/file/paragraph/run/comment-run.spec.ts +++ b/src/file/paragraph/run/comment-run.spec.ts @@ -44,7 +44,7 @@ describe("Comment", () => { let clock: sinon.SinonFakeTimers; beforeEach(() => { - const now = new Date(1999, 0, 1); + const now = new Date("1999-01-01T00:00:00.000Z"); clock = sinon.useFakeTimers(now.getTime()); }); @@ -57,7 +57,7 @@ describe("Comment", () => { const component = new Comment({ id: 0, text: "test-comment", - date: new Date(1999, 0, 1), + date: new Date("1999-01-01T00:00:00.000Z"), }); const tree = new Formatter().format(component); expect(tree).to.deep.equal({ @@ -126,12 +126,12 @@ describe("Comments", () => { { id: 0, text: "test-comment", - date: new Date(1999, 0, 1), + date: new Date("1999-01-01T00:00:00.000Z"), }, { id: 1, text: "test-comment-2", - date: new Date(1999, 0, 1), + date: new Date("1999-01-01T00:00:00.000Z"), }, ], }); diff --git a/src/file/paragraph/run/empty-children.spec.ts b/src/file/paragraph/run/empty-children.spec.ts new file mode 100644 index 0000000000..af9ccb4e35 --- /dev/null +++ b/src/file/paragraph/run/empty-children.spec.ts @@ -0,0 +1,229 @@ +import { expect } from "chai"; + +import { Formatter } from "@export/formatter"; +import { + AnnotationReference, + CarriageReturn, + ContinuationSeparator, + DayLong, + DayShort, + EndnoteReference, + FootnoteReferenceElement, + LastRenderedPageBreak, + MonthLong, + MonthShort, + NoBreakHyphen, + PageNumberElement, + Separator, + SoftHyphen, + Tab, + YearLong, + YearShort, +} from "./empty-children"; + +// +// +// +// +// +// +// +// +// +// +// +// +// +// ... +// +// +// +// ... +// + +describe("NoBreakHyphen", () => { + describe("#constructor()", () => { + it("should create a NoBreakHyphen with correct root key", () => { + const tree = new Formatter().format(new NoBreakHyphen()); + expect(tree).to.deep.equal({ + "w:noBreakHyphen": {}, + }); + }); + }); +}); + +describe("SoftHyphen", () => { + describe("#constructor()", () => { + it("should create a SoftHyphen with correct root key", () => { + const tree = new Formatter().format(new SoftHyphen()); + expect(tree).to.deep.equal({ + "w:softHyphen": {}, + }); + }); + }); +}); + +describe("DayShort", () => { + describe("#constructor()", () => { + it("should create a DayShort with correct root key", () => { + const tree = new Formatter().format(new DayShort()); + expect(tree).to.deep.equal({ + "w:dayShort": {}, + }); + }); + }); +}); + +describe("MonthShort", () => { + describe("#constructor()", () => { + it("should create a MonthShort with correct root key", () => { + const tree = new Formatter().format(new MonthShort()); + expect(tree).to.deep.equal({ + "w:monthShort": {}, + }); + }); + }); +}); + +describe("YearShort", () => { + describe("#constructor()", () => { + it("should create a YearShort with correct root key", () => { + const tree = new Formatter().format(new YearShort()); + expect(tree).to.deep.equal({ + "w:yearShort": {}, + }); + }); + }); +}); + +describe("DayLong", () => { + describe("#constructor()", () => { + it("should create a DayLong with correct root key", () => { + const tree = new Formatter().format(new DayLong()); + expect(tree).to.deep.equal({ + "w:dayLong": {}, + }); + }); + }); +}); + +describe("MonthLong", () => { + describe("#constructor()", () => { + it("should create a MonthLong with correct root key", () => { + const tree = new Formatter().format(new MonthLong()); + expect(tree).to.deep.equal({ + "w:monthLong": {}, + }); + }); + }); +}); + +describe("YearLong", () => { + describe("#constructor()", () => { + it("should create a YearLong with correct root key", () => { + const tree = new Formatter().format(new YearLong()); + expect(tree).to.deep.equal({ + "w:yearLong": {}, + }); + }); + }); +}); + +describe("AnnotationReference", () => { + describe("#constructor()", () => { + it("should create a AnnotationReference with correct root key", () => { + const tree = new Formatter().format(new AnnotationReference()); + expect(tree).to.deep.equal({ + "w:annotationRef": {}, + }); + }); + }); +}); + +describe("FootnoteReferenceElement", () => { + describe("#constructor()", () => { + it("should create a FootnoteReferenceElement with correct root key", () => { + const tree = new Formatter().format(new FootnoteReferenceElement()); + expect(tree).to.deep.equal({ + "w:footnoteRef": {}, + }); + }); + }); +}); + +describe("EndnoteReference", () => { + describe("#constructor()", () => { + it("should create a EndnoteReference with correct root key", () => { + const tree = new Formatter().format(new EndnoteReference()); + expect(tree).to.deep.equal({ + "w:endnoteRef": {}, + }); + }); + }); +}); + +describe("Separator", () => { + describe("#constructor()", () => { + it("should create a Separator with correct root key", () => { + const tree = new Formatter().format(new Separator()); + expect(tree).to.deep.equal({ + "w:separator": {}, + }); + }); + }); +}); + +describe("ContinuationSeparator", () => { + describe("#constructor()", () => { + it("should create a ContinuationSeparator with correct root key", () => { + const tree = new Formatter().format(new ContinuationSeparator()); + expect(tree).to.deep.equal({ + "w:continuationSeparator": {}, + }); + }); + }); +}); + +describe("PageNumberElement", () => { + describe("#constructor()", () => { + it("should create a PageNumberElement with correct root key", () => { + const tree = new Formatter().format(new PageNumberElement()); + expect(tree).to.deep.equal({ + "w:pgNum": {}, + }); + }); + }); +}); + +describe("CarriageReturn", () => { + describe("#constructor()", () => { + it("should create a CarriageReturn with correct root key", () => { + const tree = new Formatter().format(new CarriageReturn()); + expect(tree).to.deep.equal({ + "w:cr": {}, + }); + }); + }); +}); + +describe("Tab", () => { + describe("#constructor()", () => { + it("should create a Tab with correct root key", () => { + const tree = new Formatter().format(new Tab()); + expect(tree).to.deep.equal({ + "w:tab": {}, + }); + }); + }); +}); + +describe("LastRenderedPageBreak", () => { + describe("#constructor()", () => { + it("should create a LastRenderedPageBreak with correct root key", () => { + const tree = new Formatter().format(new LastRenderedPageBreak()); + expect(tree).to.deep.equal({ + "w:lastRenderedPageBreak": {}, + }); + }); + }); +}); diff --git a/src/file/paragraph/run/empty-children.ts b/src/file/paragraph/run/empty-children.ts new file mode 100644 index 0000000000..b72ba255d6 --- /dev/null +++ b/src/file/paragraph/run/empty-children.ts @@ -0,0 +1,127 @@ +import { EmptyElement } from "@file/xml-components"; + +// +// ... +// +// +// +// +// +// +// +// +// +// +// +// +// +// ... +// +// +// +// ... +// +// +// + +export class NoBreakHyphen extends EmptyElement { + public constructor() { + super("w:noBreakHyphen"); + } +} + +export class SoftHyphen extends EmptyElement { + public constructor() { + super("w:softHyphen"); + } +} + +export class DayShort extends EmptyElement { + public constructor() { + super("w:dayShort"); + } +} + +export class MonthShort extends EmptyElement { + public constructor() { + super("w:monthShort"); + } +} + +export class YearShort extends EmptyElement { + public constructor() { + super("w:yearShort"); + } +} + +export class DayLong extends EmptyElement { + public constructor() { + super("w:dayLong"); + } +} + +export class MonthLong extends EmptyElement { + public constructor() { + super("w:monthLong"); + } +} + +export class YearLong extends EmptyElement { + public constructor() { + super("w:yearLong"); + } +} + +export class AnnotationReference extends EmptyElement { + public constructor() { + super("w:annotationRef"); + } +} + +export class FootnoteReferenceElement extends EmptyElement { + public constructor() { + super("w:footnoteRef"); + } +} + +export class EndnoteReference extends EmptyElement { + public constructor() { + super("w:endnoteRef"); + } +} + +export class Separator extends EmptyElement { + public constructor() { + super("w:separator"); + } +} + +export class ContinuationSeparator extends EmptyElement { + public constructor() { + super("w:continuationSeparator"); + } +} + +export class PageNumberElement extends EmptyElement { + public constructor() { + super("w:pgNum"); + } +} + +export class CarriageReturn extends EmptyElement { + public constructor() { + super("w:cr"); + } +} + +export class Tab extends EmptyElement { + public constructor() { + super("w:tab"); + } +} + +export class LastRenderedPageBreak extends EmptyElement { + public constructor() { + super("w:lastRenderedPageBreak"); + } +} diff --git a/src/file/paragraph/run/formatting.ts b/src/file/paragraph/run/formatting.ts index b78e3291a7..3629dd36ee 100644 --- a/src/file/paragraph/run/formatting.ts +++ b/src/file/paragraph/run/formatting.ts @@ -1,8 +1,8 @@ import { Attributes, XmlComponent } from "@file/xml-components"; -import { hexColorValue, signedTwipsMeasureValue } from "@util/values"; +import { hexColorValue, signedTwipsMeasureValue, UniversalMeasure } from "@util/values"; export class CharacterSpacing extends XmlComponent { - public constructor(value: number | string) { + public constructor(value: number | UniversalMeasure) { super("w:spacing"); this.root.push( new Attributes({ diff --git a/src/file/paragraph/run/image-run.spec.ts b/src/file/paragraph/run/image-run.spec.ts index 37bd72d753..edc4aa5910 100644 --- a/src/file/paragraph/run/image-run.spec.ts +++ b/src/file/paragraph/run/image-run.spec.ts @@ -47,6 +47,7 @@ describe("ImageRun", () => { }, } as unknown as File, viewWrapper: {} as unknown as IViewWrapper, + stack: [], }); expect(tree).to.deep.equal({ "w:r": [ @@ -298,6 +299,7 @@ describe("ImageRun", () => { }, } as unknown as File, viewWrapper: {} as unknown as IViewWrapper, + stack: [], }); expect(tree).to.deep.equal({ "w:r": [ @@ -552,6 +554,7 @@ describe("ImageRun", () => { }, } as unknown as File, viewWrapper: {} as unknown as IViewWrapper, + stack: [], }); expect(tree).to.deep.equal({ @@ -810,6 +813,7 @@ describe("ImageRun", () => { }, } as unknown as File, viewWrapper: {} as unknown as IViewWrapper, + stack: [], }); expect(tree).to.deep.equal({ diff --git a/src/file/paragraph/run/index.ts b/src/file/paragraph/run/index.ts index 34819e2c02..f459256c59 100644 --- a/src/file/paragraph/run/index.ts +++ b/src/file/paragraph/run/index.ts @@ -7,6 +7,7 @@ export * from "./run-fonts"; export * from "./sequential-identifier"; export * from "./underline"; export * from "./emphasis-mark"; -export * from "./tab"; export * from "./simple-field"; export * from "./comment-run"; +export * from "./empty-children"; +export * from "./positional-tab"; diff --git a/src/file/paragraph/run/language.spec.ts b/src/file/paragraph/run/language.spec.ts new file mode 100644 index 0000000000..e742c6092c --- /dev/null +++ b/src/file/paragraph/run/language.spec.ts @@ -0,0 +1,29 @@ +import { expect } from "chai"; + +import { Formatter } from "@export/formatter"; + +import { createLanguageComponent } from "./language"; + +describe("Language", () => { + describe("#createLanguageComponent", () => { + it("should create a language component", () => { + const tree = new Formatter().format( + createLanguageComponent({ + value: "en-US", + eastAsia: "zh-CN", + bidirectional: "ar-SA", + }), + ); + + expect(tree).to.deep.equal({ + "w:lang": { + _attr: { + "w:bidi": "ar-SA", + "w:eastAsia": "zh-CN", + "w:val": "en-US", + }, + }, + }); + }); + }); +}); diff --git a/src/file/paragraph/run/language.ts b/src/file/paragraph/run/language.ts new file mode 100644 index 0000000000..b0978b38bc --- /dev/null +++ b/src/file/paragraph/run/language.ts @@ -0,0 +1,35 @@ +import { BuilderElement, XmlComponent } from "@file/xml-components"; + +// +// +// +// +// +export interface ILanguageOptions { + readonly value?: string; + readonly eastAsia?: string; + readonly bidirectional?: string; +} + +export const createLanguageComponent = (options: ILanguageOptions): XmlComponent => + new BuilderElement<{ + readonly value?: string; + readonly eastAsia?: string; + readonly bidirectional?: string; + }>({ + name: "w:lang", + attributes: { + value: { + key: "w:val", + value: options.value, + }, + eastAsia: { + key: "w:eastAsia", + value: options.eastAsia, + }, + bidirectional: { + key: "w:bidi", + value: options.bidirectional, + }, + }, + }); diff --git a/src/file/paragraph/run/positional-tab.spec.ts b/src/file/paragraph/run/positional-tab.spec.ts new file mode 100644 index 0000000000..56fe20c273 --- /dev/null +++ b/src/file/paragraph/run/positional-tab.spec.ts @@ -0,0 +1,27 @@ +import { expect } from "chai"; + +import { Formatter } from "@export/formatter"; + +import { PositionalTab, PositionalTabAlignment, PositionalTabLeader, PositionalTabRelativeTo } from "./positional-tab"; + +describe("PositionalTab", () => { + it("should create a PositionalTab with correct root key", () => { + const tree = new Formatter().format( + new PositionalTab({ + alignment: PositionalTabAlignment.CENTER, + relativeTo: PositionalTabRelativeTo.MARGIN, + leader: PositionalTabLeader.DOT, + }), + ); + + expect(tree).to.deep.equal({ + "w:ptab": { + _attr: { + "w:alignment": "center", + "w:relativeTo": "margin", + "w:leader": "dot", + }, + }, + }); + }); +}); diff --git a/src/file/paragraph/run/positional-tab.ts b/src/file/paragraph/run/positional-tab.ts new file mode 100644 index 0000000000..e3b002ed81 --- /dev/null +++ b/src/file/paragraph/run/positional-tab.ts @@ -0,0 +1,80 @@ +import { NextAttributeComponent, XmlComponent } from "@file/xml-components"; + +// +// +// +// +// +// +// +export enum PositionalTabAlignment { + LEFT = "left", + CENTER = "center", + RIGHT = "right", +} + +// +// +// +// +// +// +export enum PositionalTabRelativeTo { + MARGIN = "margin", + INDENT = "indent", +} + +// +// +// +// +// +// +// +// +// +export enum PositionalTabLeader { + NONE = "none", + DOT = "dot", + HYPHEN = "hyphen", + UNDERSCORE = "underscore", + MIDDLE_DOT = "middleDot", +} + +export interface PositionalTabOptions { + readonly alignment: PositionalTabAlignment; + readonly relativeTo: PositionalTabRelativeTo; + readonly leader: PositionalTabLeader; +} + +// +// +// +// +// +export class PositionalTab extends XmlComponent { + public constructor(options: PositionalTabOptions) { + super("w:ptab"); + + this.root.push( + new NextAttributeComponent<{ + readonly alignment: PositionalTabAlignment; + readonly relativeTo: PositionalTabRelativeTo; + readonly leader: PositionalTabLeader; + }>({ + alignment: { + key: "w:alignment", + value: options.alignment, + }, + relativeTo: { + key: "w:relativeTo", + value: options.relativeTo, + }, + leader: { + key: "w:leader", + value: options.leader, + }, + }), + ); + } +} diff --git a/src/file/paragraph/run/properties.ts b/src/file/paragraph/run/properties.ts index 19593b62dd..41ca650995 100644 --- a/src/file/paragraph/run/properties.ts +++ b/src/file/paragraph/run/properties.ts @@ -9,9 +9,11 @@ import { StringValueElement, XmlComponent, } from "@file/xml-components"; +import { PositiveUniversalMeasure, UniversalMeasure } from "@util/values"; import { EmphasisMark, EmphasisMarkType } from "./emphasis-mark"; import { CharacterSpacing, Color, Highlight, HighlightComplexScript } from "./formatting"; +import { createLanguageComponent, ILanguageOptions } from "./language"; import { IFontAttributesProperties, RunFonts } from "./run-fonts"; import { SubScript, SuperScript } from "./script"; import { Underline, UnderlineType } from "./underline"; @@ -21,6 +23,16 @@ interface IFontOptions { readonly hint?: string; } +export enum TextEffect { + BLINK_BACKGROUND = "blinkBackground", + LIGHTS = "lights", + ANTS_BLACK = "antsBlack", + ANTS_RED = "antsRed", + SHIMMER = "shimmer", + SPARKLE = "sparkle", + NONE = "none", +} + export interface IRunStylePropertiesOptions { readonly bold?: boolean; readonly boldComplexScript?: boolean; @@ -30,12 +42,15 @@ export interface IRunStylePropertiesOptions { readonly color?: string; readonly type?: UnderlineType; }; + readonly effect?: TextEffect; readonly emphasisMark?: { readonly type?: EmphasisMarkType; }; readonly color?: string; - readonly size?: number | string; - readonly sizeComplexScript?: boolean | number | string; + readonly kern?: number | PositiveUniversalMeasure; + readonly position?: UniversalMeasure; + readonly size?: number | PositiveUniversalMeasure; + readonly sizeComplexScript?: boolean | number | PositiveUniversalMeasure; readonly rightToLeft?: boolean; readonly smallCaps?: boolean; readonly allCaps?: boolean; @@ -51,10 +66,13 @@ export interface IRunStylePropertiesOptions { readonly emboss?: boolean; readonly imprint?: boolean; readonly revision?: IRunPropertiesChangeOptions; + readonly language?: ILanguageOptions; readonly border?: IBorderOptions; + readonly snapToGrid?: boolean; readonly vanish?: boolean; readonly specVanish?: boolean; readonly scale?: number; + readonly math?: boolean; } export interface IRunPropertiesOptions extends IRunStylePropertiesOptions { @@ -133,6 +151,10 @@ export class RunProperties extends IgnoreIfEmptyXmlComponent { this.push(new Underline(options.underline.type, options.underline.color)); } + if (options.effect) { + this.push(new StringValueElement("w:effect", options.effect)); + } + if (options.emphasisMark) { this.push(new EmphasisMark(options.emphasisMark.type)); } @@ -141,6 +163,14 @@ export class RunProperties extends IgnoreIfEmptyXmlComponent { this.push(new Color(options.color)); } + if (options.kern) { + this.push(new HpsMeasureElement("w:kern", options.kern)); + } + + if (options.position) { + this.push(new StringValueElement("w:position", options.position)); + } + if (options.size !== undefined) { this.push(new HpsMeasureElement("w:sz", options.size)); } @@ -226,6 +256,10 @@ export class RunProperties extends IgnoreIfEmptyXmlComponent { this.push(new BorderElement("w:bdr", options.border)); } + if (options.snapToGrid) { + this.push(new OnOffElement("w:snapToGrid", options.snapToGrid)); + } + if (options.vanish) { // https://c-rex.net/projects/samples/ooxml/e1/Part4/OOXML_P4_DOCX_vanish_topic_ID0E6W3O.html // http://www.datypic.com/sc/ooxml/e-w_vanish-1.html @@ -240,6 +274,14 @@ export class RunProperties extends IgnoreIfEmptyXmlComponent { if (options.scale !== undefined) { this.push(new NumberValueElement("w:w", options.scale)); } + + if (options.language) { + this.push(createLanguageComponent(options.language)); + } + + if (options.math) { + this.push(new OnOffElement("w:oMath", options.math)); + } } public push(item: XmlComponent): void { diff --git a/src/file/paragraph/run/run-components/text.spec.ts b/src/file/paragraph/run/run-components/text.spec.ts index fd4bbd01b0..c01606d632 100644 --- a/src/file/paragraph/run/run-components/text.spec.ts +++ b/src/file/paragraph/run/run-components/text.spec.ts @@ -1,6 +1,7 @@ import { expect } from "chai"; import { Formatter } from "@export/formatter"; +import { SpaceType } from "@file/shared"; import { Text } from "./text"; @@ -13,5 +14,26 @@ describe("Text", () => { "w:t": [{ _attr: { "xml:space": "preserve" } }, " this is\n text"], }); }); + + it("adds the passed in text to the component with options", () => { + const t = new Text({ + text: " this is\n text", + space: SpaceType.PRESERVE, + }); + const f = new Formatter().format(t); + expect(f).to.deep.equal({ + "w:t": [{ _attr: { "xml:space": "preserve" } }, " this is\n text"], + }); + }); + + it("adds the passed in text to the component with options and sets default space type", () => { + const t = new Text({ + text: " this is\n text", + }); + const f = new Formatter().format(t); + expect(f).to.deep.equal({ + "w:t": [{ _attr: { "xml:space": "default" } }, " this is\n text"], + }); + }); }); }); diff --git a/src/file/paragraph/run/run-components/text.ts b/src/file/paragraph/run/run-components/text.ts index 94b71073c9..34b9f2edaa 100644 --- a/src/file/paragraph/run/run-components/text.ts +++ b/src/file/paragraph/run/run-components/text.ts @@ -3,11 +3,31 @@ import { XmlComponent } from "@file/xml-components"; import { TextAttributes } from "../text-attributes"; -export class Text extends XmlComponent { - public constructor(text: string) { - super("w:t"); - this.root.push(new TextAttributes({ space: SpaceType.PRESERVE })); +// +// +// +// +// +// +// - this.root.push(text); +interface ITextOptions { + readonly space?: SpaceType; + readonly text?: string; +} + +export class Text extends XmlComponent { + public constructor(options: string | ITextOptions) { + super("w:t"); + + if (typeof options === "string") { + this.root.push(new TextAttributes({ space: SpaceType.PRESERVE })); + this.root.push(options); + return this; + } else { + this.root.push(new TextAttributes({ space: options.space ?? SpaceType.DEFAULT })); + this.root.push(options.text); + return this; + } } } diff --git a/src/file/paragraph/run/run.spec.ts b/src/file/paragraph/run/run.spec.ts index b178536435..b639e08e49 100644 --- a/src/file/paragraph/run/run.spec.ts +++ b/src/file/paragraph/run/run.spec.ts @@ -7,6 +7,7 @@ import { ShadingType } from "@file/shading"; import { EmphasisMarkType } from "./emphasis-mark"; import { PageNumber, Run } from "./run"; import { UnderlineType } from "./underline"; +import { TextEffect } from "./properties"; describe("Run", () => { describe("#bold()", () => { @@ -580,5 +581,147 @@ describe("Run", () => { }); }); }); + + describe("#language", () => { + it("should correctly set the language", () => { + const run = new Run({ + language: { + value: "en-US", + eastAsia: "zh-CN", + bidirectional: "ar-SA", + }, + }); + const tree = new Formatter().format(run); + expect(tree).to.deep.equal({ + "w:r": [ + { + "w:rPr": [ + { + "w:lang": { + _attr: { + "w:val": "en-US", + "w:eastAsia": "zh-CN", + "w:bidi": "ar-SA", + }, + }, + }, + ], + }, + ], + }); + }); + }); + + describe("#position", () => { + it("should correctly set the position", () => { + const run = new Run({ + position: "2mm", + }); + const tree = new Formatter().format(run); + expect(tree).to.deep.equal({ + "w:r": [ + { + "w:rPr": [ + { + "w:position": { + _attr: { + "w:val": "2mm", + }, + }, + }, + ], + }, + ], + }); + }); + }); + + describe("#effect", () => { + it("should correctly set the effect", () => { + const run = new Run({ + effect: TextEffect.ANTS_BLACK, + }); + const tree = new Formatter().format(run); + expect(tree).to.deep.equal({ + "w:r": [ + { + "w:rPr": [ + { + "w:effect": { + _attr: { + "w:val": "antsBlack", + }, + }, + }, + ], + }, + ], + }); + }); + }); + + describe("#math", () => { + it("should correctly set the math", () => { + const run = new Run({ + math: true, + }); + const tree = new Formatter().format(run); + expect(tree).to.deep.equal({ + "w:r": [ + { + "w:rPr": [ + { + "w:oMath": {}, + }, + ], + }, + ], + }); + }); + }); + + describe("#kern", () => { + it("should correctly set the kern", () => { + const run = new Run({ + kern: "2mm", + }); + const tree = new Formatter().format(run); + expect(tree).to.deep.equal({ + "w:r": [ + { + "w:rPr": [ + { + "w:kern": { + _attr: { + "w:val": "2mm", + }, + }, + }, + ], + }, + ], + }); + }); + }); + + describe("#snapToGrid", () => { + it("should correctly set the snapToGrid", () => { + const run = new Run({ + snapToGrid: true, + }); + const tree = new Formatter().format(run); + expect(tree).to.deep.equal({ + "w:r": [ + { + "w:rPr": [ + { + "w:snapToGrid": {}, + }, + ], + }, + ], + }); + }); + }); }); }); diff --git a/src/file/paragraph/run/run.ts b/src/file/paragraph/run/run.ts index 4fb047e0c7..023fff404e 100644 --- a/src/file/paragraph/run/run.ts +++ b/src/file/paragraph/run/run.ts @@ -9,10 +9,91 @@ import { Begin, End, Separate } from "./field"; import { NumberOfPages, NumberOfPagesSection, Page } from "./page-number"; import { IRunPropertiesOptions, RunProperties } from "./properties"; import { Text } from "./run-components/text"; -import { Tab } from "./tab"; +import { + AnnotationReference, + CarriageReturn, + ContinuationSeparator, + DayLong, + DayShort, + EndnoteReference, + FootnoteReferenceElement, + LastRenderedPageBreak, + MonthLong, + MonthShort, + NoBreakHyphen, + PageNumberElement, + Separator, + SoftHyphen, + Tab, + YearLong, + YearShort, +} from "./empty-children"; +import { PositionalTab } from "./positional-tab"; export interface IRunOptions extends IRunPropertiesOptions { - readonly children?: readonly (Begin | FieldInstruction | Separate | End | PageNumber | FootnoteReferenceRun | Tab | string)[]; + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + // + readonly children?: readonly ( + | Begin + | FieldInstruction + | Separate + | End + | PageNumber + | FootnoteReferenceRun + | Break + | AnnotationReference + | CarriageReturn + | ContinuationSeparator + | DayLong + | DayShort + | EndnoteReference + | FootnoteReferenceElement + | LastRenderedPageBreak + | MonthLong + | MonthShort + | NoBreakHyphen + | PageNumberElement + | Separator + | SoftHyphen + | Tab + | YearLong + | YearShort + | PositionalTab + | string + )[]; readonly break?: number; readonly text?: string; } diff --git a/src/file/paragraph/run/symbol-run.ts b/src/file/paragraph/run/symbol-run.ts index 336e878719..5848016ecc 100644 --- a/src/file/paragraph/run/symbol-run.ts +++ b/src/file/paragraph/run/symbol-run.ts @@ -11,7 +11,7 @@ export class SymbolRun extends Run { if (typeof options === "string") { super({}); this.root.push(new Symbol(options)); - return; + return this; } super(options); diff --git a/src/file/paragraph/run/tab.spec.ts b/src/file/paragraph/run/tab.spec.ts deleted file mode 100644 index 03381200a5..0000000000 --- a/src/file/paragraph/run/tab.spec.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { expect } from "chai"; - -import { Formatter } from "@export/formatter"; - -import { Tab } from "./tab"; - -describe("Tab", () => { - let tab: Tab; - - beforeEach(() => { - tab = new Tab(); - }); - - describe("#constructor()", () => { - it("should create a Tab with correct root key", () => { - const tree = new Formatter().format(tab); - expect(tree).to.deep.equal({ - "w:tab": {}, - }); - }); - }); -}); diff --git a/src/file/paragraph/run/tab.ts b/src/file/paragraph/run/tab.ts deleted file mode 100644 index 061e3deb3a..0000000000 --- a/src/file/paragraph/run/tab.ts +++ /dev/null @@ -1,14 +0,0 @@ -// https://c-rex.net/projects/samples/ooxml/e1/Part4/OOXML_P4_DOCX_tab_topic_ID0EM6AO.html -import { XmlComponent } from "@file/xml-components"; - -// -// ... -// -// -// TODO: this is unused and undocumented currently. -// I think the intended use was for users to import, and insert as a child of `Run`. -export class Tab extends XmlComponent { - public constructor() { - super("w:tab"); - } -} diff --git a/src/file/paragraph/run/underline.ts b/src/file/paragraph/run/underline.ts index a84dbdc0e4..731e9e52e4 100644 --- a/src/file/paragraph/run/underline.ts +++ b/src/file/paragraph/run/underline.ts @@ -19,6 +19,7 @@ export enum UnderlineType { WAVE = "wave", WAVYHEAVY = "wavyHeavy", WAVYDOUBLE = "wavyDouble", + NONE = "none", } export class Underline extends XmlComponent { diff --git a/src/file/relationships/relationships.ts b/src/file/relationships/relationships.ts index fab99968dc..b7b0f89ca6 100644 --- a/src/file/relationships/relationships.ts +++ b/src/file/relationships/relationships.ts @@ -12,13 +12,9 @@ export class Relationships extends XmlComponent { ); } - public addRelationship(relationship: Relationship): void { - this.root.push(relationship); - } - public createRelationship(id: number | string, type: RelationshipType, target: string, targetMode?: TargetModeType): Relationship { const relationship = new Relationship(`rId${id}`, type, target, targetMode); - this.addRelationship(relationship); + this.root.push(relationship); return relationship; } diff --git a/src/file/styles/sample/default-style.ts b/src/file/styles/sample/default-style.ts index 4796968a7c..a53693ab25 100644 --- a/src/file/styles/sample/default-style.ts +++ b/src/file/styles/sample/default-style.ts @@ -1,4 +1,10 @@ -const createLsdException = (name: string, uiPriority?: number, qFormat?: number, semiHidden?: number, unhideWhenUsed?: number) => { +const createLsdException = ( + name: string, + uiPriority?: number, + qFormat?: number, + semiHidden?: number, + unhideWhenUsed?: number, +): readonly object[] => { "use strict"; return [ diff --git a/src/file/table-of-contents/table-of-contents.ts b/src/file/table-of-contents/table-of-contents.ts index 212cd4e79d..da11a28719 100644 --- a/src/file/table-of-contents/table-of-contents.ts +++ b/src/file/table-of-contents/table-of-contents.ts @@ -3,13 +3,13 @@ import { Paragraph } from "@file/paragraph"; import { Run } from "@file/paragraph/run"; import { Begin, End, Separate } from "@file/paragraph/run/field"; -import { XmlComponent } from "@file/xml-components"; +import { FileChild } from "@file/file-child"; import { FieldInstruction } from "./field-instruction"; import { StructuredDocumentTagContent } from "./sdt-content"; import { StructuredDocumentTagProperties } from "./sdt-properties"; import { ITableOfContentsOptions } from "./table-of-contents-properties"; -export class TableOfContents extends XmlComponent { +export class TableOfContents extends FileChild { public constructor(alias: string = "Table of Contents", properties?: ITableOfContentsOptions) { super("w:sdt"); this.root.push(new StructuredDocumentTagProperties(alias)); diff --git a/src/file/table/grid.ts b/src/file/table/grid.ts index 719253b8b2..14eb60c886 100644 --- a/src/file/table/grid.ts +++ b/src/file/table/grid.ts @@ -9,11 +9,11 @@ // // -import { XmlAttributeComponent, XmlComponent } from "@file/xml-components"; -import { twipsMeasureValue } from "@util/values"; +import { NextAttributeComponent, XmlComponent } from "@file/xml-components"; +import { PositiveUniversalMeasure, twipsMeasureValue } from "@util/values"; export class TableGrid extends XmlComponent { - public constructor(widths: readonly number[] | readonly string[]) { + public constructor(widths: readonly number[] | readonly PositiveUniversalMeasure[]) { super("w:tblGrid"); for (const width of widths) { this.root.push(new GridCol(width)); @@ -21,15 +21,15 @@ export class TableGrid extends XmlComponent { } } -class GridColAttributes extends XmlAttributeComponent<{ readonly w: number | string }> { - protected readonly xmlKeys = { w: "w:w" }; -} - export class GridCol extends XmlComponent { - public constructor(width?: number | string) { + public constructor(width?: number | PositiveUniversalMeasure) { super("w:gridCol"); if (width !== undefined) { - this.root.push(new GridColAttributes({ w: twipsMeasureValue(width) })); + this.root.push( + new NextAttributeComponent<{ readonly width: number | PositiveUniversalMeasure }>({ + width: { key: "w:w", value: twipsMeasureValue(width) }, + }), + ); } } } diff --git a/src/file/table/table-properties/table-float-properties.ts b/src/file/table/table-properties/table-float-properties.ts index fdcf696d07..e7f32dc572 100644 --- a/src/file/table/table-properties/table-float-properties.ts +++ b/src/file/table/table-properties/table-float-properties.ts @@ -1,5 +1,5 @@ import { StringEnumValueElement, XmlAttributeComponent, XmlComponent } from "@file/xml-components"; -import { signedTwipsMeasureValue, twipsMeasureValue } from "@util/values"; +import { PositiveUniversalMeasure, signedTwipsMeasureValue, twipsMeasureValue, UniversalMeasure } from "@util/values"; export enum TableAnchorType { MARGIN = "margin", @@ -55,7 +55,7 @@ export interface ITableFloatOptions { * If relativeHorizontalPosition is also specified, then the absoluteHorizontalPosition attribute is ignored. * If the attribute is omitted, the value is assumed to be zero. */ - readonly absoluteHorizontalPosition?: number | string; + readonly absoluteHorizontalPosition?: number | UniversalMeasure; /** * Specifies a relative horizontal position for the table, relative to the horizontalAnchor attribute. @@ -86,7 +86,7 @@ export interface ITableFloatOptions { * If relativeVerticalPosition is also specified, then the absoluteVerticalPosition attribute is ignored. * If the attribute is omitted, the value is assumed to be zero. */ - readonly absoluteVerticalPosition?: number | string; + readonly absoluteVerticalPosition?: number | UniversalMeasure; /** * Specifies a relative vertical position for the table, relative to the verticalAnchor attribute. @@ -104,25 +104,25 @@ export interface ITableFloatOptions { * Specifies the minimum distance to be maintained between the table and the top of text in the paragraph * below the table. The value is in twentieths of a point. If omitted, the value is assumed to be zero. */ - readonly bottomFromText?: number | string; + readonly bottomFromText?: number | PositiveUniversalMeasure; /** * Specifies the minimum distance to be maintained between the table and the bottom edge of text in the paragraph * above the table. The value is in twentieths of a point. If omitted, the value is assumed to be zero. */ - readonly topFromText?: number | string; + readonly topFromText?: number | PositiveUniversalMeasure; /** * Specifies the minimum distance to be maintained between the table and the edge of text in the paragraph * to the left of the table. The value is in twentieths of a point. If omitted, the value is assumed to be zero. */ - readonly leftFromText?: number | string; + readonly leftFromText?: number | PositiveUniversalMeasure; /** * Specifies the minimum distance to be maintained between the table and the edge of text in the paragraph * to the right of the table. The value is in twentieths of a point. If omitted, the value is assumed to be zero. */ - readonly rightFromText?: number | string; + readonly rightFromText?: number | PositiveUniversalMeasure; readonly overlap?: OverlapType; } diff --git a/src/file/table/table-row/table-row-height.ts b/src/file/table/table-row/table-row-height.ts index 12294b7f4e..4c6043bb47 100644 --- a/src/file/table/table-row/table-row-height.ts +++ b/src/file/table/table-row/table-row-height.ts @@ -1,5 +1,5 @@ import { XmlAttributeComponent, XmlComponent } from "@file/xml-components"; -import { twipsMeasureValue } from "@util/values"; +import { PositiveUniversalMeasure, twipsMeasureValue } from "@util/values"; // // @@ -30,7 +30,7 @@ export class TableRowHeightAttributes extends XmlAttributeComponent<{ } export class TableRowHeight extends XmlComponent { - public constructor(value: number | string, rule: HeightRule) { + public constructor(value: number | PositiveUniversalMeasure, rule: HeightRule) { super("w:trHeight"); this.root.push( diff --git a/src/file/table/table-row/table-row-properties.ts b/src/file/table/table-row/table-row-properties.ts index c4fa01ea6d..d388e917eb 100644 --- a/src/file/table/table-row/table-row-properties.ts +++ b/src/file/table/table-row/table-row-properties.ts @@ -28,6 +28,7 @@ // // import { IgnoreIfEmptyXmlComponent, OnOffElement } from "@file/xml-components"; +import { PositiveUniversalMeasure } from "@util/values"; import { HeightRule, TableRowHeight } from "./table-row-height"; @@ -35,7 +36,7 @@ export interface ITableRowPropertiesOptions { readonly cantSplit?: boolean; readonly tableHeader?: boolean; readonly height?: { - readonly value: number | string; + readonly value: number | PositiveUniversalMeasure; readonly rule: HeightRule; }; } diff --git a/src/file/table/table-width.ts b/src/file/table/table-width.ts index 38c941b2f1..1c2e29a0c5 100644 --- a/src/file/table/table-width.ts +++ b/src/file/table/table-width.ts @@ -1,6 +1,6 @@ // http://officeopenxml.com/WPtableWidth.php -import { XmlAttributeComponent, XmlComponent } from "@file/xml-components"; -import { measurementOrPercentValue } from "@util/values"; +import { NextAttributeComponent, XmlComponent } from "@file/xml-components"; +import { measurementOrPercentValue, Percentage, UniversalMeasure } from "@util/values"; // // @@ -25,14 +25,10 @@ export enum WidthType { // // // -export interface ITableWidthProperties { - readonly size: string | number; +export type ITableWidthProperties = { + readonly size: number | Percentage | UniversalMeasure; readonly type?: WidthType; -} - -class TableWidthAttributes extends XmlAttributeComponent { - protected readonly xmlKeys = { type: "w:type", size: "w:w" }; -} +}; export class TableWidthElement extends XmlComponent { public constructor(name: string, { type = WidthType.AUTO, size }: ITableWidthProperties) { @@ -42,6 +38,12 @@ export class TableWidthElement extends XmlComponent { if (type === WidthType.PERCENTAGE && typeof size === "number") { tableWidthValue = `${size}%`; } - this.root.push(new TableWidthAttributes({ type: type, size: measurementOrPercentValue(tableWidthValue) })); + + this.root.push( + new NextAttributeComponent({ + type: { key: "w:type", value: type }, + size: { key: "w:w", value: measurementOrPercentValue(tableWidthValue) }, + }), + ); } } diff --git a/src/file/table/table.ts b/src/file/table/table.ts index 7f272dfe3e..4e5545b171 100644 --- a/src/file/table/table.ts +++ b/src/file/table/table.ts @@ -1,5 +1,5 @@ // http://officeopenxml.com/WPtableGrid.php -import { XmlComponent } from "@file/xml-components"; +import { FileChild } from "@file/file-child"; import { AlignmentType } from "../paragraph"; import { TableGrid } from "./grid"; @@ -34,7 +34,7 @@ export interface ITableOptions { readonly visuallyRightToLeft?: boolean; } -export class Table extends XmlComponent { +export class Table extends FileChild { public constructor({ rows, width, diff --git a/src/file/xml-components/base.ts b/src/file/xml-components/base.ts index 410ff07feb..4bd1043b90 100644 --- a/src/file/xml-components/base.ts +++ b/src/file/xml-components/base.ts @@ -5,6 +5,8 @@ import { IXmlableObject } from "./xmlable-object"; export interface IContext { readonly file: File; readonly viewWrapper: IViewWrapper; + // eslint-disable-next-line functional/prefer-readonly-type + readonly stack: IXmlableObject[]; } export abstract class BaseXmlComponent { diff --git a/src/file/xml-components/default-attributes.ts b/src/file/xml-components/default-attributes.ts index bf84e95eef..62d5cb60b4 100644 --- a/src/file/xml-components/default-attributes.ts +++ b/src/file/xml-components/default-attributes.ts @@ -1,16 +1,16 @@ import { BaseXmlComponent, IContext } from "./base"; -import { IXmlableObject } from "./xmlable-object"; +import { IXmlableObject, IXmlAttribute } from "./xmlable-object"; export type AttributeMap = { readonly [P in keyof T]: string }; +export type AttributeData = { readonly [key: string]: boolean | number | string }; +export type AttributePayload = { readonly [P in keyof T]: { readonly key: string; readonly value: T[P] } }; + export abstract class XmlAttributeComponent extends BaseXmlComponent { - // tslint:disable-next-line:readonly-keyword - protected readonly root: T; protected readonly xmlKeys?: AttributeMap; - public constructor(properties: T) { + public constructor(private readonly root: T) { super("_attr"); - this.root = properties; } public prepForXml(_: IContext): IXmlableObject { @@ -26,3 +26,16 @@ export abstract class XmlAttributeComponent extends BaseXmlCom return { _attr: attrs }; } } + +export class NextAttributeComponent extends BaseXmlComponent { + public constructor(private readonly root: AttributePayload) { + super("_attr"); + } + + public prepForXml(_: IContext): IXmlableObject { + const attrs = Object.values<{ readonly key: string; readonly value: string | boolean | number }>(this.root) + .filter(({ value }) => value !== undefined) + .reduce((acc, { key, value }) => ({ ...acc, [key]: value }), {} as IXmlAttribute); + return { _attr: attrs }; + } +} diff --git a/src/file/xml-components/imported-xml-component.spec.ts b/src/file/xml-components/imported-xml-component.spec.ts index ae0440d662..d9a14227c2 100644 --- a/src/file/xml-components/imported-xml-component.spec.ts +++ b/src/file/xml-components/imported-xml-component.spec.ts @@ -62,7 +62,7 @@ describe("ImportedXmlComponent", () => { describe("#prepForXml()", () => { it("should transform for xml", () => { // tslint:disable-next-line: no-object-literal-type-assertion - const converted = importedXmlComponent.prepForXml({} as IContext); + const converted = importedXmlComponent.prepForXml({ stack: [] } as unknown as IContext); expect(converted).to.deep.equal({ "w:test": [ { diff --git a/src/file/xml-components/simple-elements.ts b/src/file/xml-components/simple-elements.ts index aca3355c28..6ed117b7ba 100644 --- a/src/file/xml-components/simple-elements.ts +++ b/src/file/xml-components/simple-elements.ts @@ -1,6 +1,6 @@ -import { Attributes, XmlComponent } from "@file/xml-components"; +import { AttributeData, AttributePayload, Attributes, NextAttributeComponent, XmlComponent } from "@file/xml-components"; -import { hpsMeasureValue } from "@util/values"; +import { hpsMeasureValue, PositiveUniversalMeasure } from "@util/values"; // This represents element type CT_OnOff, which indicate a boolean value. // @@ -26,8 +26,13 @@ export class OnOffElement extends XmlComponent { // // // + +// +// +// + export class HpsMeasureElement extends XmlComponent { - public constructor(name: string, val: number | string) { + public constructor(name: string, val: number | PositiveUniversalMeasure) { super(name); this.root.push(new Attributes({ val: hpsMeasureValue(val) })); } @@ -35,6 +40,11 @@ export class HpsMeasureElement extends XmlComponent { // This represents element type CT_String, which indicate a string value. // +// +export class EmptyElement extends XmlComponent {} + +// This represents element type CT_Empty, which indicate aan empty element. +// // // // @@ -70,3 +80,17 @@ export class StringContainer extends XmlComponent { this.root.push(val); } } + +export class BuilderElement extends XmlComponent { + public constructor(options: { + readonly name: string; + readonly attributes?: AttributePayload; + readonly children?: readonly XmlComponent[]; + }) { + super(options.name); + + if (options.attributes) { + this.root.push(new NextAttributeComponent(options.attributes)); + } + } +} diff --git a/src/file/xml-components/xml-component.ts b/src/file/xml-components/xml-component.ts index 878931224b..93bdbf19fb 100644 --- a/src/file/xml-components/xml-component.ts +++ b/src/file/xml-components/xml-component.ts @@ -12,7 +12,15 @@ export abstract class XmlComponent extends BaseXmlComponent { this.root = new Array(); } + // This method is called by the formatter to get the XML representation of this component. + // It is called recursively for all child components. + // It is a serializer to be used in the xml library. + // https://www.npmjs.com/package/xml + // Child components can override this method to customize the XML representation, or execute side effects. public prepForXml(context: IContext): IXmlableObject | undefined { + // Mutating the stack is required for performance reasons + // eslint-disable-next-line functional/immutable-data + context.stack.push(this); const children = this.root .map((comp) => { if (comp instanceof BaseXmlComponent) { @@ -21,6 +29,9 @@ export abstract class XmlComponent extends BaseXmlComponent { return comp; }) .filter((comp) => comp !== undefined); // Exclude undefined + + // eslint-disable-next-line functional/immutable-data + context.stack.pop(); // If we only have a single IXmlableObject in our children array and it // represents our attributes, use the object itself as our children to // avoid an unneeded XML close element. diff --git a/src/util/values.spec.ts b/src/util/values.spec.ts index b4b36dbe44..32df1a74b2 100644 --- a/src/util/values.spec.ts +++ b/src/util/values.spec.ts @@ -25,13 +25,6 @@ describe("values", () => { expect(universalMeasureValue("5.22pc")).to.eq("5.22pc"); expect(universalMeasureValue("100 pi")).to.eq("100pi"); }); - it("should throw on invalid values", () => { - expect(() => universalMeasureValue("100pp")).to.throw(); - expect(() => universalMeasureValue("foo")).to.throw(); - expect(() => universalMeasureValue("--in")).to.throw(); - expect(() => universalMeasureValue("NaNpc")).to.throw(); - expect(() => universalMeasureValue("50")).to.throw(); - }); }); describe("positiveUniversalMeasureValue", () => { @@ -46,11 +39,6 @@ describe("values", () => { it("should throw on invalid values", () => { expect(() => positiveUniversalMeasureValue("-9mm")).to.throw(); expect(() => positiveUniversalMeasureValue("-0.5in")).to.throw(); - expect(() => positiveUniversalMeasureValue("100pp")).to.throw(); - expect(() => positiveUniversalMeasureValue("foo")).to.throw(); - expect(() => positiveUniversalMeasureValue("--in")).to.throw(); - expect(() => positiveUniversalMeasureValue("NaNpc")).to.throw(); - expect(() => positiveUniversalMeasureValue("50")).to.throw(); }); }); @@ -116,7 +104,6 @@ describe("values", () => { }); it("should throw on invalid values", () => { expect(() => signedTwipsMeasureValue(NaN)).to.throw(); - expect(() => signedTwipsMeasureValue("foo")).to.throw(); }); }); @@ -129,7 +116,6 @@ describe("values", () => { it("should throw on invalid values", () => { expect(() => twipsMeasureValue(-12)).to.throw(); expect(() => twipsMeasureValue(NaN)).to.throw(); - expect(() => twipsMeasureValue("foo")).to.throw(); expect(() => twipsMeasureValue("-5mm")).to.throw(); }); }); @@ -154,7 +140,6 @@ describe("values", () => { }); it("should throw on invalid values", () => { expect(() => hpsMeasureValue(NaN)).to.throw(); - expect(() => hpsMeasureValue("5FF")).to.throw(); }); }); @@ -165,11 +150,6 @@ describe("values", () => { expect(percentageValue("100%")).to.eq("100%"); expect(percentageValue("1000%")).to.eq("1000%"); }); - it("should throw on invalid values", () => { - expect(() => percentageValue("0%%")).to.throw(); - expect(() => percentageValue("20")).to.throw(); - expect(() => percentageValue("FF%")).to.throw(); - }); }); describe("measurementOrPercentValue", () => { @@ -181,8 +161,6 @@ describe("values", () => { }); it("should throw on invalid values", () => { expect(() => measurementOrPercentValue(NaN)).to.throw(); - expect(() => measurementOrPercentValue("10%%")).to.throw(); - expect(() => measurementOrPercentValue("10F")).to.throw(); }); }); diff --git a/src/util/values.ts b/src/util/values.ts index f44e2eb1d9..4776210e69 100644 --- a/src/util/values.ts +++ b/src/util/values.ts @@ -4,6 +4,23 @@ // Most of the rest of the types not defined here are either aliases of existing types or enumerations. // Enumerations should probably just be implemented as enums, with instructions to end-users, without a runtime check. +// -?[0-9]+(\.[0-9]+)?(mm|cm|in|pt|pc|pi) +export type UniversalMeasure = `${"-" | ""}${number}${"mm" | "cm" | "in" | "pt" | "pc" | "pi"}`; + +// +// +// +// +// +export type PositiveUniversalMeasure = `${number}${"mm" | "cm" | "in" | "pt" | "pc" | "pi"}`; + +// +// +// +// +// +export type Percentage = `${"-" | ""}${number}%`; + // // // @@ -70,30 +87,23 @@ export const uCharHexNumber = (val: string): string => hexBinary(val, 1); // // // -export const universalMeasureValue = (val: string): string => { +export const universalMeasureValue = (val: UniversalMeasure): UniversalMeasure => { const unit = val.slice(-2); - if (!universalMeasureUnits.includes(unit)) { - throw new Error(`Invalid unit '${unit}' specified. Valid units are ${universalMeasureUnits.join(", ")}`); - } const amount = val.substring(0, val.length - 2); - if (isNaN(Number(amount))) { - throw new Error(`Invalid value '${amount}' specified. Expected a valid number.`); - } - return `${Number(amount)}${unit}`; + return `${Number(amount)}${unit}` as UniversalMeasure; }; -const universalMeasureUnits = ["mm", "cm", "in", "pt", "pc", "pi"]; // // // // // -export const positiveUniversalMeasureValue = (val: string): string => { +export const positiveUniversalMeasureValue = (val: PositiveUniversalMeasure): PositiveUniversalMeasure => { const value = universalMeasureValue(val); if (parseFloat(value) < 0) { throw new Error(`Invalid value '${value}' specified. Expected a positive number.`); } - return value; + return value as PositiveUniversalMeasure; }; // @@ -123,25 +133,25 @@ export const hexColorValue = (val: string): string => { // // // -export const signedTwipsMeasureValue = (val: string | number): string | number => +export const signedTwipsMeasureValue = (val: UniversalMeasure | number): UniversalMeasure | number => typeof val === "string" ? universalMeasureValue(val) : decimalNumber(val); // // // -export const hpsMeasureValue = (val: string | number): string | number => +export const hpsMeasureValue = (val: PositiveUniversalMeasure | number): string | number => typeof val === "string" ? positiveUniversalMeasureValue(val) : unsignedDecimalNumber(val); // // // -export const signedHpsMeasureValue = (val: string | number): string | number => +export const signedHpsMeasureValue = (val: UniversalMeasure | number): string | number => typeof val === "string" ? universalMeasureValue(val) : decimalNumber(val); // // // -export const twipsMeasureValue = (val: string | number): string | number => +export const twipsMeasureValue = (val: PositiveUniversalMeasure | number): PositiveUniversalMeasure | number => typeof val === "string" ? positiveUniversalMeasureValue(val) : unsignedDecimalNumber(val); // @@ -149,14 +159,8 @@ export const twipsMeasureValue = (val: string | number): string | number => // // // -export const percentageValue = (val: string): string => { - if (val.slice(-1) !== "%") { - throw new Error(`Invalid value '${val}'. Expected percentage value (eg '55%')`); - } +export const percentageValue = (val: Percentage): Percentage => { const percent = val.substring(0, val.length - 1); - if (isNaN(Number(percent))) { - throw new Error(`Invalid value '${percent}' specified. Expected a valid number.`); - } return `${Number(percent)}%`; }; @@ -172,14 +176,14 @@ export const percentageValue = (val: string): string => { // // -export const measurementOrPercentValue = (val: number | string): number | string => { +export const measurementOrPercentValue = (val: number | Percentage | UniversalMeasure): number | UniversalMeasure | Percentage => { if (typeof val === "number") { return decimalNumber(val); } if (val.slice(-1) === "%") { - return percentageValue(val); + return percentageValue(val as Percentage); } - return universalMeasureValue(val); + return universalMeasureValue(val as UniversalMeasure); }; //