diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a8d3138 --- /dev/null +++ b/.gitignore @@ -0,0 +1,50 @@ +# Node modules +node_modules/ + +# Build output +# dist/ +build/ +lib/ +out/ +reports/ + +# TypeScript cache +*.tsbuildinfo + +# Jest test output +coverage/ +*.log +jest-test-results.json + +# Logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Env files +.env +.env.*.local + +# IDEs and editors +.vscode/ +.idea/ +*.sublime-workspace +*.sublime-project + +# MacOS +.DS_Store + +# Windows +Thumbs.db +ehthumbs.db + +# Optional: if using Yarn PnP +.pnp.* +.yarn/cache/ +.yarn/unplugged/ +.yarn/build-state.yml +.yarn/install-state.gz + +# Optional: if using TurboRepo or similar monorepo tools +.turbo/ \ No newline at end of file diff --git a/README.md b/README.md index 6c2fc68..36c7241 100644 --- a/README.md +++ b/README.md @@ -1,140 +1,476 @@ -xmlToJSON -========= - -A simple javascript module for converting XML into JSON within the browser. - -Features -* no external dependencies -* small (~3kb minified) -* simple parsing. pass either a string or xml node and get back a javascipt object ( use JSON.stringify(obj) to get the string representation ) -* supports atrributes, text, cdata, namespaces, default namespaces, attributes with namespaces... you get the idea -* lots of rendering of options -* consistent, predictable output -* browser support - it works on IE 9+, and nearly every version of Chrome, Safari, and Firefox as well as iOS, Android, and Blackberry. (xmlToJSON will work for IE 7/8 as well if you set the xmlns option to false) - -Parsing XML (esp. with namespaces) with javascript remains one of the great frustrations of writing web applications. -Most methods are limited by such things as poor browser support, poor or non-existent namespace support, poor attribute handling, incomplete representation, and bloated dependencies. - -xmlToJSON may not solve all of your woes, but it solved some of mine :) - -Usage ------ -Include the src -``` - - ``` -and enjoy! xmlToJSON is packaged as a simple module, so use it like this - ```javascript - testString = 'It Works!'; // get some xml (string or document/node) - result = xmlToJSON.parseString(testString); // parse - ``` - The (prettified) result of the above code is - ```javascript +# XJX + +A modern ESM library for bidirectional XML to JSON conversion with comprehensive support for namespaces, CDATA sections, comments, processing instructions, and more. + +[![npm version](https://img.shields.io/npm/v/xjx.svg)](https://www.npmjs.com/package/xjx) +[![Downloads](https://img.shields.io/npm/dm/xjx.svg)](https://www.npmjs.com/package/xjx) +[![License](https://img.shields.io/npm/l/xjx.svg)](https://github.com/yourusername/xjx/blob/main/LICENSE) + +## Features + +- **Bidirectional Conversion**: Convert XML to JSON and back with high fidelity +- **Complete Node Type Support**: + - Elements with text content + - Attributes + - Namespaces and prefixes + - CDATA sections + - Comments + - Processing instructions +- **Configurable Output**: Customize JSON property names and output options +- **Value Transformers**: Apply type conversions (string → number, boolean, etc.) +- **Path Navigation**: Extract values using simple dot-notation paths +- **Cross-Platform**: Works in both browser and Node.js environments +- **No Dependencies**: Zero production dependencies by default +- **TypeScript**: Full TypeScript support with comprehensive type definitions +- **ESM & UMD**: Modern ESM modules with UMD fallback for wider compatibility + +## Installation + +### Browser Installation + +You can install XJX via npm and bundle it with your application: + +```bash +npm install xjx +``` + +Or use a CDN for direct browser usage: + +```html + + + + + +``` + +### Node.js Installation (with JSDOM) + +XJX uses DOM APIs and requires a DOM implementation in Node.js environments. By default, it uses JSDOM: + +```bash +npm install xjx jsdom +``` + +JSDOM is a peer dependency that is marked as optional. You'll need to install it separately for Node.js usage. + +### Custom DOM Configuration with Node + +If you prefer to use an alternative DOM implementation, you can use `@xmldom/xmldom`: + +```bash +npm install xjx @xmldom/xmldom +``` + +XJX will automatically detect and use one of these DOM implementations in Node.js environments. + +## Basic Usage Example + +Converting between XML and JSON is straightforward: + +```javascript +import { XJX } from 'xjx'; + +// Create an instance of XJX with default configuration +const xjx = new XJX(); + +// Sample XML string +const xmlString = ` + + + The Great Gatsby + F. Scott Fitzgerald + 1925 + + +`; + +// Convert XML to JSON +const jsonObj = xjx.xmlToJson(xmlString); +console.log(JSON.stringify(jsonObj, null, 2)); + +// Extract specific values using path navigation +const bookTitle = xjx.getPath(jsonObj, 'library.book.title.$val'); +console.log(`Book title: ${bookTitle}`); // "The Great Gatsby" + +// Convert JSON back to XML +const newXml = xjx.jsonToXml(jsonObj); +console.log(newXml); + +// Clean up when done (important for Node.js environments) +xjx.cleanup(); +``` + +## Configuration Options + +XJX is highly configurable. Here's an overview of the available configuration options: + +```javascript +const config = { + // Features to preserve during transformation + preserveNamespaces: true, // Preserve namespace information + preserveComments: true, // Preserve XML comments + preserveProcessingInstr: true, // Preserve processing instructions + preserveCDATA: true, // Preserve CDATA sections + preserveTextNodes: true, // Preserve text nodes + preserveWhitespace: false, // Preserve whitespace-only text nodes + preserveAttributes: true, // Preserve element attributes + + // Output options + outputOptions: { + prettyPrint: true, // Format XML output with indentation + indent: 2, // Indentation spaces for pretty printing + compact: true, // Remove empty/undefined properties + json: {}, // Custom JSON serialization options + xml: { + declaration: true, // Include XML declaration in output + }, + }, + + // Property names in the JSON representation + propNames: { + namespace: "$ns", // Namespace URI property + prefix: "$pre", // Namespace prefix property + attributes: "$attr", // Attributes collection property + value: "$val", // Text value property + cdata: "$cdata", // CDATA content property + comments: "$cmnt", // Comments property + instruction: "$pi", // Processing instruction property + target: "$trgt", // PI target property + children: "$children", // Child nodes collection property + }, + + // Optional value transformers + valueTransforms: [ + // Array of transformer instances (see Value Transformers section) + ] +}; + +// Create an instance with custom configuration +const xjx = new XJX(config); +``` + +You can pass a partial configuration to override just the options you need: + +```javascript +// Override only specific options +const xjx = new XJX({ + preserveWhitespace: true, + outputOptions: { + prettyPrint: false, + } +}); +``` + +## Namespace Handling + +XJX provides comprehensive support for XML namespaces: + +```xml + + Content + +``` + +The resulting JSON maintains namespace information: + +```javascript { - "xml": { - "a": [ - { - "text": "It Works!" - } - ] + "root": { + "$ns": "http://default-ns.com", + "$children": [ + { + "item": { + "$ns": "http://example.org", + "$pre": "ns", + "$attr": [ + { "id": { "$val": "123" } } + ], + "$val": "Content" + } + } + ] + } +} +``` + +When converting back to XML, namespace declarations and prefixes are preserved. + +## Value Transformers + +Value transformers allow automatic conversion between string values in XML and typed values in JSON. For example, you can convert numeric strings to actual numbers or boolean strings to boolean values. + +### Included Transformers + +XJX comes with several built-in transformers: + +#### BooleanTransformer + +Converts strings like "true" and "false" to actual boolean values. + +```javascript +import { XJX, BooleanTransformer } from 'xjx'; + +const xjx = new XJX(); +xjx.addTransformer(new BooleanTransformer({ + trueValues: ['true', 'yes', '1'], + falseValues: ['false', 'no', '0'] +})); +``` + +#### NumberTransformer + +Converts numeric strings to actual number values. + +```javascript +import { XJX, NumberTransformer } from 'xjx'; + +const xjx = new XJX(); +xjx.addTransformer(new NumberTransformer({ + parseIntegers: true, + parseFloats: true, + integerFormat: /^-?\d+$/, + floatFormat: /^-?\d*\.\d+$/ +})); +``` + +#### StringReplaceTransformer + +Applies regex-based string replacements. + +```javascript +import { XJX, StringReplaceTransformer } from 'xjx'; + +const xjx = new XJX(); +xjx.addTransformer(new StringReplaceTransformer({ + pattern: '/\\s+/g', // Remove whitespace + replacement: '' +})); +``` + +### Creating Custom Transformers + +You can create custom transformers by extending the `ValueTransformer` base class: + +```javascript +import { XJX, ValueTransformer, TransformContext } from 'xjx'; + +class DateTransformer extends ValueTransformer { + // XML to JSON transformation + protected xmlToJson(value, context) { + if (typeof value !== 'string') return value; + + // Convert ISO date strings to Date objects + if (/^\d{4}-\d{2}-\d{2}$/.test(value)) { + return new Date(value); } + + return value; + } + + // JSON to XML transformation + protected jsonToXml(value, context) { + if (value instanceof Date) { + // Format date as ISO string + return value.toISOString().split('T')[0]; + } + + return value; + } } + +const xjx = new XJX(); +xjx.addTransformer(new DateTransformer()); +``` + +## XJX API Reference + +### Constructor + +```javascript +const xjx = new XJX(config); +``` + +Creates a new XJX instance with optional configuration. + +### Core Methods + +#### xmlToJson(xmlString) + +Converts an XML string to a JSON object. + +```javascript +const jsonObj = xjx.xmlToJson(xmlString); ``` -Node Usage ----------- -While this library does not officialy support use in the NodeJS environment; several users have reported good results by requiring the xmldom package. - -User [sethb0](https://github.com/sethb0) has suggested the following workaround example. - -``` -const { DOMParser } = require('xmldom'); -const xmlToJSON = require('xmlToJSON'); -xmlToJSON.stringToXML = (string) => new DOMParser().parseFromString(string, 'text/xml'); -``` - - -Options -------- -```javascript -// These are the option defaults -var options = { - mergeCDATA: true, // extract cdata and merge with text nodes - grokAttr: true, // convert truthy attributes to boolean, etc - grokText: true, // convert truthy text/attr to boolean, etc - normalize: true, // collapse multiple spaces to single space - xmlns: true, // include namespaces as attributes in output - namespaceKey: '_ns', // tag name for namespace objects - textKey: '_text', // tag name for text nodes - valueKey: '_value', // tag name for attribute values - attrKey: '_attr', // tag for attr groups - cdataKey: '_cdata', // tag for cdata nodes (ignored if mergeCDATA is true) - attrsAsObject: true, // if false, key is used as prefix to name, set prefix to '' to merge children and attrs. - stripAttrPrefix: true, // remove namespace prefixes from attributes - stripElemPrefix: true, // for elements of same name in diff namespaces, you can enable namespaces and access the nskey property - childrenAsArray: true // force children into arrays -}; - -// you can change the defaults by passing the parser an options object of your own -var myOptions = { - mergeCDATA: false, - xmlns: false, - attrsAsObject: false +#### jsonToXml(jsonObj) + +Converts a JSON object (in XJX format) to an XML string. + +```javascript +const xmlString = xjx.jsonToXml(jsonObj); +``` + +#### getPath(obj, path, fallback) + +Retrieves a value from a JSON object using dot notation path. + +```javascript +const value = xjx.getPath(jsonObj, 'root.item.title.$val', 'Default'); +``` + +#### prettyPrintXml(xmlString) + +Formats an XML string with proper indentation. + +```javascript +const formattedXml = xjx.prettyPrintXml(xmlString); +``` + +#### validateXML(xmlString) + +Checks if an XML string is well-formed. + +```javascript +const result = xjx.validateXML(xmlString); +if (result.isValid) { + console.log('XML is valid'); +} else { + console.error(`XML is invalid: ${result.message}`); } +``` -result = xmlToJSON.parseString(xmlString, myOptions); +### Transformer Methods + +#### addTransformer(transformer) + +Adds a value transformer to the configuration. + +```javascript +xjx.addTransformer(new NumberTransformer()); ``` -A more complicated example (with xmlns: true) -```xml - - - - one - ]]>two - three - - +#### clearTransformers() + +Removes all value transformers from the configuration. + +```javascript +xjx.clearTransformers(); ``` -results in +### Cleanup + +#### cleanup() + +Releases any resources, especially important in Node.js environments. + +```javascript +xjx.cleanup(); +``` + +## Detailed Method Explanations + +### getPath Method + +The `getPath` method provides a powerful way to extract values from the XML-JSON structure using dot notation. It handles array traversal and special XML structures automatically: + +```javascript +xjx.getPath(jsonObj, 'path.to.value', defaultValue); +``` + +Key features: + +1. **Dot Notation**: Navigate through nested objects using dot notation (e.g., `library.book.title.$val`) +2. **Array Traversal**: Automatically traverses arrays and collects matching values +3. **Index Access**: Access specific array elements with numeric indices (e.g., `library.book.0.title.$val`) +4. **Special XML Properties**: Access XML-specific properties using configured property names (`$val`, `$attr`, etc.) +5. **Default Values**: Specify a fallback value if the path doesn't exist + +Examples: + +```javascript +// Get a simple text value +const title = xjx.getPath(jsonObj, 'library.book.title.$val'); + +// Get an attribute value +const id = xjx.getPath(jsonObj, 'library.book.$attr.0.id.$val'); + +// Get values from all books in an array +const authors = xjx.getPath(jsonObj, 'library.book.author.$val'); +// Result: ['F. Scott Fitzgerald', 'Harper Lee', ...] + +// Get a specific book by index +const secondBook = xjx.getPath(jsonObj, 'library.book.1'); + +// Provide a default value if path doesn't exist +const publisher = xjx.getPath(jsonObj, 'library.book.publisher.$val', 'Unknown'); +``` + +### generateSchema Method + +The JSONUtil class includes a `generateJsonSchema` method that creates a JSON Schema for the XJX JSON format based on the current configuration: + +```javascript +const jsonUtil = new JSONUtil(config); +const schema = jsonUtil.generateJsonSchema(); +``` + +The generated schema: + +1. Reflects current configuration settings (property names, preserved features) +2. Includes proper type information for all properties +3. Supports recursive element structures +4. Documents the purpose of each property +5. Can be used for validation with standard JSON Schema validators + +This is useful for: +- Validating XJX JSON structures +- Generating documentation +- Providing hints in IDEs that support JSON Schema +- Data validation in applications + +### jsonToXJX Method + +The library provides a utility method to convert standard JSON objects to the XJX format: + +```javascript +const jsonUtil = new JSONUtil(config); +const xjxJson = jsonUtil.fromJsonObject(standardJson, rootElementName); +``` + +This transforms a standard JSON object: + +```javascript +{ + "name": "John", + "age": 30, + "roles": ["admin", "user"] +} +``` + +Into the XJX format: + ```javascript { - "xml": [{ - "attr": { - "xmlns": { - "value": "http://default.namespace.uri" - } - }, - "a": [{ - "b": [{ - "attr": { - "id": { - "value": 1 - } - }, - "text": "one" - }, { - "attr": { - "id": { - "value": 2 - } - }, - "text": "some two" - }], - "c": [{ - "attr": { - "xmlns:ns": { - "value": "http://another.namespace" - }, - "id": { - "value": 3 - } - }, - "text": "three" - }] - }] - }] + "user": { + "$children": [ + { "name": { "$val": "John" } }, + { "age": { "$val": 30 } }, + { + "roles": { + "$children": [ + { "$val": "admin" }, + { "$val": "user" } + ] + } + } + ] + } } ``` +This is useful when you want to convert arbitrary JSON data to XML. The second parameter allows you to specify the root element name (in this example, "user"). + +## License + +MIT \ No newline at end of file diff --git a/app/index.html b/app/index.html new file mode 100644 index 0000000..ea0a319 --- /dev/null +++ b/app/index.html @@ -0,0 +1,14 @@ + + + + + + + XJX - XML/JSON Converter + + + +
+ + + \ No newline at end of file diff --git a/app/package-lock.json b/app/package-lock.json new file mode 100644 index 0000000..277d7b9 --- /dev/null +++ b/app/package-lock.json @@ -0,0 +1,2305 @@ +{ + "name": "xjx-app", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "xjx-app", + "version": "1.0.0", + "dependencies": { + "@mdi/font": "^7.2.96", + "pinia": "^2.1.6", + "vue": "^3.3.4", + "vuetify": "^3.3.20", + "xjx": "file:../" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^4.3.4", + "eslint": "^8.49.0", + "eslint-plugin-vue": "^9.17.0", + "vite": "^4.4.9" + } + }, + "..": { + "name": "xjx", + "version": "1.0.0", + "license": "MIT", + "devDependencies": { + "@rollup/plugin-commonjs": "^25.0.8", + "@rollup/plugin-node-resolve": "^15.3.1", + "@rollup/plugin-terser": "^0.4.4", + "@rollup/plugin-typescript": "^11.1.6", + "@types/jest": "^29.5.0", + "@types/node": "^18.15.11", + "@typescript-eslint/eslint-plugin": "^5.57.1", + "@typescript-eslint/parser": "^5.57.1", + "eslint": "^8.37.0", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-prettier": "^4.2.1", + "jest": "^29.6.0", + "jest-environment-jsdom": "^29.6.0", + "jest-html-reporters": "^3.1.7", + "jsdom": "^26.1.0", + "prettier": "^2.8.7", + "rimraf": "^4.4.1", + "rollup": "^3.29.5", + "rollup-plugin-dts": "^5.3.1", + "rollup-plugin-filesize": "^10.0.0", + "rollup-plugin-gzip": "^4.0.1", + "rollup-plugin-visualizer": "^5.14.0", + "ts-jest": "^29.1.1", + "typedoc": "^0.24.1", + "typescript": "^5.1.6" + }, + "engines": { + "node": ">=14.16.0" + }, + "peerDependencies": { + "jsdom": "^21.1.1" + }, + "peerDependenciesMeta": { + "@xmldom/xmldom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.6.1.tgz", + "integrity": "sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@mdi/font": { + "version": "7.4.47", + "resolved": "https://registry.npmjs.org/@mdi/font/-/font-7.4.47.tgz", + "integrity": "sha512-43MtGpd585SNzHZPcYowu/84Vz2a2g31TvPMTm9uTiCSWzaheQySUcSyUH/46fPnuPQWof2yd0pGBtzee/IQWw==", + "license": "Apache-2.0" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz", + "integrity": "sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.0.0 || ^5.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.13", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", + "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.13", + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.11", + "postcss": "^8.4.48", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", + "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/@vue/reactivity": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", + "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", + "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", + "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/runtime-core": "3.5.13", + "@vue/shared": "3.5.13", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", + "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "vue": "3.5.13" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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, + "license": "Python-2.0" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-vue": { + "version": "9.33.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.33.0.tgz", + "integrity": "sha512-174lJKuNsuDIlLpjeXc5E2Tss8P44uIimAfGD0b90k0NoirJqpG7stLuU9Vp/9ioTOrQdWVREc4mRd1BD+CvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "globals": "^13.24.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.3", + "vue-eslint-parser": "^9.4.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "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/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "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, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/pinia": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.3.1.tgz", + "integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.3", + "vue-demi": "^0.14.10" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.4.4", + "vue": "^2.7.0 || ^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.29.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", + "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "4.5.13", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.13.tgz", + "integrity": "sha512-Hgp8IF/yZDzKsN1hQWOuQZbrKiaFsbQud+07jJ8h9m9PaHWkpvZ5u55Xw5yYjWRXwRQ4jwFlJvY7T7FUJG9MCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", + "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-sfc": "3.5.13", + "@vue/runtime-dom": "3.5.13", + "@vue/server-renderer": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-eslint-parser": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", + "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/vuetify": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-3.8.2.tgz", + "integrity": "sha512-UJNFP4egmKJTQ3V3MKOq+7vIUKO7/Fko5G6yUsOW2Rm0VNBvAjgO6VY6EnK3DTqEKN6ugVXDEPw37NQSTGLZvw==", + "license": "MIT", + "engines": { + "node": "^12.20 || >=14.13" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/johnleider" + }, + "peerDependencies": { + "typescript": ">=4.7", + "vite-plugin-vuetify": ">=2.1.0", + "vue": "^3.5.0", + "webpack-plugin-vuetify": ">=3.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vite-plugin-vuetify": { + "optional": true + }, + "webpack-plugin-vuetify": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/xjx": { + "resolved": "..", + "link": true + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/app/package.json b/app/package.json new file mode 100644 index 0000000..53a1841 --- /dev/null +++ b/app/package.json @@ -0,0 +1,24 @@ +{ + "name": "xjx-app", + "version": "1.0.0", + "private": true, + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview", + "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore" + }, + "dependencies": { + "vue": "^3.3.4", + "vuetify": "^3.3.20", + "pinia": "^2.1.6", + "@mdi/font": "^7.2.96", + "xjx": "file:../" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^4.3.4", + "eslint": "^8.49.0", + "eslint-plugin-vue": "^9.17.0", + "vite": "^4.4.9" + } + } \ No newline at end of file diff --git a/app/src/App.vue b/app/src/App.vue new file mode 100644 index 0000000..da61cc1 --- /dev/null +++ b/app/src/App.vue @@ -0,0 +1,99 @@ + + + \ No newline at end of file diff --git a/app/src/components/ConfigPanel.vue b/app/src/components/ConfigPanel.vue new file mode 100644 index 0000000..ebe9e38 --- /dev/null +++ b/app/src/components/ConfigPanel.vue @@ -0,0 +1,248 @@ + + + \ No newline at end of file diff --git a/app/src/components/ConfigurationViewer.vue b/app/src/components/ConfigurationViewer.vue new file mode 100644 index 0000000..bcbf009 --- /dev/null +++ b/app/src/components/ConfigurationViewer.vue @@ -0,0 +1,152 @@ + + + + + \ No newline at end of file diff --git a/app/src/components/JsonEditor.vue b/app/src/components/JsonEditor.vue new file mode 100644 index 0000000..9c2e85d --- /dev/null +++ b/app/src/components/JsonEditor.vue @@ -0,0 +1,125 @@ + + + + + \ No newline at end of file diff --git a/app/src/components/PathNavigator.vue b/app/src/components/PathNavigator.vue new file mode 100644 index 0000000..6c9af76 --- /dev/null +++ b/app/src/components/PathNavigator.vue @@ -0,0 +1,144 @@ + + + \ No newline at end of file diff --git a/app/src/components/SchemaViewer.vue b/app/src/components/SchemaViewer.vue new file mode 100644 index 0000000..3333f59 --- /dev/null +++ b/app/src/components/SchemaViewer.vue @@ -0,0 +1,119 @@ + + + + + \ No newline at end of file diff --git a/app/src/components/XmlEditor.vue b/app/src/components/XmlEditor.vue new file mode 100644 index 0000000..e1dffbd --- /dev/null +++ b/app/src/components/XmlEditor.vue @@ -0,0 +1,116 @@ + + + + + \ No newline at end of file diff --git a/app/src/layouts/MainLayout.vue b/app/src/layouts/MainLayout.vue new file mode 100644 index 0000000..06a2aff --- /dev/null +++ b/app/src/layouts/MainLayout.vue @@ -0,0 +1,62 @@ + + + \ No newline at end of file diff --git a/app/src/main.js b/app/src/main.js new file mode 100644 index 0000000..04d5e8f --- /dev/null +++ b/app/src/main.js @@ -0,0 +1,47 @@ +import { createApp } from 'vue'; +import { createPinia } from 'pinia'; + +// Vuetify +import 'vuetify/styles'; +import { createVuetify } from 'vuetify'; +import * as components from 'vuetify/components'; +import * as directives from 'vuetify/directives'; +import { aliases, mdi } from 'vuetify/iconsets/mdi'; +import '@mdi/font/css/materialdesignicons.css'; + +// App component +import App from './App.vue'; + +// Create Vuetify instance +const vuetify = createVuetify({ + components, + directives, + icons: { + defaultSet: 'mdi', + aliases, + sets: { + mdi, + }, + }, + theme: { + defaultTheme: 'light', + themes: { + light: { + colors: { + primary: '#1867C0', + secondary: '#5CBBF6', + accent: '#005CAF', + }, + }, + }, + }, +}); + +// Create Pinia instance +const pinia = createPinia(); + +// Create and mount the app +const app = createApp(App); +app.use(pinia); +app.use(vuetify); +app.mount('#app'); \ No newline at end of file diff --git a/app/src/services/xjxService.js b/app/src/services/xjxService.js new file mode 100644 index 0000000..bea4ce1 --- /dev/null +++ b/app/src/services/xjxService.js @@ -0,0 +1,145 @@ +/** + * XJX Service + * + * Provides a wrapper around the XJX library for centralized management + * of XML/JSON conversion and other operations. + */ +import { XJX } from 'xjx'; + + +export default class XjxService { + /** + * Creates an XJX instance with the provided configuration + * @param {Object} config - XJX configuration options + * @returns {XJX} XJX instance + */ + static createInstance(config) { + return new XJX(config); + } + + /** + * Convert XML string to JSON + * @param {string} xmlString - XML content + * @param {Object} config - XJX configuration options + * @returns {Object} JSON representation of the XML + */ + static xmlToJson(xmlString, config) { + const xjx = this.createInstance(config); + try { + const result = xjx.xmlToJson(xmlString); + return result; + } finally { + xjx.cleanup(); + } + } + + /** + * Convert JSON object to XML string + * @param {Object} jsonObj - JSON content + * @param {Object} config - XJX configuration options + * @returns {string} XML representation of the JSON + */ + static jsonToXml(jsonObj, config) { + const xjx = this.createInstance(config); + try { + const result = xjx.jsonToXml(jsonObj); + return result; + } finally { + xjx.cleanup(); + } + } + + /** + * Pretty print XML string + * @param {string} xmlString - XML content + * @param {Object} config - XJX configuration options + * @returns {string} Formatted XML + */ + static prettyPrintXml(xmlString, config) { + const xjx = this.createInstance(config); + try { + const result = xjx.prettyPrintXml(xmlString); + return result; + } finally { + xjx.cleanup(); + } + } + + /** + * Validate XML string + * @param {string} xmlString - XML content + * @param {Object} config - XJX configuration options + * @returns {Object} Validation result {isValid, message} + */ + static validateXml(xmlString, config) { + const xjx = this.createInstance(config); + try { + const result = xjx.validateXML(xmlString); + return result; + } finally { + xjx.cleanup(); + } + } + + /** + * Get a value from JSON object using a path + * @param {Object} jsonObj - JSON object + * @param {string} path - Dot notation path + * @param {Object} config - XJX configuration options + * @param {any} fallback - Fallback value if path doesn't exist + * @returns {any} Retrieved value + */ + static getPath(jsonObj, path, config, fallback) { + const xjx = this.createInstance(config); + try { + const result = xjx.getPath(jsonObj, path, fallback); + return result; + } finally { + xjx.cleanup(); + } + } + + /** + * Format JSON string with proper indentation + * @param {string} jsonString - JSON string + * @param {number} indent - Indentation spaces + * @returns {string} Formatted JSON string + */ + static formatJson(jsonString, indent = 2) { + try { + const jsonObj = JSON.parse(jsonString); + return JSON.stringify(jsonObj, null, indent); + } catch (error) { + throw new Error(`Failed to format JSON: ${error.message}`); + } + } + + /** + * Validate JSON string + * @param {string} jsonString - JSON string + * @returns {Object} Validation result {isValid, message} + */ + static validateJson(jsonString) { + try { + JSON.parse(jsonString); + return { isValid: true }; + } catch (error) { + return { isValid: false, message: error.message }; + } + } + + /** + * Generate a JSON schema based on the current configuration + * @param {Object} config - XJX configuration options + * @returns {Object} JSON schema object for validating XML-JSON documents + */ + static generateJsonSchema(config) { + const xjx = this.createInstance(config); + try { + const schema = xjx.generateJsonSchema(); + return schema; + } finally { + xjx.cleanup(); + } + } +} \ No newline at end of file diff --git a/app/src/stores/xjxStore.js b/app/src/stores/xjxStore.js new file mode 100644 index 0000000..436fe3f --- /dev/null +++ b/app/src/stores/xjxStore.js @@ -0,0 +1,198 @@ +import { defineStore } from "pinia"; +import XjxService from "../services/xjxService"; + +// Default XML example +const DEFAULT_XML = ` + + + Example Item + This is a inside]]> with special characters & + + + + + XML + JSON + Converter + + +`; + +// Create and export the store +export const useXjxStore = defineStore("xjx", { + state: () => ({ + // XML and JSON content + xmlContent: DEFAULT_XML, + jsonContent: "", + + // Path navigation + pathInput: "", + pathResult: "", + + // Configuration options + config: { + preserveNamespaces: true, + preserveComments: true, + preserveProcessingInstr: true, + preserveCDATA: true, + preserveTextNodes: true, + preserveAttributes: true, + preserveWhitespace: false, + + outputOptions: { + prettyPrint: true, + indent: 2, + compact: true, + json: {}, + xml: { + declaration: true, + }, + }, + + propNames: { + namespace: "$ns", + prefix: "$pre", + attributes: "$attr", + value: "$val", + cdata: "$cdata", + comments: "$cmnt", + instruction: "$pi", + target: "$trgt", + children: "$children", + }, + + // New: Value transformers array (initialized as an empty array) + valueTransforms: [], + }, + + // Utility state + isProcessing: false, + error: null, + + // Notification system + notification: { + show: false, + text: "", + color: "info", + timeout: 3000, + }, + }), + + actions: { + // Convert XML to JSON + async convertXmlToJson() { + this.isProcessing = true; + this.error = null; + + try { + // Use the XjxService to convert XML to JSON + const jsonObj = XjxService.xmlToJson(this.xmlContent, this.config); + + // Format and store the result + this.jsonContent = JSON.stringify(jsonObj, null, 2); + } catch (error) { + this.error = `Error converting XML to JSON: ${error.message}`; + console.error(error); + } finally { + this.isProcessing = false; + } + }, + + // Convert JSON to XML + async convertJsonToXml() { + this.isProcessing = true; + this.error = null; + + try { + // Parse JSON content + const jsonObj = JSON.parse(this.jsonContent); + + // Use the XjxService to convert JSON to XML + const xmlString = XjxService.jsonToXml(jsonObj, this.config); + + // Store the result + this.xmlContent = xmlString; + } catch (error) { + this.error = `Error converting JSON to XML: ${error.message}`; + console.error(error); + } finally { + this.isProcessing = false; + } + }, + + // Reset to defaults + resetToDefault() { + this.xmlContent = DEFAULT_XML; + this.jsonContent = ""; + this.pathInput = ""; + this.pathResult = ""; + this.error = null; + this.config.valueTransforms = []; // Reset transformers + + // Convert the default XML to JSON + this.convertXmlToJson(); + }, + + // Get a value using path + getPath() { + this.error = null; + + try { + if (!this.jsonContent) { + throw new Error( + "Please convert XML to JSON first before using getPath" + ); + } + + const jsonObj = JSON.parse(this.jsonContent); + const path = this.pathInput.trim(); + + if (!path) { + throw new Error("Please enter a path to navigate"); + } + + // Use the XjxService to get the path + const result = XjxService.getPath(jsonObj, path, this.config); + + // Format the result for display + if (result === undefined) { + this.pathResult = "Path not found"; + } else if (typeof result === "object") { + this.pathResult = JSON.stringify(result, null, 2); + } else { + this.pathResult = String(result); + } + } catch (error) { + this.error = `Error getting path: ${error.message}`; + this.pathResult = ""; + console.error(error); + } + }, + + // Clear path navigation + clearPath() { + this.pathInput = ""; + this.pathResult = ""; + }, + + // Show notification + showNotification(text, color = "info", timeout = 3000) { + this.notification = { + show: true, + text, + color, + timeout, + }; + + // Auto-hide notification after timeout + setTimeout(() => { + this.hideNotification(); + }, timeout); + }, + + // Hide notification + hideNotification() { + this.notification.show = false; + }, + } +}); diff --git a/app/vite.config.js b/app/vite.config.js new file mode 100644 index 0000000..92416d9 --- /dev/null +++ b/app/vite.config.js @@ -0,0 +1,21 @@ +import { defineConfig } from 'vite'; +import vue from '@vitejs/plugin-vue'; +import { fileURLToPath, URL } from 'node:url'; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [vue()], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + } + }, + server: { + port: 3000 + }, + build: { + outDir: 'dist', + emptyOutDir: true, + sourcemap: true + } +}); \ No newline at end of file diff --git a/bower.json b/bower.json deleted file mode 100644 index 34c8a54..0000000 --- a/bower.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "xmltojson", - "version": "1.3.4", - "main": "./lib/xmlToJSON.js", - "dependencies": {}, - "ignore": [ - "*", - "!lib/*", - "!LICENSE", - "!README.md" - ] -} \ No newline at end of file diff --git a/dist/dts/XJX.d.ts b/dist/dts/XJX.d.ts new file mode 100644 index 0000000..447cf64 --- /dev/null +++ b/dist/dts/XJX.d.ts @@ -0,0 +1,82 @@ +import { Configuration } from "./core/types/config-types"; +import { ValueTransformer } from "./core/transformers"; +export declare class XJX { + private config; + private xmlToJsonConverter; + private jsonToXmlConverter; + private jsonUtil; + private xmlUtil; + /** + * Constructor for XJX utility + * @param config Configuration options + */ + constructor(config?: Partial); + /** + * Convert XML string to JSON + * @param xmlString XML content as string + * @returns JSON object representing the XML content + */ + xmlToJson(xmlString: string): Record; + /** + * Convert JSON object back to XML string + * @param jsonObj JSON object to convert + * @returns XML string + */ + jsonToXml(jsonObj: Record): string; + /** + * Pretty print an XML string + * @param xmlString XML string to format + * @returns Formatted XML string + */ + prettyPrintXml(xmlString: string): string; + /** + * Safely retrieves a value from a JSON object using a dot-separated path. + * @param obj The input JSON object + * @param path The dot-separated path string (e.g., "root.item.description.$val") + * @param fallback Value to return if the path does not resolve + * @returns The value at the specified path or the fallback value + */ + getPath(obj: Record, path: string, fallback?: any): any; + /** + * Validate XML string + * @param xmlString XML string to validate + * @returns Validation result + */ + validateXML(xmlString: string): { + isValid: boolean; + message?: string; + }; + /** + * Generate a JSON schema based on the current configuration + * @returns JSON schema object for validating XML-JSON documents + */ + generateJsonSchema(): Record; + /** + * Convert a standard JSON object to the XML-like JSON structure + * @param obj Standard JSON object + * @param root Optional root element configuration (string or object with properties) + * @returns XML-like JSON object ready for conversion to XML + */ + objectToXJX(obj: any, root?: string | Record): Record; + /** + * Generate an example JSON object that matches the current configuration + * @param rootName Name of the root element + * @returns Example JSON object + */ + generateJsonExample(rootName?: string): Record; + /** + * Add a value transformer to the configuration + * @param transformer Value transformer to add + * @returns This XJX instance for chaining + */ + addTransformer(transformer: ValueTransformer): XJX; + /** + * Removes all value transformers from the configuration + * @returns This XJX instance for chaining + */ + clearTransformers(): XJX; + /** + * Clean up any resources + */ + cleanup(): void; +} diff --git a/dist/dts/core/adapters/dom-adapter.d.ts b/dist/dts/core/adapters/dom-adapter.d.ts new file mode 100644 index 0000000..3f99f64 --- /dev/null +++ b/dist/dts/core/adapters/dom-adapter.d.ts @@ -0,0 +1,32 @@ +import { NodeType } from '../types/dom-types'; +export declare const DOMAdapter: { + createParser: () => any; + createSerializer: () => any; + NodeType: typeof NodeType; + parseFromString: (xmlString: string, contentType?: string) => any; + serializeToString: (node: Node) => any; + createDocument: () => any; + createElement: (tagName: string) => any; + createElementNS: (namespaceURI: string, qualifiedName: string) => any; + createTextNode: (data: string) => any; + createCDATASection: (data: string) => any; + createComment: (data: string) => any; + createProcessingInstruction: (target: string, data: string) => any; + /** + * Creates a proper namespace qualified attribute + */ + setNamespacedAttribute: (element: Element, namespaceURI: string | null, qualifiedName: string, value: string) => void; + /** + * Check if an object is a DOM node + */ + isNode: (obj: any) => boolean; + /** + * Get DOM node type as string for debugging + */ + getNodeTypeName: (nodeType: number) => string; + /** + * Get all node attributes as an object + */ + getNodeAttributes: (node: Element) => Record; + cleanup: () => void; +}; diff --git a/dist/dts/core/config/config.d.ts b/dist/dts/core/config/config.d.ts new file mode 100644 index 0000000..a52b30b --- /dev/null +++ b/dist/dts/core/config/config.d.ts @@ -0,0 +1,8 @@ +/** + * Default configuration for the XJX library + */ +import { Configuration } from '../types/config-types'; +/** + * Default configuration + */ +export declare const DEFAULT_CONFIG: Configuration; diff --git a/dist/dts/core/converters/json-to-xml-converter.d.ts b/dist/dts/core/converters/json-to-xml-converter.d.ts new file mode 100644 index 0000000..6765362 --- /dev/null +++ b/dist/dts/core/converters/json-to-xml-converter.d.ts @@ -0,0 +1,32 @@ +/** + * JsonToXmlConverter class for converting JSON to XML with consistent namespace handling + */ +import { Configuration } from "../types/config-types"; +/** + * JsonToXmlConverter for converting JSON to XML + */ +export declare class JsonToXmlConverter { + private config; + private xmlUtil; + private transformUtil; + /** + * Constructor for JsonToXmlConverter + * @param config Configuration options + */ + constructor(config: Configuration); + /** + * Convert JSON object to XML string + * @param jsonObj JSON object to convert + * @returns XML string + */ + convert(jsonObj: Record): string; + /** + * Convert JSON object to DOM node + * @param jsonObj JSON object to convert + * @param doc Document for creating elements + * @param parentContext Optional parent context for transformation chain + * @param path Current path in the JSON object + * @returns DOM Element + */ + private jsonToNode; +} diff --git a/dist/dts/core/converters/xml-to-json-converter.d.ts b/dist/dts/core/converters/xml-to-json-converter.d.ts new file mode 100644 index 0000000..4c5a7e7 --- /dev/null +++ b/dist/dts/core/converters/xml-to-json-converter.d.ts @@ -0,0 +1,32 @@ +/** + * XmlToJsonConverter class for converting XML to JSON with consistent namespace handling + */ +import { Configuration } from "../types/config-types"; +/** + * XmlToJsonConverter Parser for converting XML to JSON + */ +export declare class XmlToJsonConverter { + private config; + private jsonUtil; + private transformUtil; + /** + * Constructor for XmlToJsonConverter + * @param config Configuration options + */ + constructor(config: Configuration); + /** + * Convert XML string to JSON + * @param xmlString XML content as string + * @returns JSON object representing the XML content + */ + convert(xmlString: string): Record; + /** + * Convert a DOM node to JSON representation + * @param node DOM node to convert + * @param parentContext Optional parent context for transformation chain + * @param path Current path in the XML tree + * @returns JSON representation of the node + */ + private nodeToJson; + private cleanNode; +} diff --git a/dist/dts/core/transformers/BooleanTransformer.d.ts b/dist/dts/core/transformers/BooleanTransformer.d.ts new file mode 100644 index 0000000..c60a5ee --- /dev/null +++ b/dist/dts/core/transformers/BooleanTransformer.d.ts @@ -0,0 +1,57 @@ +/** + * Boolean value transformer for the XJX library + */ +import { ValueTransformer, TransformContext } from './ValueTransformer'; +/** + * Interface for BooleanTransformer options + */ +export interface BooleanTransformerOptions { + /** + * Values to consider as true + */ + trueValues?: string[]; + /** + * Values to consider as false + */ + falseValues?: string[]; +} +/** + * Transforms string values to boolean types and vice versa + */ +export declare class BooleanTransformer extends ValueTransformer { + /** + * Values to consider as true + */ + private trueValues; + /** + * Values to consider as false + */ + private falseValues; + /** + * Lowercase versions of true values for case-insensitive comparison + */ + private trueValuesLower; + /** + * Lowercase versions of false values for case-insensitive comparison + */ + private falseValuesLower; + /** + * Creates a new BooleanTransformer + * @param options Transformer options + */ + constructor(options?: BooleanTransformerOptions); + /** + * Transform a value from XML to JSON representation + * @param value Value from XML + * @param context Transformation context + * @returns Transformed value for JSON + */ + protected xmlToJson(value: any, context: TransformContext): any; + /** + * Transform a value from JSON to XML representation + * @param value Value from JSON + * @param context Transformation context + * @returns Transformed value for XML + */ + protected jsonToXml(value: any, context: TransformContext): any; +} diff --git a/dist/dts/core/transformers/NumberTransformer.d.ts b/dist/dts/core/transformers/NumberTransformer.d.ts new file mode 100644 index 0000000..af0cc83 --- /dev/null +++ b/dist/dts/core/transformers/NumberTransformer.d.ts @@ -0,0 +1,65 @@ +/** + * Number value transformer for the XJX library + */ +import { ValueTransformer, TransformContext } from './ValueTransformer'; +/** + * Interface for NumberTransformer options + */ +export interface NumberTransformerOptions { + /** + * Whether to parse integers + */ + parseIntegers?: boolean; + /** + * Whether to parse floating point numbers + */ + parseFloats?: boolean; + /** + * Integer format in XML (if specified) + */ + integerFormat?: RegExp | string; + /** + * Float format in XML (if specified) + */ + floatFormat?: RegExp | string; +} +/** + * Transforms string values to number types and vice versa + */ +export declare class NumberTransformer extends ValueTransformer { + /** + * Whether to parse integers + */ + private parseIntegers; + /** + * Whether to parse floating point numbers + */ + private parseFloats; + /** + * Integer format in XML (if specified) + */ + private integerFormat?; + /** + * Float format in XML (if specified) + */ + private floatFormat?; + /** + * Creates a new NumberTransformer + * @param options Transformer options + */ + constructor(options?: NumberTransformerOptions); + /** + * Transform a value from XML to JSON representation + * @param value Value from XML + * @param context Transformation context + * @returns Transformed value for JSON + */ + protected xmlToJson(value: any, context: TransformContext): any; + /** + * Transform a value from JSON to XML representation + * @param value Value from JSON + * @param context Transformation context + * @returns Transformed value for XML + */ + protected jsonToXml(value: any, context: TransformContext): any; +} diff --git a/dist/dts/core/transformers/StringReplaceTransformer.d.ts b/dist/dts/core/transformers/StringReplaceTransformer.d.ts new file mode 100644 index 0000000..1f27bbf --- /dev/null +++ b/dist/dts/core/transformers/StringReplaceTransformer.d.ts @@ -0,0 +1,49 @@ +/** + * String replacement transformer for the XJX library + */ +import { ValueTransformer, TransformContext } from './ValueTransformer'; +/** + * Interface for StringReplaceTransformer options + */ +export interface StringReplaceTransformerOptions { + /** + * Regex pattern in string form "/pattern/flags" + */ + pattern?: string; + /** + * Replacement string + */ + replacement?: string; +} +/** + * Transforms string values by applying regex replacements + */ +export declare class StringReplaceTransformer extends ValueTransformer { + /** + * Regex pattern to match + */ + private regex; + /** + * Replacement string + */ + private replacement; + /** + * Creates a StringReplaceTransformer + * @param options Configuration options + */ + constructor(options?: StringReplaceTransformerOptions); + /** + * Transform a value from XML to JSON representation + * @param value Value from XML + * @param context Transformation context + * @returns Transformed value for JSON + */ + protected xmlToJson(value: any, context: TransformContext): any; + /** + * Transform a value from JSON to XML representation + * @param value Value from JSON + * @param context Transformation context + * @returns Transformed value for XML + */ + protected jsonToXml(value: any, context: TransformContext): any; +} diff --git a/dist/dts/core/transformers/TransformUtil.d.ts b/dist/dts/core/transformers/TransformUtil.d.ts new file mode 100644 index 0000000..a634de9 --- /dev/null +++ b/dist/dts/core/transformers/TransformUtil.d.ts @@ -0,0 +1,45 @@ +/** + * Utilities for applying value transformations + */ +import { Configuration } from '../types/config-types'; +import { TransformContext, TransformDirection } from './ValueTransformer'; +/** + * Utility for applying value transformations + */ +export declare class TransformUtil { + private config; + /** + * Create a new TransformUtil + * @param config Configuration + */ + constructor(config: Configuration); + /** + * Apply transforms to a value + * @param value Value to transform + * @param context Transformation context + * @returns Transformed value + */ + applyTransforms(value: any, context: TransformContext): any; + /** + * Create a transform context + * @param direction Direction of transformation + * @param nodeName Name of the current node + * @param nodeType DOM node type + * @param options Additional context options + * @returns Transform context + */ + createContext(direction: TransformDirection, nodeName: string, nodeType: number, options?: { + path?: string; + namespace?: string; + prefix?: string; + isAttribute?: boolean; + attributeName?: string; + parent?: TransformContext; + }): TransformContext; + /** + * Get a user-friendly node type name for debugging + * @param nodeType DOM node type + * @returns String representation of node type + */ + getNodeTypeName(nodeType: number): string; +} diff --git a/dist/dts/core/transformers/ValueTransformer.d.ts b/dist/dts/core/transformers/ValueTransformer.d.ts new file mode 100644 index 0000000..e9290f2 --- /dev/null +++ b/dist/dts/core/transformers/ValueTransformer.d.ts @@ -0,0 +1,49 @@ +/** + * Value transformation types and base class for the XJX library + */ +import { Configuration } from '../types/config-types'; +/** + * Direction of the transformation + */ +export type TransformDirection = 'xml-to-json' | 'json-to-xml'; +/** + * Context provided to value transformers + */ +export interface TransformContext { + direction: TransformDirection; + nodeName: string; + nodeType: number; + namespace?: string; + prefix?: string; + path: string; + isAttribute: boolean; + attributeName?: string; + parent?: TransformContext; + config: Configuration; +} +/** + * Abstract base class for value transformers + */ +export declare abstract class ValueTransformer { + /** + * Process a value, transforming it if applicable + * @param value Value to potentially transform + * @param context Context including direction and other information + * @returns Transformed value or original if not applicable + */ + process(value: any, context: TransformContext): any; + /** + * Transform a value from XML to JSON representation + * @param value Value from XML + * @param context Transformation context + * @returns Transformed value for JSON + */ + protected xmlToJson(value: any, context: TransformContext): any; + /** + * Transform a value from JSON to XML representation + * @param value Value from JSON + * @param context Transformation context + * @returns Transformed value for XML + */ + protected jsonToXml(value: any, context: TransformContext): any; +} diff --git a/dist/dts/core/transformers/index.d.ts b/dist/dts/core/transformers/index.d.ts new file mode 100644 index 0000000..579d931 --- /dev/null +++ b/dist/dts/core/transformers/index.d.ts @@ -0,0 +1,8 @@ +/** + * Value transformers for the XJX library + */ +export { ValueTransformer, TransformContext, TransformDirection } from './ValueTransformer'; +export { BooleanTransformer, BooleanTransformerOptions } from './BooleanTransformer'; +export { NumberTransformer, NumberTransformerOptions } from './NumberTransformer'; +export { StringReplaceTransformer, StringReplaceTransformerOptions } from './StringReplaceTransformer'; +export { TransformUtil } from './TransformUtil'; diff --git a/dist/dts/core/types/config-types.d.ts b/dist/dts/core/types/config-types.d.ts new file mode 100644 index 0000000..4668094 --- /dev/null +++ b/dist/dts/core/types/config-types.d.ts @@ -0,0 +1,38 @@ +/** + * Type definitions for the XJX library + */ +import { ValueTransformer } from '../transformers/ValueTransformer'; +/** + * Configuration interface for the library + */ +export interface Configuration { + preserveNamespaces: boolean; + preserveComments: boolean; + preserveProcessingInstr: boolean; + preserveCDATA: boolean; + preserveTextNodes: boolean; + preserveWhitespace: boolean; + preserveAttributes: boolean; + outputOptions: { + prettyPrint: boolean; + indent: number; + compact: boolean; + json: Record; + xml: { + declaration: boolean; + }; + }; + propNames: { + namespace: string; + prefix: string; + attributes: string; + value: string; + cdata: string; + comments: string; + instruction: string; + target: string; + children: string; + }; + valueTransforms?: ValueTransformer[]; +} +export default Configuration; diff --git a/dist/dts/core/types/dom-types.d.ts b/dist/dts/core/types/dom-types.d.ts new file mode 100644 index 0000000..7fa07a2 --- /dev/null +++ b/dist/dts/core/types/dom-types.d.ts @@ -0,0 +1,12 @@ +/** + * DOM node types as an enum for better type safety + */ +export declare enum NodeType { + ELEMENT_NODE = 1, + ATTRIBUTE_NODE = 2, + TEXT_NODE = 3, + CDATA_SECTION_NODE = 4, + PROCESSING_INSTRUCTION_NODE = 7, + COMMENT_NODE = 8, + DOCUMENT_NODE = 9 +} diff --git a/dist/dts/core/types/error-types.d.ts b/dist/dts/core/types/error-types.d.ts new file mode 100644 index 0000000..232e907 --- /dev/null +++ b/dist/dts/core/types/error-types.d.ts @@ -0,0 +1,33 @@ +/** + * Error classes for the XJX library + */ +/** + * Base error class + */ +export declare class XJXError extends Error { + constructor(message: string); +} +/** + * Error for XML parsing issues + */ +export declare class XmlToJsonError extends XJXError { + constructor(message: string); +} +/** + * Error for XML serialization issues + */ +export declare class JsonToXmlError extends XJXError { + constructor(message: string); +} +/** + * Error for environment incompatibility + */ +export declare class EnvironmentError extends XJXError { + constructor(message: string); +} +/** + * Error for invalid configuration + */ +export declare class ConfigurationError extends XJXError { + constructor(message: string); +} diff --git a/dist/dts/core/types/json-types.d.ts b/dist/dts/core/types/json-types.d.ts new file mode 100644 index 0000000..12d03a3 --- /dev/null +++ b/dist/dts/core/types/json-types.d.ts @@ -0,0 +1,31 @@ +/** + * Basic JSON primitive types + */ +export type JSONPrimitive = string | number | boolean | null; +/** + * JSON array type (recursive definition) + */ +export type JSONArray = JSONValue[]; +/** + * JSON object type (recursive definition) + */ +export interface JSONObject { + [key: string]: JSONValue; +} +/** + * Combined JSON value type that can be any valid JSON structure + */ +export type JSONValue = JSONPrimitive | JSONArray | JSONObject; +/** + * Type for XML-in-JSON structure based on the library's configuration + * This is a generic template that will use the actual property names from config + */ +export interface XMLJSONNode { + [tagName: string]: XMLJSONElement; +} +/** + * Structure of an XML element in JSON representation + */ +export interface XMLJSONElement { + [key: string]: JSONValue | XMLJSONNode[]; +} diff --git a/dist/dts/core/utils/json-utils.d.ts b/dist/dts/core/utils/json-utils.d.ts new file mode 100644 index 0000000..a093995 --- /dev/null +++ b/dist/dts/core/utils/json-utils.d.ts @@ -0,0 +1,84 @@ +/** + * JSONUtil - Utility functions for JSON processing + */ +import { Configuration } from "../types/config-types"; +import { JSONValue } from "../types/json-types"; +export declare class JsonUtil { + private config; + /** + * Constructor for JSONUtil + * @param config Configuration options + */ + constructor(config: Configuration); + /** + * Safely retrieves a value from a JSON object using a dot-separated path. + * Automatically traverses into children arrays and flattens results. + * + * @param obj The input JSON object + * @param path The dot-separated path string (e.g., "root.item.description.$val") + * @param fallback Value to return if the path does not resolve + * @returns Retrieved value or fallback + */ + getPath(obj: Record, path: string, fallback?: JSONValue): any; + /** + * Resolves a single path segment in the context of a JSON object. + * Falls back to searching children for matching keys. + * + * @param obj The current object + * @param segment The path segment to resolve + * @returns Resolved value or undefined + */ + private resolveSegment; + /** + * Converts a plain JSON object to the XML-like JSON structure. + * Optionally wraps the result in a root element with attributes and namespaces. + * + * @param obj Standard JSON object + * @param root Optional root element configuration (either a string or object with $ keys) + * @returns XML-like JSON object + */ + objectToXJX(obj: any, root?: any): any; + /** + * Wraps a standard JSON value in the XML-like JSON structure + * @param value Value to wrap + * @returns Wrapped value + */ + private wrapObject; + /** + * Check if an object is empty + * @param value Value to check + * @returns true if empty + */ + isEmpty(value: any): boolean; + /** + * Safely stringify JSON for debugging + * @param obj Object to stringify + * @param indent Optional indentation level + * @returns JSON string representation + */ + safeStringify(obj: any, indent?: number): string; + /** + * Deep clone an object + * @param obj Object to clone + * @returns Cloned object + */ + deepClone(obj: any): any; + /** + * Deep merge two objects with proper type handling + * @param target Target object + * @param source Source object + * @returns Merged object (target is modified) + */ + deepMerge(target: T, source: Partial): T; + /** + * Generates a JSON schema that matches the current configuration + * @returns JSON schema object + */ + generateJsonSchema(): Record; + /** + * Generate an example JSON object based on the schema + * @param {string} rootName - Name of the root element + * @returns {Record} - Example JSON object + */ + generateExample(rootName?: string): Record; +} diff --git a/dist/dts/core/utils/xml-utils.d.ts b/dist/dts/core/utils/xml-utils.d.ts new file mode 100644 index 0000000..9b2ed15 --- /dev/null +++ b/dist/dts/core/utils/xml-utils.d.ts @@ -0,0 +1,61 @@ +import { Configuration } from "../types/config-types"; +export declare class XmlUtil { + private config; + /** + * Constructor for XMLUtil + * @param config Configuration options + */ + constructor(config: Configuration); + /** + * Pretty print an XML string + * @param xmlString XML string to format + * @returns Formatted XML string + */ + prettyPrintXml(xmlString: string): string; + /** + * Check if XML string is well-formed + * @param xmlString XML string to validate + * @returns Object with validation result and any error messages + */ + validateXML(xmlString: string): { + isValid: boolean; + message?: string; + }; + /** + * Add XML declaration to a string if missing + * @param xmlString XML string + * @returns XML string with declaration + */ + ensureXMLDeclaration(xmlString: string): string; + /** + * Escapes special characters in text for safe XML usage. + * @param text Text to escape. + * @returns Escaped XML string. + */ + escapeXML(text: string): string; + /** + * Unescapes XML entities back to their character equivalents. + * @param text Text with XML entities. + * @returns Unescaped text. + */ + unescapeXML(text: string): string; + /** + * Extract the namespace prefix from a qualified name + * @param qualifiedName Qualified name (e.g., "ns:element") + * @returns Prefix or null if no prefix + */ + extractPrefix(qualifiedName: string): string | null; + /** + * Extract the local name from a qualified name + * @param qualifiedName Qualified name (e.g., "ns:element") + * @returns Local name + */ + extractLocalName(qualifiedName: string): string; + /** + * Create a qualified name from prefix and local name + * @param prefix Namespace prefix (can be null) + * @param localName Local name + * @returns Qualified name + */ + createQualifiedName(prefix: string | null, localName: string): string; +} diff --git a/dist/dts/index.d.ts b/dist/dts/index.d.ts new file mode 100644 index 0000000..8c7b962 --- /dev/null +++ b/dist/dts/index.d.ts @@ -0,0 +1,7 @@ +import { XJX } from './XJX'; +export { XJX }; +export { Configuration } from './core/types/config-types'; +export { DEFAULT_CONFIG } from './core/config/config'; +export { XJXError } from './core/types/error-types'; +export { ValueTransformer } from './core/transformers/ValueTransformer'; +export default XJX; diff --git a/dist/index.d.ts b/dist/index.d.ts new file mode 100644 index 0000000..03690ce --- /dev/null +++ b/dist/index.d.ts @@ -0,0 +1,189 @@ +/** + * Value transformation types and base class for the XJX library + */ + +/** + * Direction of the transformation + */ +type TransformDirection = 'xml-to-json' | 'json-to-xml'; +/** + * Context provided to value transformers + */ +interface TransformContext { + direction: TransformDirection; + nodeName: string; + nodeType: number; + namespace?: string; + prefix?: string; + path: string; + isAttribute: boolean; + attributeName?: string; + parent?: TransformContext; + config: Configuration; +} +/** + * Abstract base class for value transformers + */ +declare abstract class ValueTransformer { + /** + * Process a value, transforming it if applicable + * @param value Value to potentially transform + * @param context Context including direction and other information + * @returns Transformed value or original if not applicable + */ + process(value: any, context: TransformContext): any; + /** + * Transform a value from XML to JSON representation + * @param value Value from XML + * @param context Transformation context + * @returns Transformed value for JSON + */ + protected xmlToJson(value: any, context: TransformContext): any; + /** + * Transform a value from JSON to XML representation + * @param value Value from JSON + * @param context Transformation context + * @returns Transformed value for XML + */ + protected jsonToXml(value: any, context: TransformContext): any; +} + +/** + * Type definitions for the XJX library + */ + +/** + * Configuration interface for the library + */ +interface Configuration { + preserveNamespaces: boolean; + preserveComments: boolean; + preserveProcessingInstr: boolean; + preserveCDATA: boolean; + preserveTextNodes: boolean; + preserveWhitespace: boolean; + preserveAttributes: boolean; + outputOptions: { + prettyPrint: boolean; + indent: number; + compact: boolean; + json: Record; + xml: { + declaration: boolean; + }; + }; + propNames: { + namespace: string; + prefix: string; + attributes: string; + value: string; + cdata: string; + comments: string; + instruction: string; + target: string; + children: string; + }; + valueTransforms?: ValueTransformer[]; +} + +declare class XJX { + private config; + private xmlToJsonConverter; + private jsonToXmlConverter; + private jsonUtil; + private xmlUtil; + /** + * Constructor for XJX utility + * @param config Configuration options + */ + constructor(config?: Partial); + /** + * Convert XML string to JSON + * @param xmlString XML content as string + * @returns JSON object representing the XML content + */ + xmlToJson(xmlString: string): Record; + /** + * Convert JSON object back to XML string + * @param jsonObj JSON object to convert + * @returns XML string + */ + jsonToXml(jsonObj: Record): string; + /** + * Pretty print an XML string + * @param xmlString XML string to format + * @returns Formatted XML string + */ + prettyPrintXml(xmlString: string): string; + /** + * Safely retrieves a value from a JSON object using a dot-separated path. + * @param obj The input JSON object + * @param path The dot-separated path string (e.g., "root.item.description.$val") + * @param fallback Value to return if the path does not resolve + * @returns The value at the specified path or the fallback value + */ + getPath(obj: Record, path: string, fallback?: any): any; + /** + * Validate XML string + * @param xmlString XML string to validate + * @returns Validation result + */ + validateXML(xmlString: string): { + isValid: boolean; + message?: string; + }; + /** + * Generate a JSON schema based on the current configuration + * @returns JSON schema object for validating XML-JSON documents + */ + generateJsonSchema(): Record; + /** + * Convert a standard JSON object to the XML-like JSON structure + * @param obj Standard JSON object + * @param root Optional root element configuration (string or object with properties) + * @returns XML-like JSON object ready for conversion to XML + */ + objectToXJX(obj: any, root?: string | Record): Record; + /** + * Generate an example JSON object that matches the current configuration + * @param rootName Name of the root element + * @returns Example JSON object + */ + generateJsonExample(rootName?: string): Record; + /** + * Add a value transformer to the configuration + * @param transformer Value transformer to add + * @returns This XJX instance for chaining + */ + addTransformer(transformer: ValueTransformer): XJX; + /** + * Removes all value transformers from the configuration + * @returns This XJX instance for chaining + */ + clearTransformers(): XJX; + /** + * Clean up any resources + */ + cleanup(): void; +} + +/** + * Default configuration for the XJX library + */ + +/** + * Default configuration + */ +declare const DEFAULT_CONFIG: Configuration; + +/** + * Error classes for the XJX library + */ +/** + * Base error class + */ +declare class XJXError extends Error { + constructor(message: string); +} + +export { Configuration, DEFAULT_CONFIG, ValueTransformer, XJX, XJXError, XJX as default }; diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 0000000..9393a0f --- /dev/null +++ b/dist/index.js @@ -0,0 +1,1670 @@ +/** + * Error classes for the XJX library + */ +/** + * Base error class + */ +class XJXError extends Error { + constructor(message) { + super(message); + this.name = 'XMLToJSONError'; + } +} + +/** + * DOM node types as an enum for better type safety + */ +var NodeType; +(function (NodeType) { + NodeType[NodeType["ELEMENT_NODE"] = 1] = "ELEMENT_NODE"; + NodeType[NodeType["ATTRIBUTE_NODE"] = 2] = "ATTRIBUTE_NODE"; + NodeType[NodeType["TEXT_NODE"] = 3] = "TEXT_NODE"; + NodeType[NodeType["CDATA_SECTION_NODE"] = 4] = "CDATA_SECTION_NODE"; + NodeType[NodeType["PROCESSING_INSTRUCTION_NODE"] = 7] = "PROCESSING_INSTRUCTION_NODE"; + NodeType[NodeType["COMMENT_NODE"] = 8] = "COMMENT_NODE"; + NodeType[NodeType["DOCUMENT_NODE"] = 9] = "DOCUMENT_NODE"; +})(NodeType || (NodeType = {})); + +/** + * DOM Environment provider with unified interface for browser and Node.js + */ +const DOMAdapter = (() => { + // Environment-specific DOM implementation + let domParser; + let xmlSerializer; + // let nodeTypes: NodeTypes; + let docImplementation; + let jsdomInstance = null; + try { + if (typeof window === "undefined") { + // Node.js environment - try JSDOM first + try { + const { JSDOM } = require("jsdom"); + jsdomInstance = new JSDOM("", { + contentType: "text/xml", + }); + domParser = jsdomInstance.window.DOMParser; + xmlSerializer = jsdomInstance.window.XMLSerializer; + // nodeTypes = { + // ELEMENT_NODE: jsdomInstance.window.Node.ELEMENT_NODE, + // TEXT_NODE: jsdomInstance.window.Node.TEXT_NODE, + // CDATA_SECTION_NODE: jsdomInstance.window.Node.CDATA_SECTION_NODE, + // COMMENT_NODE: jsdomInstance.window.Node.COMMENT_NODE, + // PROCESSING_INSTRUCTION_NODE: jsdomInstance.window.Node.PROCESSING_INSTRUCTION_NODE, + // DOCUMENT_NODE: jsdomInstance.window.Node.DOCUMENT_NODE, // Add this line + // }; + docImplementation = jsdomInstance.window.document.implementation; + } + catch (jsdomError) { + // Fall back to xmldom if JSDOM isn't available + try { + const { DOMParser, XMLSerializer, DOMImplementation } = require('@xmldom/xmldom'); + domParser = DOMParser; + xmlSerializer = XMLSerializer; + // Standard DOM node types + // nodeTypes = { + // ELEMENT_NODE: 1, + // TEXT_NODE: 3, + // CDATA_SECTION_NODE: 4, + // COMMENT_NODE: 8, + // PROCESSING_INSTRUCTION_NODE: 7, + // DOCUMENT_NODE: 9, + // }; + const implementation = new DOMImplementation(); + docImplementation = implementation; + } + catch (xmldomError) { + throw new XJXError(`Node.js environment detected but neither 'jsdom' nor '@xmldom/xmldom' are available.`); + } + } + } + else { + // Browser environment + if (!window.DOMParser) { + throw new XJXError("DOMParser is not available in this environment"); + } + if (!window.XMLSerializer) { + throw new XJXError("XMLSerializer is not available in this environment"); + } + domParser = window.DOMParser; + xmlSerializer = window.XMLSerializer; + // nodeTypes = { + // ELEMENT_NODE: Node.ELEMENT_NODE, + // TEXT_NODE: Node.TEXT_NODE, + // CDATA_SECTION_NODE: Node.CDATA_SECTION_NODE, + // COMMENT_NODE: Node.COMMENT_NODE, + // PROCESSING_INSTRUCTION_NODE: Node.PROCESSING_INSTRUCTION_NODE, + // DOCUMENT_NODE: Node.DOCUMENT_NODE, + // }; + docImplementation = document.implementation; + } + } + catch (error) { + throw new XJXError(`DOM environment initialization failed: ${error instanceof Error ? error.message : String(error)}`); + } + return { + createParser: () => { + try { + return new domParser(); + } + catch (error) { + throw new XJXError(`Failed to create DOM parser: ${error instanceof Error ? error.message : String(error)}`); + } + }, + createSerializer: () => { + try { + return new xmlSerializer(); + } + catch (error) { + throw new XJXError(`Failed to create XML serializer: ${error instanceof Error ? error.message : String(error)}`); + } + }, + NodeType, + parseFromString: (xmlString, contentType = 'text/xml') => { + try { + const parser = new domParser(); + return parser.parseFromString(xmlString, contentType); + } + catch (error) { + throw new XJXError(`Failed to parse XML: ${error instanceof Error ? error.message : String(error)}`); + } + }, + serializeToString: (node) => { + try { + const serializer = new xmlSerializer(); + return serializer.serializeToString(node); + } + catch (error) { + throw new XJXError(`Failed to serialize XML: ${error instanceof Error ? error.message : String(error)}`); + } + }, + createDocument: () => { + try { + // For browsers, create a document with a root element to avoid issues + if (typeof window !== "undefined") { + const parser = new domParser(); + return parser.parseFromString('', 'text/xml'); + } + else { + return docImplementation.createDocument(null, null, null); + } + } + catch (error) { + throw new XJXError(`Failed to create document: ${error instanceof Error ? error.message : String(error)}`); + } + }, + createElement: (tagName) => { + try { + if (typeof window !== "undefined") { + return document.createElement(tagName); + } + else { + const doc = docImplementation.createDocument(null, null, null); + return doc.createElement(tagName); + } + } + catch (error) { + throw new XJXError(`Failed to create element: ${error instanceof Error ? error.message : String(error)}`); + } + }, + createElementNS: (namespaceURI, qualifiedName) => { + try { + if (typeof window !== "undefined") { + return document.createElementNS(namespaceURI, qualifiedName); + } + else { + const doc = docImplementation.createDocument(null, null, null); + return doc.createElementNS(namespaceURI, qualifiedName); + } + } + catch (error) { + throw new XJXError(`Failed to create element with namespace: ${error instanceof Error ? error.message : String(error)}`); + } + }, + createTextNode: (data) => { + try { + if (typeof window !== "undefined") { + return document.createTextNode(data); + } + else { + const doc = docImplementation.createDocument(null, null, null); + return doc.createTextNode(data); + } + } + catch (error) { + throw new XJXError(`Failed to create text node: ${error instanceof Error ? error.message : String(error)}`); + } + }, + createCDATASection: (data) => { + try { + // For browser compatibility, use document.implementation to create CDATA + if (typeof window !== "undefined") { + const doc = document.implementation.createDocument(null, null, null); + return doc.createCDATASection(data); + } + else { + const doc = docImplementation.createDocument(null, null, null); + return doc.createCDATASection(data); + } + } + catch (error) { + throw new XJXError(`Failed to create CDATA section: ${error instanceof Error ? error.message : String(error)}`); + } + }, + createComment: (data) => { + try { + if (typeof window !== "undefined") { + return document.createComment(data); + } + else { + const doc = docImplementation.createDocument(null, null, null); + return doc.createComment(data); + } + } + catch (error) { + throw new XJXError(`Failed to create comment: ${error instanceof Error ? error.message : String(error)}`); + } + }, + createProcessingInstruction: (target, data) => { + try { + if (typeof window !== "undefined") { + const doc = document.implementation.createDocument(null, null, null); + return doc.createProcessingInstruction(target, data); + } + else { + const doc = docImplementation.createDocument(null, null, null); + return doc.createProcessingInstruction(target, data); + } + } + catch (error) { + throw new XJXError(`Failed to create processing instruction: ${error instanceof Error ? error.message : String(error)}`); + } + }, + // New helper methods + /** + * Creates a proper namespace qualified attribute + */ + setNamespacedAttribute: (element, namespaceURI, qualifiedName, value) => { + try { + if (namespaceURI) { + element.setAttributeNS(namespaceURI, qualifiedName, value); + } + else { + element.setAttribute(qualifiedName, value); + } + } + catch (error) { + throw new XJXError(`Failed to set attribute: ${error instanceof Error ? error.message : String(error)}`); + } + }, + /** + * Check if an object is a DOM node + */ + isNode: (obj) => { + try { + return obj && typeof obj === 'object' && typeof obj.nodeType === 'number'; + } + catch (error) { + return false; + } + }, + /** + * Get DOM node type as string for debugging + */ + getNodeTypeName: (nodeType) => { + switch (nodeType) { + case NodeType.ELEMENT_NODE: return 'ELEMENT_NODE'; + case NodeType.TEXT_NODE: return 'TEXT_NODE'; + case NodeType.CDATA_SECTION_NODE: return 'CDATA_SECTION_NODE'; + case NodeType.COMMENT_NODE: return 'COMMENT_NODE'; + case NodeType.PROCESSING_INSTRUCTION_NODE: return 'PROCESSING_INSTRUCTION_NODE'; + default: return `UNKNOWN_NODE_TYPE(${nodeType})`; + } + }, + /** + * Get all node attributes as an object + */ + getNodeAttributes: (node) => { + const result = {}; + for (let i = 0; i < node.attributes.length; i++) { + const attr = node.attributes[i]; + result[attr.name] = attr.value; + } + return result; + }, + // Cleanup method (mainly for JSDOM) + cleanup: () => { + if (jsdomInstance && typeof jsdomInstance.window.close === 'function') { + jsdomInstance.window.close(); + } + } + }; +})(); + +class JsonUtil { + /** + * Constructor for JSONUtil + * @param config Configuration options + */ + constructor(config) { + this.config = config; + } + /** + * Safely retrieves a value from a JSON object using a dot-separated path. + * Automatically traverses into children arrays and flattens results. + * + * @param obj The input JSON object + * @param path The dot-separated path string (e.g., "root.item.description.$val") + * @param fallback Value to return if the path does not resolve + * @returns Retrieved value or fallback + */ + getPath(obj, path, fallback) { + const segments = path.split("."); + let current = obj; + for (const segment of segments) { + if (Array.isArray(current)) { + // Apply the segment to each array element and flatten results + const results = current + .map((item) => this.resolveSegment(item, segment)) + .flat() + .filter((v) => v !== undefined); + current = results.length > 0 ? results : undefined; + } + else { + current = this.resolveSegment(current, segment); + } + if (current === undefined) + return fallback; + } + // Collapse singleton arrays + if (Array.isArray(current) && current.length === 1) { + return current[0]; + } + return current !== undefined ? current : fallback; + } + /** + * Resolves a single path segment in the context of a JSON object. + * Falls back to searching children for matching keys. + * + * @param obj The current object + * @param segment The path segment to resolve + * @returns Resolved value or undefined + */ + resolveSegment(obj, segment) { + if (obj == null || typeof obj !== "object") + return undefined; + // Direct property access + if (segment in obj) { + return obj[segment]; + } + // Check if this is a special property name that matches the config + if (segment === this.config.propNames.value || + segment === this.config.propNames.children || + segment === this.config.propNames.attributes || + segment === this.config.propNames.namespace || + segment === this.config.propNames.prefix || + segment === this.config.propNames.cdata || + segment === this.config.propNames.comments || + segment === this.config.propNames.instruction || + segment === this.config.propNames.target) { + const configKey = Object.entries(this.config.propNames).find(([_, value]) => value === segment)?.[0]; + if (configKey && obj[segment] !== undefined) { + return obj[segment]; + } + } + // Check children for objects that contain the segment + const childrenKey = this.config.propNames.children; + const children = obj[childrenKey]; + if (Array.isArray(children)) { + const matches = children + .map((child) => (segment in child ? child[segment] : undefined)) + .filter((v) => v !== undefined); + return matches.length > 0 ? matches : undefined; + } + return undefined; + } + /** + * Converts a plain JSON object to the XML-like JSON structure. + * Optionally wraps the result in a root element with attributes and namespaces. + * + * @param obj Standard JSON object + * @param root Optional root element configuration (either a string or object with $ keys) + * @returns XML-like JSON object + */ + objectToXJX(obj, root) { + const wrappedObject = this.wrapObject(obj); + if (typeof root === "string") { + // Root is a simple string: wrap result with this root tag + return { [root]: wrappedObject }; + } + if (root && typeof root === "object") { + // Handle root with config-based keys + const elementName = root.name || "root"; // Default to "root" if no name is provided + const prefix = root[this.config.propNames.prefix] || ""; + const qualifiedName = prefix ? `${prefix}:${elementName}` : elementName; + const result = { + [qualifiedName]: {}, + }; + // Add attributes to the root element if defined + const attrsKey = this.config.propNames.attributes; + if (root[attrsKey] && Array.isArray(root[attrsKey])) { + result[qualifiedName][attrsKey] = root[attrsKey]; + } + // Merge existing children with the new generated children + const childrenKey = this.config.propNames.children; + const children = root[childrenKey] ? root[childrenKey] : []; + result[qualifiedName][childrenKey] = [ + ...children, + { [elementName]: wrappedObject }, + ]; + // Add namespace and prefix if defined + const nsKey = this.config.propNames.namespace; + if (root[nsKey]) { + result[qualifiedName][nsKey] = root[nsKey]; + } + if (prefix && root[nsKey]) { + result[qualifiedName][`xmlns:${prefix}`] = root[nsKey]; + } + return result; + } + // Default behavior if no root is provided + return wrappedObject; + } + /** + * Wraps a standard JSON value in the XML-like JSON structure + * @param value Value to wrap + * @returns Wrapped value + */ + wrapObject(value) { + const valKey = this.config.propNames.value; + const childrenKey = this.config.propNames.children; + if (value === null || + typeof value === "string" || + typeof value === "number" || + typeof value === "boolean") { + return { [valKey]: value }; + } + if (Array.isArray(value)) { + // For arrays, wrap each item and return as a children-style array of repeated elements + return { + [childrenKey]: value.map((item) => { + return this.wrapObject(item); + }), + }; + } + if (typeof value === "object") { + // It's an object: wrap its properties in children + const children = Object.entries(value).map(([key, val]) => ({ + [key]: this.wrapObject(val), + })); + return { [childrenKey]: children }; + } + return undefined; // Fallback for unhandled types + } + /** + * Check if an object is empty + * @param value Value to check + * @returns true if empty + */ + isEmpty(value) { + if (value == null) + return true; + if (Array.isArray(value)) + return value.length === 0; + if (typeof value === "object") + return Object.keys(value).length === 0; + return false; + } + /** + * Safely stringify JSON for debugging + * @param obj Object to stringify + * @param indent Optional indentation level + * @returns JSON string representation + */ + safeStringify(obj, indent = 2) { + try { + return JSON.stringify(obj, null, indent); + } + catch (error) { + return "[Cannot stringify object]"; + } + } + /** + * Deep clone an object + * @param obj Object to clone + * @returns Cloned object + */ + deepClone(obj) { + try { + return JSON.parse(JSON.stringify(obj)); + } + catch (error) { + throw new Error(`Failed to deep clone object: ${error instanceof Error ? error.message : String(error)}`); + } + } + /** + * Deep merge two objects with proper type handling + * @param target Target object + * @param source Source object + * @returns Merged object (target is modified) + */ + deepMerge(target, source) { + if (!source || typeof source !== "object" || source === null) { + return target; + } + if (!target || typeof target !== "object" || target === null) { + return source; + } + Object.keys(source).forEach((key) => { + const sourceValue = source[key]; + const targetValue = target[key]; + // If both source and target values are objects, recursively merge them + if (sourceValue !== null && + targetValue !== null && + typeof sourceValue === "object" && + typeof targetValue === "object" && + !Array.isArray(sourceValue) && + !Array.isArray(targetValue)) { + // Recursively merge the nested objects + target[key] = this.deepMerge(targetValue, sourceValue); + } + else { + // Otherwise just replace the value + target[key] = sourceValue; + } + }); + return target; + } + /** + * Generates a JSON schema that matches the current configuration + * @returns JSON schema object + */ + generateJsonSchema() { + try { + const propNames = this.config.propNames; + const compact = this.config.outputOptions.compact || false; + const preserveNamespaces = this.config.preserveNamespaces; + const preserveComments = this.config.preserveComments; + const preserveCDATA = this.config.preserveCDATA; + const preserveProcessingInstr = this.config.preserveProcessingInstr; + const preserveTextNodes = this.config.preserveTextNodes; + const preserveWhitespace = this.config.preserveWhitespace; + const preserveAttributes = this.config.preserveAttributes; + // Determine which properties are required based on the configuration + const requiredProps = []; + if (!compact) { + // Only add collections as required if they're preserved in the config + if (preserveAttributes) + requiredProps.push(propNames.attributes); + if (preserveCDATA) + requiredProps.push(propNames.cdata); + if (preserveComments) + requiredProps.push(propNames.comments); + if (preserveProcessingInstr) + requiredProps.push(propNames.instruction); + requiredProps.push(propNames.children); + if (preserveTextNodes) { + requiredProps.push(propNames.value); + if (preserveNamespaces) { + requiredProps.push(propNames.namespace); + // Note: prefix is not required as it may not be present for all elements + } + } + } + // Create schema for element properties + const elementProperties = {}; + // Add namespace property if preserving namespaces + if (preserveNamespaces) { + elementProperties[propNames.namespace] = { + description: "Namespace URI of the element", + type: "string", + }; + // Add prefix property if preserving namespaces + elementProperties[propNames.prefix] = { + description: "Namespace prefix of the element", + type: "string", + }; + } + // Add value property if preserving text nodes + if (preserveTextNodes) { + elementProperties[propNames.value] = { + description: "Text content of the element", + type: "string", + }; + } + // Add attributes property + if (preserveAttributes) { + elementProperties[propNames.attributes] = { + description: "Element attributes", + type: "array", + items: { + type: "object", + patternProperties: { + "^.*$": { + type: "object", + properties: { + [propNames.value]: { + description: "Attribute value", + type: "string", + }, + }, + required: [propNames.value], + }, + }, + additionalProperties: false, + }, + }; + // If preserving namespaces, add namespace properties to attribute schema + if (preserveNamespaces) { + const attrProps = elementProperties[propNames.attributes].items.patternProperties["^.*$"].properties; + attrProps[propNames.namespace] = { + description: "Namespace URI of the attribute", + type: "string", + }; + attrProps[propNames.prefix] = { + description: "Namespace prefix of the attribute", + type: "string", + }; + } + } + // Add CDATA property if preserving CDATA + if (preserveCDATA) { + elementProperties[propNames.cdata] = { + description: "CDATA section content", + type: "string", + }; + } + // Add comments property if preserving comments + if (preserveComments) { + elementProperties[propNames.comments] = { + description: "Comment content", + type: "string", + }; + } + // Add processing instructions property if preserving them + if (preserveProcessingInstr) { + elementProperties[propNames.instruction] = { + description: "Processing instruction", + type: "object", + properties: { + [propNames.target]: { + description: "Processing instruction target", + type: "string", + }, + [propNames.value]: { + description: "Processing instruction content", + type: "string", + }, + }, + required: [propNames.target], + }; + } + // Add children property with recursive schema + elementProperties[propNames.children] = { + description: "Child elements", + type: "array", + items: { + type: "object", + patternProperties: { + "^.*$": { + $ref: "#/definitions/element", + }, + }, + additionalProperties: false, + }, + }; + // Create element definition (will be referenced recursively) + const elementDefinition = { + type: "object", + properties: elementProperties, + required: requiredProps, + additionalProperties: false, + }; + // Build the complete schema + const schema = { + $schema: "https://json-schema.org/draft/2020-12/schema", + title: "XJX JSON Schema", + description: "Schema for JSON representation of XML documents using the XJX library", + type: "object", + patternProperties: { + "^.*$": { + $ref: "#/definitions/element", + }, + }, + additionalProperties: false, + definitions: { + element: elementDefinition, + }, + }; + return schema; + } + catch (error) { + throw new Error(`Schema generation failed: ${error instanceof Error ? error.message : String(error)}`); + } + } + /** + * Generate an example JSON object based on the schema + * @param {string} rootName - Name of the root element + * @returns {Record} - Example JSON object + */ + generateExample(rootName = "root") { + const propNames = this.config.propNames; + const preserveNamespaces = this.config.preserveNamespaces; + const preserveComments = this.config.preserveComments; + const preserveCDATA = this.config.preserveCDATA; + const preserveProcessingInstr = this.config.preserveProcessingInstr; + const preserveAttributes = this.config.preserveAttributes; + // Simple example with common features + const example = { + [rootName]: { + [propNames.value]: "Root content", + [propNames.children]: [ + { + child: { + [propNames.value]: "Child content", + }, + }, + ], + }, + }; + // Add namespace properties if enabled + if (preserveNamespaces) { + example[rootName][propNames.namespace] = "http://example.org/ns"; + example[rootName][propNames.prefix] = "ex"; + example[rootName][propNames.children][0].child[propNames.namespace] = + "http://example.org/ns"; + example[rootName][propNames.children][0].child[propNames.prefix] = "ex"; + } + // Add attributes if enabled + if (preserveAttributes) { + example[rootName][propNames.attributes] = [ + { id: { [propNames.value]: "root-1" } }, + { lang: { [propNames.value]: "en" } }, + ]; + if (preserveNamespaces) { + example[rootName][propNames.attributes][1].lang[propNames.prefix] = + "xml"; + } + example[rootName][propNames.children][0].child[propNames.attributes] = [ + { id: { [propNames.value]: "child-1" } }, + ]; + } + // Add CDATA if enabled + if (preserveCDATA) { + example[rootName][propNames.children][0].child[propNames.children] = [ + { [propNames.cdata]: "Raw content" }, + ]; + } + // Add comments if enabled + if (preserveComments) { + if (!example[rootName][propNames.children][0].child[propNames.children]) { + example[rootName][propNames.children][0].child[propNames.children] = []; + } + example[rootName][propNames.children][0].child[propNames.children].push({ + [propNames.comments]: "Comment about the child", + }); + } + // Add processing instruction if enabled + if (preserveProcessingInstr) { + if (!example[rootName][propNames.children]) { + example[rootName][propNames.children] = []; + } + example[rootName][propNames.children].unshift({ + [propNames.instruction]: { + [propNames.target]: "xml-stylesheet", + [propNames.value]: 'type="text/css" href="style.css"', + }, + }); + } + return example; + } +} + +/** + * Utility for applying value transformations + */ +class TransformUtil { + /** + * Create a new TransformUtil + * @param config Configuration + */ + constructor(config) { + this.config = config; + } + /** + * Apply transforms to a value + * @param value Value to transform + * @param context Transformation context + * @returns Transformed value + */ + applyTransforms(value, context) { + // Skip transformation if no transformers are configured + if (!this.config.valueTransforms || this.config.valueTransforms.length === 0) { + return value; + } + // Apply each transformer in sequence + let transformedValue = value; + for (const transformer of this.config.valueTransforms) { + transformedValue = transformer.process(transformedValue, context); + } + return transformedValue; + } + /** + * Create a transform context + * @param direction Direction of transformation + * @param nodeName Name of the current node + * @param nodeType DOM node type + * @param options Additional context options + * @returns Transform context + */ + createContext(direction, nodeName, nodeType, options = {}) { + return { + direction, + nodeName, + nodeType, + path: options.path || nodeName, + namespace: options.namespace, + prefix: options.prefix, + isAttribute: options.isAttribute || false, + attributeName: options.attributeName, + parent: options.parent, + config: this.config, + }; + } + /** + * Get a user-friendly node type name for debugging + * @param nodeType DOM node type + * @returns String representation of node type + */ + getNodeTypeName(nodeType) { + return DOMAdapter.getNodeTypeName(nodeType); + } +} + +/** + * XmlToJsonConverter Parser for converting XML to JSON + */ +class XmlToJsonConverter { + /** + * Constructor for XmlToJsonConverter + * @param config Configuration options + */ + constructor(config) { + this.config = config; + this.jsonUtil = new JsonUtil(this.config); + this.transformUtil = new TransformUtil(this.config); + } + /** + * Convert XML string to JSON + * @param xmlString XML content as string + * @returns JSON object representing the XML content + */ + convert(xmlString) { + try { + const xmlDoc = DOMAdapter.parseFromString(xmlString, "text/xml"); + // Check for parsing errors + const errors = xmlDoc.getElementsByTagName("parsererror"); + if (errors.length > 0) { + throw new XJXError(`XML parsing error: ${errors[0].textContent}`); + } + return this.nodeToJson(xmlDoc.documentElement); + } + catch (error) { + throw new XJXError(`Failed to convert XML to JSON: ${error instanceof Error ? error.message : String(error)}`); + } + } + /** + * Convert a DOM node to JSON representation + * @param node DOM node to convert + * @param parentContext Optional parent context for transformation chain + * @param path Current path in the XML tree + * @returns JSON representation of the node + */ + nodeToJson(node, parentContext, path = "") { + const result = {}; + // Handle element nodes + if (node.nodeType === DOMAdapter.NodeType.ELEMENT_NODE) { + const element = node; + // Use localName instead of nodeName to strip namespace prefix + const nodeName = element.localName || + element.nodeName.split(":").pop() || + element.nodeName; + // Update the current path + const currentPath = path ? `${path}.${nodeName}` : nodeName; + const nodeObj = {}; + // Create context for this node + const context = this.transformUtil.createContext('xml-to-json', nodeName, node.nodeType, { + path: currentPath, + namespace: element.namespaceURI || undefined, + prefix: element.prefix || undefined, + parent: parentContext + }); + // Process namespaces if enabled + if (this.config.preserveNamespaces) { + const ns = element.namespaceURI; + if (ns) { + nodeObj[this.config.propNames.namespace] = ns; + } + const prefix = element.prefix; + if (prefix) { + nodeObj[this.config.propNames.prefix] = prefix; + } + } + // Process attributes if enabled + if (this.config.preserveAttributes && element.attributes.length > 0) { + const attrs = []; + for (let i = 0; i < element.attributes.length; i++) { + const attr = element.attributes[i]; + // Strip namespace prefix from attribute name + const attrLocalName = attr.localName || attr.name.split(":").pop() || attr.name; + // Create attribute context + const attrContext = this.transformUtil.createContext('xml-to-json', nodeName, node.nodeType, { + path: `${currentPath}.${attrLocalName}`, + namespace: attr.namespaceURI || undefined, + prefix: attr.prefix || undefined, + isAttribute: true, + attributeName: attrLocalName, + parent: context + }); + // Apply transformations to attribute value + const transformedValue = this.transformUtil.applyTransforms(attr.value, attrContext); + // Create attribute object with consistent structure + const attrObj = { + [attrLocalName]: { + [this.config.propNames.value]: transformedValue, + }, + }; + // Add namespace info for attribute if present and enabled + if (this.config.preserveNamespaces) { + // Handle attribute namespace + if (attr.namespaceURI) { + attrObj[attrLocalName][this.config.propNames.namespace] = + attr.namespaceURI; + } + // Handle attribute prefix + if (attr.prefix) { + attrObj[attrLocalName][this.config.propNames.prefix] = + attr.prefix; + } + } + attrs.push(attrObj); + } + if (attrs.length > 0) { + nodeObj[this.config.propNames.attributes] = attrs; + } + } + // Process child nodes + if (element.childNodes.length > 0) { + const children = []; + const childrenKey = this.config.propNames.children; + const valueKey = this.config.propNames.value; + const cdataKey = this.config.propNames.cdata; + const commentsKey = this.config.propNames.comments; + const instructionKey = this.config.propNames.instruction; + const targetKey = this.config.propNames.target; + for (let i = 0; i < element.childNodes.length; i++) { + const child = element.childNodes[i]; + // Text nodes - only process if preserveTextNodes is true + if (child.nodeType === DOMAdapter.NodeType.TEXT_NODE) { + if (this.config.preserveTextNodes) { + let text = child.nodeValue || ""; + // Skip whitespace-only text nodes if whitespace preservation is disabled + if (!this.config.preserveWhitespace) { + if (text.trim() === "") { + continue; + } + // Trim the text when preserveWhitespace is false + text = text.trim(); + } + // Create text node context + const textContext = this.transformUtil.createContext('xml-to-json', '#text', child.nodeType, { + path: `${currentPath}.#text`, + parent: context + }); + // Apply transformations to text value + const transformedText = this.transformUtil.applyTransforms(text, textContext); + children.push({ [valueKey]: transformedText }); + } + } + // CDATA sections + else if (child.nodeType === DOMAdapter.NodeType.CDATA_SECTION_NODE && + this.config.preserveCDATA) { + // Create CDATA context + const cdataContext = this.transformUtil.createContext('xml-to-json', '#cdata', child.nodeType, { + path: `${currentPath}.#cdata`, + parent: context + }); + // Apply transformations to CDATA value + const transformedCData = this.transformUtil.applyTransforms(child.nodeValue || "", cdataContext); + children.push({ + [cdataKey]: transformedCData, + }); + } + // Comments + else if (child.nodeType === DOMAdapter.NodeType.COMMENT_NODE && + this.config.preserveComments) { + children.push({ + [commentsKey]: child.nodeValue || "", + }); + } + // Processing instructions + else if (child.nodeType === + DOMAdapter.NodeType.PROCESSING_INSTRUCTION_NODE && + this.config.preserveProcessingInstr) { + children.push({ + [instructionKey]: { + [targetKey]: child.nodeName, + [valueKey]: child.nodeValue || "", + }, + }); + } + // Element nodes (recursive) + else if (child.nodeType === DOMAdapter.NodeType.ELEMENT_NODE) { + children.push(this.nodeToJson(child, context, currentPath)); + } + } + if (children.length > 0) { + nodeObj[childrenKey] = children; + } + } + // Apply compact option - remove empty properties if enabled + if (this.config.outputOptions.compact) { + Object.keys(nodeObj).forEach((key) => { + const cleaned = this.cleanNode(nodeObj[key]); + if (cleaned === undefined) { + delete nodeObj[key]; + } + else { + nodeObj[key] = cleaned; + } + }); + } + result[nodeName] = nodeObj; + } + return result; + } + cleanNode(node) { + if (Array.isArray(node)) { + // Clean each item in the array and filter out empty ones + const cleanedArray = node + .map((item) => this.cleanNode(item)) + .filter((item) => { + return !(item === null || + item === undefined || + (typeof item === "object" && Object.keys(item).length === 0)); + }); + return cleanedArray.length > 0 ? cleanedArray : undefined; + } + else if (typeof node === "object" && node !== null) { + // Clean properties recursively + Object.keys(node).forEach((key) => { + const cleanedChild = this.cleanNode(node[key]); + if (cleanedChild === null || + cleanedChild === undefined || + (Array.isArray(cleanedChild) && cleanedChild.length === 0) || + (typeof cleanedChild === "object" && + Object.keys(cleanedChild).length === 0)) { + delete node[key]; + } + else { + node[key] = cleanedChild; + } + }); + // Handle the special case for nodes with only empty children/attributes + const childrenKey = this.config.propNames.children; + const attrsKey = this.config.propNames.attributes; + const keys = Object.keys(node); + if (keys.every((key) => key === childrenKey || key === attrsKey) && + (node[childrenKey] === undefined || + this.jsonUtil.isEmpty(node[childrenKey])) && + (node[attrsKey] === undefined || this.jsonUtil.isEmpty(node[attrsKey]))) { + return undefined; + } + return Object.keys(node).length > 0 ? node : undefined; + } + return node; + } +} + +/** + * XMLUtil - Utility functions for XML processing + */ +class XmlUtil { + /** + * Constructor for XMLUtil + * @param config Configuration options + */ + constructor(config) { + this.config = config; + } + /** + * Pretty print an XML string + * @param xmlString XML string to format + * @returns Formatted XML string + */ + prettyPrintXml(xmlString) { + const indent = this.config.outputOptions.indent; + const INDENT = " ".repeat(indent); + try { + const doc = DOMAdapter.parseFromString(xmlString, "text/xml"); + const serializer = (node, level = 0) => { + const pad = INDENT.repeat(level); + switch (node.nodeType) { + case DOMAdapter.NodeType.ELEMENT_NODE: { + const el = node; + const tagName = el.tagName; + const attrs = Array.from(el.attributes) + .map((a) => `${a.name}="${a.value}"`) + .join(" "); + const openTag = attrs ? `<${tagName} ${attrs}>` : `<${tagName}>`; + const children = Array.from(el.childNodes); + if (children.length === 0) { + return `${pad}${openTag.replace(/>$/, " />")}\n`; + } + // Single text node: print inline + if (children.length === 0 || + (children.length === 1 && + children[0].nodeType === DOMAdapter.NodeType.TEXT_NODE && + children[0].textContent?.trim() === "")) { + // Empty or whitespace-only + return `${pad}<${tagName}${attrs ? " " + attrs : ""}>\n`; + } + const inner = children + .map((child) => serializer(child, level + 1)) + .join(""); + return `${pad}${openTag}\n${inner}${pad}\n`; + } + case DOMAdapter.NodeType.TEXT_NODE: { + const text = node.textContent?.trim(); + return text ? `${pad}${text}\n` : ""; + } + case DOMAdapter.NodeType.CDATA_SECTION_NODE: + return `${pad}\n`; + case DOMAdapter.NodeType.COMMENT_NODE: + return `${pad}\n`; + case DOMAdapter.NodeType.PROCESSING_INSTRUCTION_NODE: + const pi = node; + return `${pad}\n`; + case DOMAdapter.NodeType.DOCUMENT_NODE: + return Array.from(node.childNodes) + .map((child) => serializer(child, level)) + .join(""); + default: + return ""; + } + }; + return serializer(doc).trim(); + } + catch (error) { + throw new XJXError(`Failed to pretty print XML: ${error instanceof Error ? error.message : String(error)}`); + } + } + /** + * Check if XML string is well-formed + * @param xmlString XML string to validate + * @returns Object with validation result and any error messages + */ + validateXML(xmlString) { + try { + const doc = DOMAdapter.parseFromString(xmlString, "text/xml"); + const errors = doc.getElementsByTagName("parsererror"); + if (errors.length > 0) { + return { + isValid: false, + message: errors[0].textContent || "Unknown parsing error", + }; + } + return { isValid: true }; + } + catch (error) { + return { + isValid: false, + message: error instanceof Error ? error.message : String(error), + }; + } + } + /** + * Add XML declaration to a string if missing + * @param xmlString XML string + * @returns XML string with declaration + */ + ensureXMLDeclaration(xmlString) { + if (!xmlString.trim().startsWith("\n' + xmlString; + } + return xmlString; + } + /** + * Escapes special characters in text for safe XML usage. + * @param text Text to escape. + * @returns Escaped XML string. + */ + escapeXML(text) { + if (typeof text !== "string" || text.length === 0) { + return ""; + } + return text.replace(/[&<>"']/g, (char) => { + switch (char) { + case "&": + return "&"; + case "<": + return "<"; + case ">": + return ">"; + case '"': + return """; + case "'": + return "'"; + default: + return char; + } + }); + } + /** + * Unescapes XML entities back to their character equivalents. + * @param text Text with XML entities. + * @returns Unescaped text. + */ + unescapeXML(text) { + if (typeof text !== "string" || text.length === 0) { + return ""; + } + return text.replace(/&(amp|lt|gt|quot|apos);/g, (match, entity) => { + switch (entity) { + case "amp": + return "&"; + case "lt": + return "<"; + case "gt": + return ">"; + case "quot": + return '"'; + case "apos": + return "'"; + default: + return match; + } + }); + } + /** + * Extract the namespace prefix from a qualified name + * @param qualifiedName Qualified name (e.g., "ns:element") + * @returns Prefix or null if no prefix + */ + extractPrefix(qualifiedName) { + const colonIndex = qualifiedName.indexOf(":"); + return colonIndex > 0 ? qualifiedName.substring(0, colonIndex) : null; + } + /** + * Extract the local name from a qualified name + * @param qualifiedName Qualified name (e.g., "ns:element") + * @returns Local name + */ + extractLocalName(qualifiedName) { + const colonIndex = qualifiedName.indexOf(":"); + return colonIndex > 0 + ? qualifiedName.substring(colonIndex + 1) + : qualifiedName; + } + /** + * Create a qualified name from prefix and local name + * @param prefix Namespace prefix (can be null) + * @param localName Local name + * @returns Qualified name + */ + createQualifiedName(prefix, localName) { + return prefix ? `${prefix}:${localName}` : localName; + } +} + +/** + * JsonToXmlConverter for converting JSON to XML + */ +class JsonToXmlConverter { + /** + * Constructor for JsonToXmlConverter + * @param config Configuration options + */ + constructor(config) { + this.config = config; + this.xmlUtil = new XmlUtil(this.config); + this.transformUtil = new TransformUtil(this.config); + } + /** + * Convert JSON object to XML string + * @param jsonObj JSON object to convert + * @returns XML string + */ + convert(jsonObj) { + try { + const doc = DOMAdapter.createDocument(); + const rootElement = this.jsonToNode(jsonObj, doc); + if (rootElement) { + // Handle the temporary root element if it exists + if (doc.documentElement && doc.documentElement.nodeName === "temp") { + doc.replaceChild(rootElement, doc.documentElement); + } + else { + doc.appendChild(rootElement); + } + } + // Add XML declaration if specified + let xmlString = DOMAdapter.serializeToString(doc); + // remove xhtml decl inserted by dom + xmlString = xmlString.replace(' xmlns="http://www.w3.org/1999/xhtml"', ''); + if (this.config.outputOptions.xml.declaration) { + xmlString = this.xmlUtil.ensureXMLDeclaration(xmlString); + } + // Apply pretty printing if enabled + if (this.config.outputOptions.prettyPrint) { + xmlString = this.xmlUtil.prettyPrintXml(xmlString); + } + return xmlString; + } + catch (error) { + throw new XJXError(`Failed to convert JSON to XML: ${error instanceof Error ? error.message : String(error)}`); + } + } + /** + * Convert JSON object to DOM node + * @param jsonObj JSON object to convert + * @param doc Document for creating elements + * @param parentContext Optional parent context for transformation chain + * @param path Current path in the JSON object + * @returns DOM Element + */ + jsonToNode(jsonObj, doc, parentContext, path = "") { + if (!jsonObj || typeof jsonObj !== "object") { + return null; + } + // Get the node name (first key in the object) + const nodeName = Object.keys(jsonObj)[0]; + if (!nodeName) { + return null; + } + const nodeData = jsonObj[nodeName]; + // Update the current path + const currentPath = path ? `${path}.${nodeName}` : nodeName; + // Create element with namespace if available + let element; + const namespaceKey = this.config.propNames.namespace; + const prefixKey = this.config.propNames.prefix; + const ns = nodeData[namespaceKey]; + const prefix = nodeData[prefixKey]; + // Create context for this node + const context = this.transformUtil.createContext('json-to-xml', nodeName, DOMAdapter.NodeType.ELEMENT_NODE, { + path: currentPath, + namespace: ns, + prefix: prefix, + parent: parentContext + }); + if (ns && this.config.preserveNamespaces) { + if (prefix) { + // Create element with namespace and prefix + element = DOMAdapter.createElementNS(ns, `${prefix}:${nodeName}`); + } + else { + // Create element with namespace but no prefix + element = DOMAdapter.createElementNS(ns, nodeName); + } + } + else { + // Create element without namespace + element = DOMAdapter.createElement(nodeName); + } + // Process attributes if enabled + const attributesKey = this.config.propNames.attributes; + const valueKey = this.config.propNames.value; + if (this.config.preserveAttributes && + nodeData[attributesKey] && + Array.isArray(nodeData[attributesKey])) { + nodeData[attributesKey].forEach((attrObj) => { + const attrName = Object.keys(attrObj)[0]; + if (!attrName) + return; + const attrData = attrObj[attrName]; + // Create attribute context + const attrContext = this.transformUtil.createContext('json-to-xml', nodeName, DOMAdapter.NodeType.ELEMENT_NODE, { + path: `${currentPath}.${attrName}`, + namespace: attrData[namespaceKey], + prefix: attrData[prefixKey], + isAttribute: true, + attributeName: attrName, + parent: context + }); + // Apply transformations to attribute value + const transformedValue = this.transformUtil.applyTransforms(attrData[valueKey] || "", attrContext); + const attrNs = attrData[namespaceKey]; + const attrPrefix = attrData[prefixKey]; + // Form qualified name for attribute if it has a prefix + let qualifiedName = attrName; + if (attrPrefix && this.config.preserveNamespaces) { + qualifiedName = `${attrPrefix}:${attrName}`; + } + DOMAdapter.setNamespacedAttribute(element, (attrNs && this.config.preserveNamespaces) ? attrNs : null, qualifiedName, transformedValue); + }); + } + // Process simple text value + if (nodeData[valueKey] !== undefined) { + // Apply transformations to text value + const textContext = this.transformUtil.createContext('json-to-xml', nodeName, DOMAdapter.NodeType.TEXT_NODE, { + path: `${currentPath}.#text`, + namespace: ns, + prefix: prefix, + parent: context + }); + const transformedValue = this.transformUtil.applyTransforms(nodeData[valueKey], textContext); + element.textContent = transformedValue; + } + // Process children + const childrenKey = this.config.propNames.children; + const cdataKey = this.config.propNames.cdata; + const commentsKey = this.config.propNames.comments; + const instructionKey = this.config.propNames.instruction; + const targetKey = this.config.propNames.target; + if (nodeData[childrenKey] && + Array.isArray(nodeData[childrenKey])) { + nodeData[childrenKey].forEach((child) => { + // Text nodes + if (child[valueKey] !== undefined && + this.config.preserveTextNodes) { + // Apply transformations to text node + const textContext = this.transformUtil.createContext('json-to-xml', '#text', DOMAdapter.NodeType.TEXT_NODE, { + path: `${currentPath}.#text`, + parent: context + }); + const transformedText = this.transformUtil.applyTransforms(child[valueKey], textContext); + element.appendChild(DOMAdapter.createTextNode(this.xmlUtil.escapeXML(transformedText))); + } + // CDATA sections + else if (child[cdataKey] !== undefined && + this.config.preserveCDATA) { + // Apply transformations to CDATA + const cdataContext = this.transformUtil.createContext('json-to-xml', '#cdata', DOMAdapter.NodeType.CDATA_SECTION_NODE, { + path: `${currentPath}.#cdata`, + parent: context + }); + const transformedCData = this.transformUtil.applyTransforms(child[cdataKey], cdataContext); + element.appendChild(DOMAdapter.createCDATASection(transformedCData)); + } + // Comments + else if (child[commentsKey] !== undefined && + this.config.preserveComments) { + element.appendChild(DOMAdapter.createComment(child[commentsKey])); + } + // Processing instructions + else if (child[instructionKey] !== undefined && + this.config.preserveProcessingInstr) { + const piData = child[instructionKey]; + const target = piData[targetKey]; + const data = piData[valueKey] || ""; + if (target) { + element.appendChild(DOMAdapter.createProcessingInstruction(target, data)); + } + } + // Element nodes (recursive) + else { + const childElement = this.jsonToNode(child, doc, context, currentPath); + if (childElement) { + element.appendChild(childElement); + } + } + }); + } + return element; + } +} + +/** + * Default configuration + */ +const DEFAULT_CONFIG = { + preserveNamespaces: true, + preserveComments: true, + preserveProcessingInstr: true, + preserveCDATA: true, + preserveTextNodes: true, + preserveWhitespace: false, + preserveAttributes: true, + outputOptions: { + prettyPrint: true, + indent: 2, + compact: true, + json: {}, + xml: { + declaration: true, + }, + }, + propNames: { + namespace: "$ns", + prefix: "$pre", + attributes: "$attr", + value: "$val", + cdata: "$cdata", + comments: "$cmnt", + instruction: "$pi", + target: "$trgt", + children: "$children", + }, +}; + +/** + * XJX - Facade class for XML-JSON conversion operations + */ +class XJX { + /** + * Constructor for XJX utility + * @param config Configuration options + */ + constructor(config = {}) { + // First create a jsonUtil instance with default config to use its methods + this.jsonUtil = new JsonUtil(DEFAULT_CONFIG); + // Create a deep clone of the default config + const defaultClone = this.jsonUtil.deepClone(DEFAULT_CONFIG); + // Deep merge with the provided config + this.config = this.jsonUtil.deepMerge(defaultClone, config); + // Re-initialize jsonUtil with the merged config + this.jsonUtil = new JsonUtil(this.config); + // Initialize other components + this.xmlUtil = new XmlUtil(this.config); + this.xmlToJsonConverter = new XmlToJsonConverter(this.config); + this.jsonToXmlConverter = new JsonToXmlConverter(this.config); + } + /** + * Convert XML string to JSON + * @param xmlString XML content as string + * @returns JSON object representing the XML content + */ + xmlToJson(xmlString) { + return this.xmlToJsonConverter.convert(xmlString); + } + /** + * Convert JSON object back to XML string + * @param jsonObj JSON object to convert + * @returns XML string + */ + jsonToXml(jsonObj) { + return this.jsonToXmlConverter.convert(jsonObj); + } + /** + * Pretty print an XML string + * @param xmlString XML string to format + * @returns Formatted XML string + */ + prettyPrintXml(xmlString) { + return this.xmlUtil.prettyPrintXml(xmlString); + } + /** + * Safely retrieves a value from a JSON object using a dot-separated path. + * @param obj The input JSON object + * @param path The dot-separated path string (e.g., "root.item.description.$val") + * @param fallback Value to return if the path does not resolve + * @returns The value at the specified path or the fallback value + */ + getPath(obj, path, fallback = undefined) { + return this.jsonUtil.getPath(obj, path, fallback); + } + /** + * Validate XML string + * @param xmlString XML string to validate + * @returns Validation result + */ + validateXML(xmlString) { + return this.xmlUtil.validateXML(xmlString); + } + /** + * Generate a JSON schema based on the current configuration + * @returns JSON schema object for validating XML-JSON documents + */ + generateJsonSchema() { + return this.jsonUtil.generateJsonSchema(); + } + /** + * Convert a standard JSON object to the XML-like JSON structure + * @param obj Standard JSON object + * @param root Optional root element configuration (string or object with properties) + * @returns XML-like JSON object ready for conversion to XML + */ + objectToXJX(obj, root) { + return this.jsonUtil.objectToXJX(obj, root); + } + /** + * Generate an example JSON object that matches the current configuration + * @param rootName Name of the root element + * @returns Example JSON object + */ + generateJsonExample(rootName = "root") { + return this.jsonUtil.generateExample(rootName); + } + /** + * Add a value transformer to the configuration + * @param transformer Value transformer to add + * @returns This XJX instance for chaining + */ + addTransformer(transformer) { + if (!this.config.valueTransforms) { + this.config.valueTransforms = []; + } + this.config.valueTransforms.push(transformer); + return this; + } + /** + * Removes all value transformers from the configuration + * @returns This XJX instance for chaining + */ + clearTransformers() { + this.config.valueTransforms = []; + return this; + } + /** + * Clean up any resources + */ + cleanup() { + DOMAdapter.cleanup(); + } +} + +/** + * Abstract base class for value transformers + */ +class ValueTransformer { + /** + * Process a value, transforming it if applicable + * @param value Value to potentially transform + * @param context Context including direction and other information + * @returns Transformed value or original if not applicable + */ + process(value, context) { + if (context.direction === 'xml-to-json') { + return this.xmlToJson(value, context); + } + else { + return this.jsonToXml(value, context); + } + } + /** + * Transform a value from XML to JSON representation + * @param value Value from XML + * @param context Transformation context + * @returns Transformed value for JSON + */ + xmlToJson(value, context) { + // Default implementation returns original value + return value; + } + /** + * Transform a value from JSON to XML representation + * @param value Value from JSON + * @param context Transformation context + * @returns Transformed value for XML + */ + jsonToXml(value, context) { + // Default implementation returns original value + return value; + } +} + +// Import locally so you can use it below + +export { DEFAULT_CONFIG, ValueTransformer, XJX, XJXError, XJX as default }; +//# sourceMappingURL=index.js.map diff --git a/dist/index.js.map b/dist/index.js.map new file mode 100644 index 0000000..7da0703 --- /dev/null +++ b/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../../src/core/types/error-types.ts","../../src/core/types/dom-types.ts","../../src/core/adapters/dom-adapter.ts","../../src/core/utils/json-utils.ts","../../src/core/transformers/TransformUtil.ts","../../src/core/converters/xml-to-json-converter.ts","../../src/core/utils/xml-utils.ts","../../src/core/converters/json-to-xml-converter.ts","../../src/core/config/config.ts","../../src/XJX.ts","../../src/core/transformers/ValueTransformer.ts","../../src/index.ts"],"sourcesContent":["/**\n * Error classes for the XJX library\n */\n\n/**\n * Base error class\n */\nexport class XJXError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'XMLToJSONError';\n }\n}\n\n/**\n * Error for XML parsing issues\n */\nexport class XmlToJsonError extends XJXError {\n constructor(message: string) {\n super(`XML parse error: ${message}`);\n this.name = 'XmlToJsonError';\n }\n}\n\n/**\n * Error for XML serialization issues\n */\nexport class JsonToXmlError extends XJXError {\n constructor(message: string) {\n super(`XML serialization error: ${message}`);\n this.name = 'JsonToXmlError';\n }\n}\n\n/**\n * Error for environment incompatibility\n */\nexport class EnvironmentError extends XJXError {\n constructor(message: string) {\n super(`Environment error: ${message}`);\n this.name = 'EnvironmentError';\n }\n}\n\n/**\n * Error for invalid configuration\n */\nexport class ConfigurationError extends XJXError {\n constructor(message: string) {\n super(`Configuration error: ${message}`);\n this.name = 'ConfigurationError';\n }\n}","/**\n * DOM node types as an enum for better type safety\n */\nexport enum NodeType {\n ELEMENT_NODE = 1,\n ATTRIBUTE_NODE = 2,\n TEXT_NODE = 3, \n CDATA_SECTION_NODE = 4,\n PROCESSING_INSTRUCTION_NODE = 7,\n COMMENT_NODE = 8,\n DOCUMENT_NODE = 9\n }","/**\n * DOM Environment provider with unified interface for browser and Node.js\n */\nimport { XJXError } from '../types/error-types';\nimport { NodeType } from '../types/dom-types';\n\n\ninterface DOMWindow {\n DOMParser: any;\n XMLSerializer: any;\n // Node: {\n // ELEMENT_NODE: number;\n // TEXT_NODE: number;\n // CDATA_SECTION_NODE: number;\n // COMMENT_NODE: number;\n // PROCESSING_INSTRUCTION_NODE: number;\n // DOCUMENT_NODE: number; \n // };\n document: Document;\n close?: () => void; \n}\n\ninterface JSDOMInstance {\n window: DOMWindow;\n}\n\nexport const DOMAdapter = (() => {\n // Environment-specific DOM implementation\n let domParser: any;\n let xmlSerializer: any;\n // let nodeTypes: NodeTypes;\n let docImplementation: any;\n let jsdomInstance: JSDOMInstance | null = null;\n\n try {\n if (typeof window === \"undefined\") {\n // Node.js environment - try JSDOM first\n try {\n const { JSDOM } = require(\"jsdom\");\n jsdomInstance = new JSDOM(\"\", {\n contentType: \"text/xml\",\n }) as JSDOMInstance;\n\n domParser = jsdomInstance.window.DOMParser;\n xmlSerializer = jsdomInstance.window.XMLSerializer;\n // nodeTypes = {\n // ELEMENT_NODE: jsdomInstance.window.Node.ELEMENT_NODE,\n // TEXT_NODE: jsdomInstance.window.Node.TEXT_NODE,\n // CDATA_SECTION_NODE: jsdomInstance.window.Node.CDATA_SECTION_NODE,\n // COMMENT_NODE: jsdomInstance.window.Node.COMMENT_NODE,\n // PROCESSING_INSTRUCTION_NODE: jsdomInstance.window.Node.PROCESSING_INSTRUCTION_NODE,\n // DOCUMENT_NODE: jsdomInstance.window.Node.DOCUMENT_NODE, // Add this line\n // };\n docImplementation = jsdomInstance.window.document.implementation;\n } catch (jsdomError) {\n // Fall back to xmldom if JSDOM isn't available\n try {\n const { DOMParser, XMLSerializer, DOMImplementation } = require('@xmldom/xmldom');\n domParser = DOMParser;\n xmlSerializer = XMLSerializer;\n // Standard DOM node types\n // nodeTypes = {\n // ELEMENT_NODE: 1,\n // TEXT_NODE: 3,\n // CDATA_SECTION_NODE: 4,\n // COMMENT_NODE: 8,\n // PROCESSING_INSTRUCTION_NODE: 7,\n // DOCUMENT_NODE: 9, \n // };\n const implementation = new DOMImplementation();\n docImplementation = implementation;\n } catch (xmldomError) {\n throw new XJXError(`Node.js environment detected but neither 'jsdom' nor '@xmldom/xmldom' are available.`);\n }\n }\n } else {\n // Browser environment\n if (!window.DOMParser) {\n throw new XJXError(\"DOMParser is not available in this environment\");\n }\n\n if (!window.XMLSerializer) {\n throw new XJXError(\"XMLSerializer is not available in this environment\");\n }\n\n domParser = window.DOMParser;\n xmlSerializer = window.XMLSerializer;\n // nodeTypes = {\n // ELEMENT_NODE: Node.ELEMENT_NODE,\n // TEXT_NODE: Node.TEXT_NODE,\n // CDATA_SECTION_NODE: Node.CDATA_SECTION_NODE,\n // COMMENT_NODE: Node.COMMENT_NODE,\n // PROCESSING_INSTRUCTION_NODE: Node.PROCESSING_INSTRUCTION_NODE,\n // DOCUMENT_NODE: Node.DOCUMENT_NODE, \n // };\n docImplementation = document.implementation;\n }\n } catch (error) {\n throw new XJXError(`DOM environment initialization failed: ${error instanceof Error ? error.message : String(error)}`);\n }\n\n return {\n createParser: () => {\n try {\n return new domParser();\n } catch (error) {\n throw new XJXError(`Failed to create DOM parser: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n createSerializer: () => {\n try {\n return new xmlSerializer();\n } catch (error) {\n throw new XJXError(`Failed to create XML serializer: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n NodeType,\n \n parseFromString: (xmlString: string, contentType: string = 'text/xml') => {\n try {\n const parser = new domParser();\n return parser.parseFromString(xmlString, contentType);\n } catch (error) {\n throw new XJXError(`Failed to parse XML: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n serializeToString: (node: Node) => {\n try {\n const serializer = new xmlSerializer();\n return serializer.serializeToString(node);\n } catch (error) {\n throw new XJXError(`Failed to serialize XML: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n createDocument: () => {\n try {\n // For browsers, create a document with a root element to avoid issues\n if (typeof window !== \"undefined\") {\n const parser = new domParser();\n return parser.parseFromString('', 'text/xml');\n } else {\n return docImplementation.createDocument(null, null, null);\n }\n } catch (error) {\n throw new XJXError(`Failed to create document: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n createElement: (tagName: string) => {\n try {\n if (typeof window !== \"undefined\") {\n return document.createElement(tagName);\n } else {\n const doc = docImplementation.createDocument(null, null, null);\n return doc.createElement(tagName);\n }\n } catch (error) {\n throw new XJXError(`Failed to create element: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n createElementNS: (namespaceURI: string, qualifiedName: string) => {\n try {\n if (typeof window !== \"undefined\") {\n return document.createElementNS(namespaceURI, qualifiedName);\n } else {\n const doc = docImplementation.createDocument(null, null, null);\n return doc.createElementNS(namespaceURI, qualifiedName);\n }\n } catch (error) {\n throw new XJXError(`Failed to create element with namespace: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n createTextNode: (data: string) => {\n try {\n if (typeof window !== \"undefined\") {\n return document.createTextNode(data);\n } else {\n const doc = docImplementation.createDocument(null, null, null);\n return doc.createTextNode(data);\n }\n } catch (error) {\n throw new XJXError(`Failed to create text node: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n createCDATASection: (data: string) => {\n try {\n // For browser compatibility, use document.implementation to create CDATA\n if (typeof window !== \"undefined\") {\n const doc = document.implementation.createDocument(null, null, null);\n return doc.createCDATASection(data);\n } else {\n const doc = docImplementation.createDocument(null, null, null);\n return doc.createCDATASection(data);\n }\n } catch (error) {\n throw new XJXError(`Failed to create CDATA section: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n createComment: (data: string) => {\n try {\n if (typeof window !== \"undefined\") {\n return document.createComment(data);\n } else {\n const doc = docImplementation.createDocument(null, null, null);\n return doc.createComment(data);\n }\n } catch (error) {\n throw new XJXError(`Failed to create comment: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n createProcessingInstruction: (target: string, data: string) => {\n try {\n if (typeof window !== \"undefined\") {\n const doc = document.implementation.createDocument(null, null, null);\n return doc.createProcessingInstruction(target, data);\n } else {\n const doc = docImplementation.createDocument(null, null, null);\n return doc.createProcessingInstruction(target, data);\n }\n } catch (error) {\n throw new XJXError(`Failed to create processing instruction: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n // New helper methods\n \n /**\n * Creates a proper namespace qualified attribute\n */\n setNamespacedAttribute: (element: Element, namespaceURI: string | null, qualifiedName: string, value: string): void => {\n try {\n if (namespaceURI) {\n element.setAttributeNS(namespaceURI, qualifiedName, value);\n } else {\n element.setAttribute(qualifiedName, value);\n }\n } catch (error) {\n throw new XJXError(`Failed to set attribute: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n /**\n * Check if an object is a DOM node\n */\n isNode: (obj: any): boolean => {\n try {\n return obj && typeof obj === 'object' && typeof obj.nodeType === 'number';\n } catch (error) {\n return false;\n }\n },\n \n /**\n * Get DOM node type as string for debugging\n */\n getNodeTypeName: (nodeType: number): string => {\n switch (nodeType) {\n case NodeType.ELEMENT_NODE: return 'ELEMENT_NODE';\n case NodeType.TEXT_NODE: return 'TEXT_NODE';\n case NodeType.CDATA_SECTION_NODE: return 'CDATA_SECTION_NODE';\n case NodeType.COMMENT_NODE: return 'COMMENT_NODE';\n case NodeType.PROCESSING_INSTRUCTION_NODE: return 'PROCESSING_INSTRUCTION_NODE';\n default: return `UNKNOWN_NODE_TYPE(${nodeType})`;\n }\n },\n \n /**\n * Get all node attributes as an object\n */\n getNodeAttributes: (node: Element): Record => {\n const result: Record = {};\n for (let i = 0; i < node.attributes.length; i++) {\n const attr = node.attributes[i];\n result[attr.name] = attr.value;\n }\n return result;\n },\n \n // Cleanup method (mainly for JSDOM)\n cleanup: () => {\n if (jsdomInstance && typeof jsdomInstance.window.close === 'function') {\n jsdomInstance.window.close();\n }\n }\n };\n})();","/**\n * JSONUtil - Utility functions for JSON processing\n */\nimport { Configuration } from \"../types/config-types\";\nimport { JSONValue } from \"../types/json-types\";\n\nexport class JsonUtil {\n private config: Configuration;\n\n /**\n * Constructor for JSONUtil\n * @param config Configuration options\n */\n constructor(config: Configuration) {\n this.config = config;\n }\n\n /**\n * Safely retrieves a value from a JSON object using a dot-separated path.\n * Automatically traverses into children arrays and flattens results.\n *\n * @param obj The input JSON object\n * @param path The dot-separated path string (e.g., \"root.item.description.$val\")\n * @param fallback Value to return if the path does not resolve\n * @returns Retrieved value or fallback\n */\n getPath(\n obj: Record,\n path: string,\n fallback?: JSONValue\n ): any {\n const segments = path.split(\".\");\n let current: any = obj;\n\n for (const segment of segments) {\n if (Array.isArray(current)) {\n // Apply the segment to each array element and flatten results\n const results = current\n .map((item) => this.resolveSegment(item, segment))\n .flat()\n .filter((v) => v !== undefined);\n current = results.length > 0 ? results : undefined;\n } else {\n current = this.resolveSegment(current, segment);\n }\n\n if (current === undefined) return fallback;\n }\n\n // Collapse singleton arrays\n if (Array.isArray(current) && current.length === 1) {\n return current[0];\n }\n\n return current !== undefined ? current : fallback;\n }\n\n /**\n * Resolves a single path segment in the context of a JSON object.\n * Falls back to searching children for matching keys.\n *\n * @param obj The current object\n * @param segment The path segment to resolve\n * @returns Resolved value or undefined\n */\n private resolveSegment(obj: any, segment: string): any {\n if (obj == null || typeof obj !== \"object\") return undefined;\n\n // Direct property access\n if (segment in obj) {\n return obj[segment];\n }\n\n // Check if this is a special property name that matches the config\n if (\n segment === this.config.propNames.value ||\n segment === this.config.propNames.children ||\n segment === this.config.propNames.attributes ||\n segment === this.config.propNames.namespace ||\n segment === this.config.propNames.prefix ||\n segment === this.config.propNames.cdata ||\n segment === this.config.propNames.comments ||\n segment === this.config.propNames.instruction ||\n segment === this.config.propNames.target\n ) {\n const configKey = Object.entries(this.config.propNames).find(\n ([_, value]) => value === segment\n )?.[0];\n\n if (configKey && obj[segment] !== undefined) {\n return obj[segment];\n }\n }\n\n // Check children for objects that contain the segment\n const childrenKey = this.config.propNames.children;\n const children = obj[childrenKey];\n if (Array.isArray(children)) {\n const matches = children\n .map((child) => (segment in child ? child[segment] : undefined))\n .filter((v) => v !== undefined);\n return matches.length > 0 ? matches : undefined;\n }\n\n return undefined;\n }\n\n /**\n * Converts a plain JSON object to the XML-like JSON structure.\n * Optionally wraps the result in a root element with attributes and namespaces.\n *\n * @param obj Standard JSON object\n * @param root Optional root element configuration (either a string or object with $ keys)\n * @returns XML-like JSON object\n */\n objectToXJX(obj: any, root?: any): any {\n const wrappedObject = this.wrapObject(obj);\n\n if (typeof root === \"string\") {\n // Root is a simple string: wrap result with this root tag\n return { [root]: wrappedObject };\n }\n\n if (root && typeof root === \"object\") {\n // Handle root with config-based keys\n const elementName = root.name || \"root\"; // Default to \"root\" if no name is provided\n const prefix = root[this.config.propNames.prefix] || \"\";\n const qualifiedName = prefix ? `${prefix}:${elementName}` : elementName;\n\n const result: any = {\n [qualifiedName]: {},\n };\n\n // Add attributes to the root element if defined\n const attrsKey = this.config.propNames.attributes;\n if (root[attrsKey] && Array.isArray(root[attrsKey])) {\n result[qualifiedName][attrsKey] = root[attrsKey];\n }\n\n // Merge existing children with the new generated children\n const childrenKey = this.config.propNames.children;\n const children = root[childrenKey] ? root[childrenKey] : [];\n result[qualifiedName][childrenKey] = [\n ...children,\n { [elementName]: wrappedObject },\n ];\n\n // Add namespace and prefix if defined\n const nsKey = this.config.propNames.namespace;\n if (root[nsKey]) {\n result[qualifiedName][nsKey] = root[nsKey];\n }\n\n if (prefix && root[nsKey]) {\n result[qualifiedName][`xmlns:${prefix}`] = root[nsKey];\n }\n\n return result;\n }\n\n // Default behavior if no root is provided\n return wrappedObject;\n }\n\n /**\n * Wraps a standard JSON value in the XML-like JSON structure\n * @param value Value to wrap\n * @returns Wrapped value\n */\n private wrapObject(value: any): any {\n const valKey = this.config.propNames.value;\n const childrenKey = this.config.propNames.children;\n\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return { [valKey]: value };\n }\n\n if (Array.isArray(value)) {\n // For arrays, wrap each item and return as a children-style array of repeated elements\n return {\n [childrenKey]: value.map((item) => {\n return this.wrapObject(item);\n }),\n };\n }\n\n if (typeof value === \"object\") {\n // It's an object: wrap its properties in children\n const children = Object.entries(value).map(([key, val]) => ({\n [key]: this.wrapObject(val),\n }));\n\n return { [childrenKey]: children };\n }\n\n return undefined; // Fallback for unhandled types\n }\n\n /**\n * Check if an object is empty\n * @param value Value to check\n * @returns true if empty\n */\n isEmpty(value: any): boolean {\n if (value == null) return true;\n if (Array.isArray(value)) return value.length === 0;\n if (typeof value === \"object\") return Object.keys(value).length === 0;\n return false;\n }\n\n /**\n * Safely stringify JSON for debugging\n * @param obj Object to stringify\n * @param indent Optional indentation level\n * @returns JSON string representation\n */\n safeStringify(obj: any, indent: number = 2): string {\n try {\n return JSON.stringify(obj, null, indent);\n } catch (error) {\n return \"[Cannot stringify object]\";\n }\n }\n\n /**\n * Deep clone an object\n * @param obj Object to clone\n * @returns Cloned object\n */\n deepClone(obj: any): any {\n try {\n return JSON.parse(JSON.stringify(obj));\n } catch (error) {\n throw new Error(\n `Failed to deep clone object: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n /**\n * Deep merge two objects with proper type handling\n * @param target Target object\n * @param source Source object\n * @returns Merged object (target is modified)\n */\n deepMerge(target: T, source: Partial): T {\n if (!source || typeof source !== \"object\" || source === null) {\n return target;\n }\n\n if (!target || typeof target !== \"object\" || target === null) {\n return source as unknown as T;\n }\n\n Object.keys(source).forEach((key) => {\n const sourceValue = source[key as keyof Partial];\n const targetValue = target[key as keyof T];\n\n // If both source and target values are objects, recursively merge them\n if (\n sourceValue !== null &&\n targetValue !== null &&\n typeof sourceValue === \"object\" &&\n typeof targetValue === \"object\" &&\n !Array.isArray(sourceValue) &&\n !Array.isArray(targetValue)\n ) {\n // Recursively merge the nested objects\n (target as any)[key] = this.deepMerge(targetValue, sourceValue as any);\n } else {\n // Otherwise just replace the value\n (target as any)[key] = sourceValue;\n }\n });\n\n return target;\n }\n\n /**\n * Generates a JSON schema that matches the current configuration\n * @returns JSON schema object\n */\n generateJsonSchema(): Record {\n try {\n const propNames = this.config.propNames;\n const compact = this.config.outputOptions.compact || false;\n const preserveNamespaces = this.config.preserveNamespaces;\n const preserveComments = this.config.preserveComments;\n const preserveCDATA = this.config.preserveCDATA;\n const preserveProcessingInstr = this.config.preserveProcessingInstr;\n const preserveTextNodes = this.config.preserveTextNodes;\n const preserveWhitespace = this.config.preserveWhitespace;\n const preserveAttributes = this.config.preserveAttributes;\n\n // Determine which properties are required based on the configuration\n const requiredProps: string[] = [];\n\n if (!compact) {\n // Only add collections as required if they're preserved in the config\n if (preserveAttributes) requiredProps.push(propNames.attributes);\n\n if (preserveCDATA) requiredProps.push(propNames.cdata);\n if (preserveComments) requiredProps.push(propNames.comments);\n if (preserveProcessingInstr) requiredProps.push(propNames.instruction);\n requiredProps.push(propNames.children);\n\n if (preserveTextNodes) {\n requiredProps.push(propNames.value);\n\n if (preserveNamespaces) {\n requiredProps.push(propNames.namespace);\n // Note: prefix is not required as it may not be present for all elements\n }\n }\n }\n\n // Create schema for element properties\n const elementProperties: Record = {};\n\n // Add namespace property if preserving namespaces\n if (preserveNamespaces) {\n elementProperties[propNames.namespace] = {\n description: \"Namespace URI of the element\",\n type: \"string\",\n };\n\n // Add prefix property if preserving namespaces\n elementProperties[propNames.prefix] = {\n description: \"Namespace prefix of the element\",\n type: \"string\",\n };\n }\n\n // Add value property if preserving text nodes\n if (preserveTextNodes) {\n elementProperties[propNames.value] = {\n description: \"Text content of the element\",\n type: \"string\",\n };\n }\n\n // Add attributes property\n if (preserveAttributes) {\n elementProperties[propNames.attributes] = {\n description: \"Element attributes\",\n type: \"array\",\n items: {\n type: \"object\",\n patternProperties: {\n \"^.*$\": {\n type: \"object\",\n properties: {\n [propNames.value]: {\n description: \"Attribute value\",\n type: \"string\",\n },\n },\n required: [propNames.value],\n },\n },\n additionalProperties: false,\n },\n };\n\n // If preserving namespaces, add namespace properties to attribute schema\n if (preserveNamespaces) {\n const attrProps =\n elementProperties[propNames.attributes].items.patternProperties[\n \"^.*$\"\n ].properties;\n\n attrProps[propNames.namespace] = {\n description: \"Namespace URI of the attribute\",\n type: \"string\",\n };\n\n attrProps[propNames.prefix] = {\n description: \"Namespace prefix of the attribute\",\n type: \"string\",\n };\n }\n }\n\n // Add CDATA property if preserving CDATA\n if (preserveCDATA) {\n elementProperties[propNames.cdata] = {\n description: \"CDATA section content\",\n type: \"string\",\n };\n }\n\n // Add comments property if preserving comments\n if (preserveComments) {\n elementProperties[propNames.comments] = {\n description: \"Comment content\",\n type: \"string\",\n };\n }\n\n // Add processing instructions property if preserving them\n if (preserveProcessingInstr) {\n elementProperties[propNames.instruction] = {\n description: \"Processing instruction\",\n type: \"object\",\n properties: {\n [propNames.target]: {\n description: \"Processing instruction target\",\n type: \"string\",\n },\n [propNames.value]: {\n description: \"Processing instruction content\",\n type: \"string\",\n },\n },\n required: [propNames.target],\n };\n }\n\n // Add children property with recursive schema\n elementProperties[propNames.children] = {\n description: \"Child elements\",\n type: \"array\",\n items: {\n type: \"object\",\n patternProperties: {\n \"^.*$\": {\n $ref: \"#/definitions/element\",\n },\n },\n additionalProperties: false,\n },\n };\n\n // Create element definition (will be referenced recursively)\n const elementDefinition = {\n type: \"object\",\n properties: elementProperties,\n required: requiredProps,\n additionalProperties: false,\n };\n\n // Build the complete schema\n const schema = {\n $schema: \"https://json-schema.org/draft/2020-12/schema\",\n title: \"XJX JSON Schema\",\n description:\n \"Schema for JSON representation of XML documents using the XJX library\",\n type: \"object\",\n patternProperties: {\n \"^.*$\": {\n $ref: \"#/definitions/element\",\n },\n },\n additionalProperties: false,\n definitions: {\n element: elementDefinition,\n },\n };\n\n return schema;\n } catch (error) {\n throw new Error(\n `Schema generation failed: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n /**\n * Generate an example JSON object based on the schema\n * @param {string} rootName - Name of the root element\n * @returns {Record} - Example JSON object\n */\n generateExample(rootName: string = \"root\"): Record {\n const propNames = this.config.propNames;\n const preserveNamespaces = this.config.preserveNamespaces;\n const preserveComments = this.config.preserveComments;\n const preserveCDATA = this.config.preserveCDATA;\n const preserveProcessingInstr = this.config.preserveProcessingInstr;\n const preserveAttributes = this.config.preserveAttributes;\n\n // Simple example with common features\n const example: Record = {\n [rootName]: {\n [propNames.value]: \"Root content\",\n [propNames.children]: [\n {\n child: {\n [propNames.value]: \"Child content\",\n },\n },\n ],\n },\n };\n\n // Add namespace properties if enabled\n if (preserveNamespaces) {\n example[rootName][propNames.namespace] = \"http://example.org/ns\";\n example[rootName][propNames.prefix] = \"ex\";\n example[rootName][propNames.children][0].child[propNames.namespace] =\n \"http://example.org/ns\";\n example[rootName][propNames.children][0].child[propNames.prefix] = \"ex\";\n }\n\n // Add attributes if enabled\n if (preserveAttributes) {\n example[rootName][propNames.attributes] = [\n { id: { [propNames.value]: \"root-1\" } },\n { lang: { [propNames.value]: \"en\" } },\n ];\n\n if (preserveNamespaces) {\n example[rootName][propNames.attributes][1].lang[propNames.prefix] =\n \"xml\";\n }\n\n example[rootName][propNames.children][0].child[propNames.attributes] = [\n { id: { [propNames.value]: \"child-1\" } },\n ];\n }\n\n // Add CDATA if enabled\n if (preserveCDATA) {\n example[rootName][propNames.children][0].child[propNames.children] = [\n { [propNames.cdata]: \"Raw content\" },\n ];\n }\n\n // Add comments if enabled\n if (preserveComments) {\n if (!example[rootName][propNames.children][0].child[propNames.children]) {\n example[rootName][propNames.children][0].child[propNames.children] = [];\n }\n\n example[rootName][propNames.children][0].child[propNames.children].push({\n [propNames.comments]: \"Comment about the child\",\n });\n }\n\n // Add processing instruction if enabled\n if (preserveProcessingInstr) {\n if (!example[rootName][propNames.children]) {\n example[rootName][propNames.children] = [];\n }\n\n example[rootName][propNames.children].unshift({\n [propNames.instruction]: {\n [propNames.target]: \"xml-stylesheet\",\n [propNames.value]: 'type=\"text/css\" href=\"style.css\"',\n },\n });\n }\n\n return example;\n }\n}\n","/**\n * Utilities for applying value transformations\n */\nimport { Configuration } from '../types/config-types';\nimport { TransformContext, TransformDirection } from './ValueTransformer';\nimport { DOMAdapter } from '../adapters/dom-adapter';\n\n/**\n * Utility for applying value transformations\n */\nexport class TransformUtil {\n private config: Configuration;\n\n /**\n * Create a new TransformUtil\n * @param config Configuration\n */\n constructor(config: Configuration) {\n this.config = config;\n }\n\n /**\n * Apply transforms to a value\n * @param value Value to transform\n * @param context Transformation context\n * @returns Transformed value\n */\n applyTransforms(value: any, context: TransformContext): any {\n // Skip transformation if no transformers are configured\n if (!this.config.valueTransforms || this.config.valueTransforms.length === 0) {\n return value;\n }\n\n // Apply each transformer in sequence\n let transformedValue = value;\n for (const transformer of this.config.valueTransforms) {\n transformedValue = transformer.process(transformedValue, context);\n }\n\n return transformedValue;\n }\n\n /**\n * Create a transform context\n * @param direction Direction of transformation\n * @param nodeName Name of the current node\n * @param nodeType DOM node type\n * @param options Additional context options\n * @returns Transform context\n */\n createContext(\n direction: TransformDirection,\n nodeName: string,\n nodeType: number,\n options: {\n path?: string;\n namespace?: string;\n prefix?: string;\n isAttribute?: boolean;\n attributeName?: string;\n parent?: TransformContext;\n } = {}\n ): TransformContext {\n return {\n direction,\n nodeName,\n nodeType,\n path: options.path || nodeName,\n namespace: options.namespace,\n prefix: options.prefix,\n isAttribute: options.isAttribute || false,\n attributeName: options.attributeName,\n parent: options.parent,\n config: this.config,\n };\n }\n\n /**\n * Get a user-friendly node type name for debugging\n * @param nodeType DOM node type\n * @returns String representation of node type\n */\n getNodeTypeName(nodeType: number): string {\n return DOMAdapter.getNodeTypeName(nodeType);\n }\n}","/**\n * XmlToJsonConverter class for converting XML to JSON with consistent namespace handling\n */\nimport { Configuration } from \"../types/config-types\";\nimport { XJXError } from \"../types/error-types\";\nimport { DOMAdapter } from \"../adapters/dom-adapter\";\nimport { JsonUtil } from \"../utils/json-utils\";\nimport { TransformUtil } from \"../transformers/TransformUtil\";\nimport { TransformContext } from \"../transformers/ValueTransformer\";\n\n/**\n * XmlToJsonConverter Parser for converting XML to JSON\n */\nexport class XmlToJsonConverter {\n private config: Configuration;\n private jsonUtil: JsonUtil;\n private transformUtil: TransformUtil;\n\n /**\n * Constructor for XmlToJsonConverter\n * @param config Configuration options\n */\n constructor(config: Configuration) {\n this.config = config;\n this.jsonUtil = new JsonUtil(this.config);\n this.transformUtil = new TransformUtil(this.config);\n }\n\n /**\n * Convert XML string to JSON\n * @param xmlString XML content as string\n * @returns JSON object representing the XML content\n */\n public convert(xmlString: string): Record {\n try {\n const xmlDoc = DOMAdapter.parseFromString(xmlString, \"text/xml\");\n\n // Check for parsing errors\n const errors = xmlDoc.getElementsByTagName(\"parsererror\");\n if (errors.length > 0) {\n throw new XJXError(`XML parsing error: ${errors[0].textContent}`);\n }\n\n return this.nodeToJson(xmlDoc.documentElement);\n } catch (error) {\n throw new XJXError(\n `Failed to convert XML to JSON: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n /**\n * Convert a DOM node to JSON representation\n * @param node DOM node to convert\n * @param parentContext Optional parent context for transformation chain\n * @param path Current path in the XML tree\n * @returns JSON representation of the node\n */\n private nodeToJson(node: Node, parentContext?: TransformContext, path: string = \"\"): Record {\n const result: Record = {};\n\n // Handle element nodes\n if (node.nodeType === DOMAdapter.NodeType.ELEMENT_NODE) {\n const element = node as Element;\n // Use localName instead of nodeName to strip namespace prefix\n const nodeName =\n element.localName ||\n element.nodeName.split(\":\").pop() ||\n element.nodeName;\n\n // Update the current path\n const currentPath = path ? `${path}.${nodeName}` : nodeName;\n\n const nodeObj: Record = {};\n\n // Create context for this node\n const context = this.transformUtil.createContext(\n 'xml-to-json',\n nodeName,\n node.nodeType,\n {\n path: currentPath,\n namespace: element.namespaceURI || undefined,\n prefix: element.prefix || undefined,\n parent: parentContext\n }\n );\n\n // Process namespaces if enabled\n if (this.config.preserveNamespaces) {\n const ns = element.namespaceURI;\n if (ns) {\n nodeObj[this.config.propNames.namespace] = ns;\n }\n\n const prefix = element.prefix;\n if (prefix) {\n nodeObj[this.config.propNames.prefix] = prefix;\n }\n }\n\n // Process attributes if enabled\n if (this.config.preserveAttributes && element.attributes.length > 0) {\n const attrs: Array> = [];\n\n for (let i = 0; i < element.attributes.length; i++) {\n const attr = element.attributes[i];\n // Strip namespace prefix from attribute name\n const attrLocalName =\n attr.localName || attr.name.split(\":\").pop() || attr.name;\n\n // Create attribute context\n const attrContext = this.transformUtil.createContext(\n 'xml-to-json',\n nodeName,\n node.nodeType,\n {\n path: `${currentPath}.${attrLocalName}`,\n namespace: attr.namespaceURI || undefined,\n prefix: attr.prefix || undefined,\n isAttribute: true,\n attributeName: attrLocalName,\n parent: context\n }\n );\n\n // Apply transformations to attribute value\n const transformedValue = this.transformUtil.applyTransforms(\n attr.value,\n attrContext\n );\n\n // Create attribute object with consistent structure\n const attrObj: Record = {\n [attrLocalName]: {\n [this.config.propNames.value]: transformedValue,\n },\n };\n\n // Add namespace info for attribute if present and enabled\n if (this.config.preserveNamespaces) {\n // Handle attribute namespace\n if (attr.namespaceURI) {\n attrObj[attrLocalName][this.config.propNames.namespace] =\n attr.namespaceURI;\n }\n\n // Handle attribute prefix\n if (attr.prefix) {\n attrObj[attrLocalName][this.config.propNames.prefix] =\n attr.prefix;\n }\n }\n\n attrs.push(attrObj);\n }\n\n if (attrs.length > 0) {\n nodeObj[this.config.propNames.attributes] = attrs;\n }\n }\n\n // Process child nodes\n if (element.childNodes.length > 0) {\n const children: Array> = [];\n const childrenKey = this.config.propNames.children;\n const valueKey = this.config.propNames.value;\n const cdataKey = this.config.propNames.cdata;\n const commentsKey = this.config.propNames.comments;\n const instructionKey = this.config.propNames.instruction;\n const targetKey = this.config.propNames.target;\n\n for (let i = 0; i < element.childNodes.length; i++) {\n const child = element.childNodes[i];\n\n // Text nodes - only process if preserveTextNodes is true\n if (child.nodeType === DOMAdapter.NodeType.TEXT_NODE) {\n if (this.config.preserveTextNodes) {\n let text = child.nodeValue || \"\";\n\n // Skip whitespace-only text nodes if whitespace preservation is disabled\n if (!this.config.preserveWhitespace) {\n if (text.trim() === \"\") {\n continue;\n }\n // Trim the text when preserveWhitespace is false\n text = text.trim();\n }\n\n // Create text node context\n const textContext = this.transformUtil.createContext(\n 'xml-to-json',\n '#text',\n child.nodeType,\n {\n path: `${currentPath}.#text`,\n parent: context\n }\n );\n\n // Apply transformations to text value\n const transformedText = this.transformUtil.applyTransforms(\n text,\n textContext\n );\n\n children.push({ [valueKey]: transformedText });\n }\n }\n // CDATA sections\n else if (\n child.nodeType === DOMAdapter.NodeType.CDATA_SECTION_NODE &&\n this.config.preserveCDATA\n ) {\n // Create CDATA context\n const cdataContext = this.transformUtil.createContext(\n 'xml-to-json',\n '#cdata',\n child.nodeType,\n {\n path: `${currentPath}.#cdata`,\n parent: context\n }\n );\n\n // Apply transformations to CDATA value\n const transformedCData = this.transformUtil.applyTransforms(\n child.nodeValue || \"\",\n cdataContext\n );\n\n children.push({\n [cdataKey]: transformedCData,\n });\n }\n // Comments\n else if (\n child.nodeType === DOMAdapter.NodeType.COMMENT_NODE &&\n this.config.preserveComments\n ) {\n children.push({\n [commentsKey]: child.nodeValue || \"\",\n });\n }\n // Processing instructions\n else if (\n child.nodeType ===\n DOMAdapter.NodeType.PROCESSING_INSTRUCTION_NODE &&\n this.config.preserveProcessingInstr\n ) {\n children.push({\n [instructionKey]: {\n [targetKey]: child.nodeName,\n [valueKey]: child.nodeValue || \"\",\n },\n });\n }\n // Element nodes (recursive)\n else if (child.nodeType === DOMAdapter.NodeType.ELEMENT_NODE) {\n children.push(this.nodeToJson(child, context, currentPath));\n }\n }\n\n if (children.length > 0) {\n nodeObj[childrenKey] = children;\n }\n }\n\n // Apply compact option - remove empty properties if enabled\n if (this.config.outputOptions.compact) {\n Object.keys(nodeObj).forEach((key) => {\n const cleaned = this.cleanNode(nodeObj[key]);\n if (cleaned === undefined) {\n delete nodeObj[key];\n } else {\n nodeObj[key] = cleaned;\n }\n });\n }\n\n result[nodeName] = nodeObj;\n }\n\n return result;\n }\n\n private cleanNode(node: any): any {\n if (Array.isArray(node)) {\n // Clean each item in the array and filter out empty ones\n const cleanedArray = node\n .map((item) => this.cleanNode(item))\n .filter((item) => {\n return !(\n item === null ||\n item === undefined ||\n (typeof item === \"object\" && Object.keys(item).length === 0)\n );\n });\n return cleanedArray.length > 0 ? cleanedArray : undefined;\n } else if (typeof node === \"object\" && node !== null) {\n // Clean properties recursively\n Object.keys(node).forEach((key) => {\n const cleanedChild = this.cleanNode(node[key]);\n if (\n cleanedChild === null ||\n cleanedChild === undefined ||\n (Array.isArray(cleanedChild) && cleanedChild.length === 0) ||\n (typeof cleanedChild === \"object\" &&\n Object.keys(cleanedChild).length === 0)\n ) {\n delete node[key];\n } else {\n node[key] = cleanedChild;\n }\n });\n\n // Handle the special case for nodes with only empty children/attributes\n const childrenKey = this.config.propNames.children;\n const attrsKey = this.config.propNames.attributes;\n const keys = Object.keys(node);\n if (\n keys.every((key) => key === childrenKey || key === attrsKey) &&\n (node[childrenKey] === undefined ||\n this.jsonUtil.isEmpty(node[childrenKey])) &&\n (node[attrsKey] === undefined || this.jsonUtil.isEmpty(node[attrsKey]))\n ) {\n return undefined;\n }\n\n return Object.keys(node).length > 0 ? node : undefined;\n }\n\n return node;\n }\n}","/**\n * XMLUtil - Utility functions for XML processing\n */\nimport { XJXError } from \"../types/error-types\";\nimport { DOMAdapter } from \"../adapters/dom-adapter\";\nimport { Configuration } from \"../types/config-types\";\n\nexport class XmlUtil {\n private config: Configuration;\n\n /**\n * Constructor for XMLUtil\n * @param config Configuration options\n */\n constructor(config: Configuration) {\n this.config = config;\n }\n\n /**\n * Pretty print an XML string\n * @param xmlString XML string to format\n * @returns Formatted XML string\n */\n prettyPrintXml(xmlString: string): string {\n const indent = this.config.outputOptions.indent;\n const INDENT = \" \".repeat(indent);\n\n try {\n const doc = DOMAdapter.parseFromString(xmlString, \"text/xml\");\n\n const serializer = (node: Node, level = 0): string => {\n const pad = INDENT.repeat(level);\n\n switch (node.nodeType) {\n case DOMAdapter.NodeType.ELEMENT_NODE: {\n const el = node as Element;\n const tagName = el.tagName;\n const attrs = Array.from(el.attributes)\n .map((a) => `${a.name}=\"${a.value}\"`)\n .join(\" \");\n const openTag = attrs ? `<${tagName} ${attrs}>` : `<${tagName}>`;\n\n const children = Array.from(el.childNodes);\n\n if (children.length === 0) {\n return `${pad}${openTag.replace(/>$/, \" />\")}\\n`;\n }\n\n // Single text node: print inline\n if (\n children.length === 0 ||\n (children.length === 1 &&\n children[0].nodeType === DOMAdapter.NodeType.TEXT_NODE &&\n children[0].textContent?.trim() === \"\")\n ) {\n // Empty or whitespace-only\n return `${pad}<${tagName}${attrs ? \" \" + attrs : \"\"}>\\n`;\n }\n\n const inner = children\n .map((child) => serializer(child, level + 1))\n .join(\"\");\n return `${pad}${openTag}\\n${inner}${pad}\\n`;\n }\n\n case DOMAdapter.NodeType.TEXT_NODE: {\n const text = node.textContent?.trim();\n return text ? `${pad}${text}\\n` : \"\";\n }\n\n case DOMAdapter.NodeType.CDATA_SECTION_NODE:\n return `${pad}\\n`;\n\n case DOMAdapter.NodeType.COMMENT_NODE:\n return `${pad}\\n`;\n\n case DOMAdapter.NodeType.PROCESSING_INSTRUCTION_NODE:\n const pi = node as ProcessingInstruction;\n return `${pad}\\n`;\n\n case DOMAdapter.NodeType.DOCUMENT_NODE:\n return Array.from(node.childNodes)\n .map((child) => serializer(child, level))\n .join(\"\");\n\n default:\n return \"\";\n }\n };\n\n return serializer(doc).trim();\n } catch (error) {\n throw new XJXError(\n `Failed to pretty print XML: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n /**\n * Check if XML string is well-formed\n * @param xmlString XML string to validate\n * @returns Object with validation result and any error messages\n */\n validateXML(xmlString: string): {\n isValid: boolean;\n message?: string;\n } {\n try {\n const doc = DOMAdapter.parseFromString(xmlString, \"text/xml\");\n const errors = doc.getElementsByTagName(\"parsererror\");\n if (errors.length > 0) {\n return {\n isValid: false,\n message: errors[0].textContent || \"Unknown parsing error\",\n };\n }\n return { isValid: true };\n } catch (error) {\n return {\n isValid: false,\n message: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Add XML declaration to a string if missing\n * @param xmlString XML string\n * @returns XML string with declaration\n */\n ensureXMLDeclaration(xmlString: string): string {\n if (!xmlString.trim().startsWith(\"\\n' + xmlString;\n }\n return xmlString;\n }\n\n /**\n * Escapes special characters in text for safe XML usage.\n * @param text Text to escape.\n * @returns Escaped XML string.\n */\n escapeXML(text: string): string {\n if (typeof text !== \"string\" || text.length === 0) {\n return \"\";\n }\n\n return text.replace(/[&<>\"']/g, (char) => {\n switch (char) {\n case \"&\":\n return \"&\";\n case \"<\":\n return \"<\";\n case \">\":\n return \">\";\n case '\"':\n return \""\";\n case \"'\":\n return \"'\";\n default:\n return char;\n }\n });\n }\n\n /**\n * Unescapes XML entities back to their character equivalents.\n * @param text Text with XML entities.\n * @returns Unescaped text.\n */\n unescapeXML(text: string): string {\n if (typeof text !== \"string\" || text.length === 0) {\n return \"\";\n }\n\n return text.replace(/&(amp|lt|gt|quot|apos);/g, (match, entity) => {\n switch (entity) {\n case \"amp\":\n return \"&\";\n case \"lt\":\n return \"<\";\n case \"gt\":\n return \">\";\n case \"quot\":\n return '\"';\n case \"apos\":\n return \"'\";\n default:\n return match;\n }\n });\n }\n\n /**\n * Extract the namespace prefix from a qualified name\n * @param qualifiedName Qualified name (e.g., \"ns:element\")\n * @returns Prefix or null if no prefix\n */\n extractPrefix(qualifiedName: string): string | null {\n const colonIndex = qualifiedName.indexOf(\":\");\n return colonIndex > 0 ? qualifiedName.substring(0, colonIndex) : null;\n }\n\n /**\n * Extract the local name from a qualified name\n * @param qualifiedName Qualified name (e.g., \"ns:element\")\n * @returns Local name\n */\n extractLocalName(qualifiedName: string): string {\n const colonIndex = qualifiedName.indexOf(\":\");\n return colonIndex > 0\n ? qualifiedName.substring(colonIndex + 1)\n : qualifiedName;\n }\n\n /**\n * Create a qualified name from prefix and local name\n * @param prefix Namespace prefix (can be null)\n * @param localName Local name\n * @returns Qualified name\n */\n createQualifiedName(prefix: string | null, localName: string): string {\n return prefix ? `${prefix}:${localName}` : localName;\n }\n}","/**\n * JsonToXmlConverter class for converting JSON to XML with consistent namespace handling\n */\nimport { Configuration } from \"../types/config-types\";\nimport { XJXError } from \"../types/error-types\";\nimport { DOMAdapter } from \"../adapters/dom-adapter\";\nimport { XmlUtil } from \"../utils/xml-utils\";\nimport { TransformUtil } from \"../transformers/TransformUtil\";\nimport { TransformContext } from \"../transformers/ValueTransformer\";\n\n/**\n * JsonToXmlConverter for converting JSON to XML\n */\nexport class JsonToXmlConverter {\n private config: Configuration;\n private xmlUtil: XmlUtil;\n private transformUtil: TransformUtil;\n\n /**\n * Constructor for JsonToXmlConverter\n * @param config Configuration options\n */\n constructor(config: Configuration) {\n this.config = config;\n this.xmlUtil = new XmlUtil(this.config);\n this.transformUtil = new TransformUtil(this.config);\n }\n\n /**\n * Convert JSON object to XML string\n * @param jsonObj JSON object to convert\n * @returns XML string\n */\n public convert(jsonObj: Record): string {\n try {\n const doc = DOMAdapter.createDocument();\n const rootElement = this.jsonToNode(jsonObj, doc);\n\n if (rootElement) {\n // Handle the temporary root element if it exists\n if (doc.documentElement && doc.documentElement.nodeName === \"temp\") {\n doc.replaceChild(rootElement, doc.documentElement);\n } else {\n doc.appendChild(rootElement);\n }\n }\n\n // Add XML declaration if specified\n let xmlString = DOMAdapter.serializeToString(doc);\n\n // remove xhtml decl inserted by dom\n xmlString = xmlString.replace(' xmlns=\"http://www.w3.org/1999/xhtml\"', '');\n\n if (this.config.outputOptions.xml.declaration) {\n xmlString = this.xmlUtil.ensureXMLDeclaration(xmlString);\n }\n\n // Apply pretty printing if enabled\n if (this.config.outputOptions.prettyPrint) {\n xmlString = this.xmlUtil.prettyPrintXml(xmlString);\n }\n\n return xmlString;\n } catch (error) {\n throw new XJXError(\n `Failed to convert JSON to XML: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n /**\n * Convert JSON object to DOM node\n * @param jsonObj JSON object to convert\n * @param doc Document for creating elements\n * @param parentContext Optional parent context for transformation chain\n * @param path Current path in the JSON object\n * @returns DOM Element\n */\n private jsonToNode(\n jsonObj: Record,\n doc: Document,\n parentContext?: TransformContext,\n path: string = \"\"\n ): Element | null {\n if (!jsonObj || typeof jsonObj !== \"object\") {\n return null;\n }\n\n // Get the node name (first key in the object)\n const nodeName = Object.keys(jsonObj)[0];\n if (!nodeName) {\n return null;\n }\n\n const nodeData = jsonObj[nodeName];\n \n // Update the current path\n const currentPath = path ? `${path}.${nodeName}` : nodeName;\n\n // Create element with namespace if available\n let element: Element;\n const namespaceKey = this.config.propNames.namespace;\n const prefixKey = this.config.propNames.prefix;\n const ns = nodeData[namespaceKey];\n const prefix = nodeData[prefixKey];\n\n // Create context for this node\n const context = this.transformUtil.createContext(\n 'json-to-xml',\n nodeName,\n DOMAdapter.NodeType.ELEMENT_NODE,\n {\n path: currentPath,\n namespace: ns,\n prefix: prefix,\n parent: parentContext\n }\n );\n\n if (ns && this.config.preserveNamespaces) {\n if (prefix) {\n // Create element with namespace and prefix\n element = DOMAdapter.createElementNS(ns, `${prefix}:${nodeName}`);\n } else {\n // Create element with namespace but no prefix\n element = DOMAdapter.createElementNS(ns, nodeName);\n }\n } else {\n // Create element without namespace\n element = DOMAdapter.createElement(nodeName);\n }\n\n // Process attributes if enabled\n const attributesKey = this.config.propNames.attributes;\n const valueKey = this.config.propNames.value;\n if (\n this.config.preserveAttributes &&\n nodeData[attributesKey] &&\n Array.isArray(nodeData[attributesKey])\n ) {\n nodeData[attributesKey].forEach(\n (attrObj: Record) => {\n const attrName = Object.keys(attrObj)[0];\n if (!attrName) return;\n\n const attrData = attrObj[attrName];\n \n // Create attribute context\n const attrContext = this.transformUtil.createContext(\n 'json-to-xml',\n nodeName,\n DOMAdapter.NodeType.ELEMENT_NODE,\n {\n path: `${currentPath}.${attrName}`,\n namespace: attrData[namespaceKey],\n prefix: attrData[prefixKey],\n isAttribute: true,\n attributeName: attrName,\n parent: context\n }\n );\n \n // Apply transformations to attribute value\n const transformedValue = this.transformUtil.applyTransforms(\n attrData[valueKey] || \"\",\n attrContext\n );\n \n const attrNs = attrData[namespaceKey];\n const attrPrefix = attrData[prefixKey];\n\n // Form qualified name for attribute if it has a prefix\n let qualifiedName = attrName;\n if (attrPrefix && this.config.preserveNamespaces) {\n qualifiedName = `${attrPrefix}:${attrName}`;\n }\n\n DOMAdapter.setNamespacedAttribute(\n element, \n (attrNs && this.config.preserveNamespaces) ? attrNs : null, \n qualifiedName, \n transformedValue\n );\n }\n );\n }\n\n // Process simple text value\n if (nodeData[valueKey] !== undefined) {\n // Apply transformations to text value\n const textContext = this.transformUtil.createContext(\n 'json-to-xml',\n nodeName,\n DOMAdapter.NodeType.TEXT_NODE,\n {\n path: `${currentPath}.#text`,\n namespace: ns,\n prefix: prefix,\n parent: context\n }\n );\n \n const transformedValue = this.transformUtil.applyTransforms(\n nodeData[valueKey],\n textContext\n );\n \n element.textContent = transformedValue;\n }\n\n // Process children\n const childrenKey = this.config.propNames.children;\n const cdataKey = this.config.propNames.cdata;\n const commentsKey = this.config.propNames.comments;\n const instructionKey = this.config.propNames.instruction;\n const targetKey = this.config.propNames.target;\n\n if (\n nodeData[childrenKey] &&\n Array.isArray(nodeData[childrenKey])\n ) {\n nodeData[childrenKey].forEach(\n (child: Record) => {\n // Text nodes\n if (\n child[valueKey] !== undefined &&\n this.config.preserveTextNodes\n ) {\n // Apply transformations to text node\n const textContext = this.transformUtil.createContext(\n 'json-to-xml',\n '#text',\n DOMAdapter.NodeType.TEXT_NODE,\n {\n path: `${currentPath}.#text`,\n parent: context\n }\n );\n \n const transformedText = this.transformUtil.applyTransforms(\n child[valueKey],\n textContext\n );\n \n element.appendChild(\n DOMAdapter.createTextNode(this.xmlUtil.escapeXML(transformedText))\n );\n }\n // CDATA sections\n else if (\n child[cdataKey] !== undefined &&\n this.config.preserveCDATA\n ) {\n // Apply transformations to CDATA\n const cdataContext = this.transformUtil.createContext(\n 'json-to-xml',\n '#cdata',\n DOMAdapter.NodeType.CDATA_SECTION_NODE,\n {\n path: `${currentPath}.#cdata`,\n parent: context\n }\n );\n \n const transformedCData = this.transformUtil.applyTransforms(\n child[cdataKey],\n cdataContext\n );\n \n element.appendChild(\n DOMAdapter.createCDATASection(\n transformedCData\n )\n );\n }\n // Comments\n else if (\n child[commentsKey] !== undefined &&\n this.config.preserveComments\n ) {\n element.appendChild(\n DOMAdapter.createComment(\n child[commentsKey]\n )\n );\n }\n // Processing instructions\n else if (\n child[instructionKey] !== undefined &&\n this.config.preserveProcessingInstr\n ) {\n const piData = child[instructionKey];\n const target = piData[targetKey];\n const data = piData[valueKey] || \"\";\n\n if (target) {\n element.appendChild(\n DOMAdapter.createProcessingInstruction(target, data)\n );\n }\n }\n // Element nodes (recursive)\n else {\n const childElement = this.jsonToNode(child, doc, context, currentPath);\n if (childElement) {\n element.appendChild(childElement);\n }\n }\n }\n );\n }\n\n return element;\n }\n}","/**\n * Default configuration for the XJX library\n */\nimport { Configuration } from '../types/config-types';\n\n/**\n * Default configuration\n */\nexport const DEFAULT_CONFIG: Configuration = {\n preserveNamespaces: true,\n preserveComments: true,\n preserveProcessingInstr: true,\n preserveCDATA: true,\n preserveTextNodes: true,\n preserveWhitespace: false,\n preserveAttributes: true,\n\n outputOptions: {\n prettyPrint: true,\n indent: 2,\n compact: true,\n json: {},\n xml: {\n declaration: true,\n },\n },\n\n propNames: {\n namespace: \"$ns\",\n prefix: \"$pre\",\n attributes: \"$attr\",\n value: \"$val\",\n cdata: \"$cdata\",\n comments: \"$cmnt\",\n instruction: \"$pi\", \n target: \"$trgt\", \n children: \"$children\",\n },\n};","/**\n * XJX - Facade class for XML-JSON conversion operations\n */\nimport { XmlToJsonConverter } from \"./core/converters/xml-to-json-converter\";\nimport { JsonToXmlConverter } from \"./core/converters/json-to-xml-converter\";\nimport { Configuration } from \"./core/types/config-types\";\nimport { DEFAULT_CONFIG } from \"./core/config/config\";\nimport { DOMAdapter } from \"./core/adapters/dom-adapter\";\nimport { XmlUtil } from \"./core/utils/xml-utils\";\nimport { JsonUtil } from \"./core/utils/json-utils\";\nimport { ValueTransformer } from \"./core/transformers\";\n\nexport class XJX {\n private config: Configuration;\n private xmlToJsonConverter: XmlToJsonConverter;\n private jsonToXmlConverter: JsonToXmlConverter;\n private jsonUtil: JsonUtil;\n private xmlUtil: XmlUtil;\n\n /**\n * Constructor for XJX utility\n * @param config Configuration options\n */\n constructor(config: Partial = {}) {\n // First create a jsonUtil instance with default config to use its methods\n this.jsonUtil = new JsonUtil(DEFAULT_CONFIG);\n\n // Create a deep clone of the default config\n const defaultClone = this.jsonUtil.deepClone(DEFAULT_CONFIG);\n\n // Deep merge with the provided config\n this.config = this.jsonUtil.deepMerge(defaultClone, config);\n\n // Re-initialize jsonUtil with the merged config\n this.jsonUtil = new JsonUtil(this.config);\n\n // Initialize other components\n this.xmlUtil = new XmlUtil(this.config);\n this.xmlToJsonConverter = new XmlToJsonConverter(this.config);\n this.jsonToXmlConverter = new JsonToXmlConverter(this.config);\n }\n\n /**\n * Convert XML string to JSON\n * @param xmlString XML content as string\n * @returns JSON object representing the XML content\n */\n public xmlToJson(xmlString: string): Record {\n return this.xmlToJsonConverter.convert(xmlString);\n }\n\n /**\n * Convert JSON object back to XML string\n * @param jsonObj JSON object to convert\n * @returns XML string\n */\n public jsonToXml(jsonObj: Record): string {\n return this.jsonToXmlConverter.convert(jsonObj);\n }\n\n /**\n * Pretty print an XML string\n * @param xmlString XML string to format\n * @returns Formatted XML string\n */\n public prettyPrintXml(xmlString: string): string {\n return this.xmlUtil.prettyPrintXml(xmlString);\n }\n\n /**\n * Safely retrieves a value from a JSON object using a dot-separated path.\n * @param obj The input JSON object\n * @param path The dot-separated path string (e.g., \"root.item.description.$val\")\n * @param fallback Value to return if the path does not resolve\n * @returns The value at the specified path or the fallback value\n */\n public getPath(\n obj: Record,\n path: string,\n fallback: any = undefined\n ): any {\n return this.jsonUtil.getPath(obj, path, fallback);\n }\n\n /**\n * Validate XML string\n * @param xmlString XML string to validate\n * @returns Validation result\n */\n public validateXML(xmlString: string): {\n isValid: boolean;\n message?: string;\n } {\n return this.xmlUtil.validateXML(xmlString);\n }\n\n /**\n * Generate a JSON schema based on the current configuration\n * @returns JSON schema object for validating XML-JSON documents\n */\n public generateJsonSchema(): Record {\n return this.jsonUtil.generateJsonSchema();\n }\n\n /**\n * Convert a standard JSON object to the XML-like JSON structure\n * @param obj Standard JSON object\n * @param root Optional root element configuration (string or object with properties)\n * @returns XML-like JSON object ready for conversion to XML\n */\n public objectToXJX(obj: any, root?: string | Record): Record {\n return this.jsonUtil.objectToXJX(obj, root);\n }\n\n /**\n * Generate an example JSON object that matches the current configuration\n * @param rootName Name of the root element\n * @returns Example JSON object\n */\n public generateJsonExample(rootName: string = \"root\"): Record {\n return this.jsonUtil.generateExample(rootName);\n }\n\n /**\n * Add a value transformer to the configuration\n * @param transformer Value transformer to add\n * @returns This XJX instance for chaining\n */\n public addTransformer(transformer: ValueTransformer): XJX {\n if (!this.config.valueTransforms) {\n this.config.valueTransforms = [];\n }\n this.config.valueTransforms.push(transformer);\n return this;\n }\n\n /**\n * Removes all value transformers from the configuration\n * @returns This XJX instance for chaining\n */\n public clearTransformers(): XJX {\n this.config.valueTransforms = [];\n return this;\n }\n\n /**\n * Clean up any resources\n */\n public cleanup(): void {\n DOMAdapter.cleanup();\n }\n}","/**\n * Value transformation types and base class for the XJX library\n */\nimport { Configuration } from '../types/config-types';\n\n/**\n * Direction of the transformation\n */\nexport type TransformDirection = 'xml-to-json' | 'json-to-xml';\n\n/**\n * Context provided to value transformers\n */\nexport interface TransformContext {\n // Core transformation info\n direction: TransformDirection; // Direction of the current transformation\n \n // Node information\n nodeName: string; // Name of the current node\n nodeType: number; // DOM node type (element, text, etc.)\n namespace?: string; // Namespace URI if available\n prefix?: string; // Namespace prefix if available\n \n // Structure information\n path: string; // Dot-notation path to current node\n isAttribute: boolean; // Whether the current value is from an attribute\n attributeName?: string; // Name of attribute if isAttribute is true\n \n // Parent context (creates a chain)\n parent?: TransformContext; // Reference to parent context for traversal\n \n // Configuration reference\n config: Configuration; // Reference to the current configuration\n}\n\n/**\n * Abstract base class for value transformers\n */\nexport abstract class ValueTransformer {\n /**\n * Process a value, transforming it if applicable\n * @param value Value to potentially transform\n * @param context Context including direction and other information\n * @returns Transformed value or original if not applicable\n */\n process(value: any, context: TransformContext): any {\n if (context.direction === 'xml-to-json') {\n return this.xmlToJson(value, context);\n } else {\n return this.jsonToXml(value, context);\n }\n }\n\n /**\n * Transform a value from XML to JSON representation\n * @param value Value from XML\n * @param context Transformation context\n * @returns Transformed value for JSON\n */\n protected xmlToJson(value: any, context: TransformContext): any {\n // Default implementation returns original value\n return value;\n }\n\n /**\n * Transform a value from JSON to XML representation\n * @param value Value from JSON\n * @param context Transformation context\n * @returns Transformed value for XML\n */\n protected jsonToXml(value: any, context: TransformContext): any {\n // Default implementation returns original value\n return value;\n }\n}","// Import locally so you can use it below\nimport { XJX } from './XJX';\n\n// Core components\nexport { XJX };\nexport { Configuration } from './core/types/config-types';\nexport { DEFAULT_CONFIG } from './core/config/config';\n\n// Error handling\nexport { XJXError } from './core/types/error-types';\n\n// Allow custom transformers\nexport { ValueTransformer } from './core/transformers/ValueTransformer';\n\n// Default export\nexport default XJX;"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/stats.html b/dist/stats.html new file mode 100644 index 0000000..7568124 --- /dev/null +++ b/dist/stats.html @@ -0,0 +1,4949 @@ + + + + + + + + XJX Bundle Visualizer + + + +
+ + + + + diff --git a/dist/xjx.min.js b/dist/xjx.min.js new file mode 100644 index 0000000..8d72605 --- /dev/null +++ b/dist/xjx.min.js @@ -0,0 +1,2 @@ +var XJX=function(e){"use strict";class t extends Error{constructor(e){super(e),this.name="XMLToJSONError"}}var r;!function(e){e[e.ELEMENT_NODE=1]="ELEMENT_NODE",e[e.ATTRIBUTE_NODE=2]="ATTRIBUTE_NODE",e[e.TEXT_NODE=3]="TEXT_NODE",e[e.CDATA_SECTION_NODE=4]="CDATA_SECTION_NODE",e[e.PROCESSING_INSTRUCTION_NODE=7]="PROCESSING_INSTRUCTION_NODE",e[e.COMMENT_NODE=8]="COMMENT_NODE",e[e.DOCUMENT_NODE=9]="DOCUMENT_NODE"}(r||(r={}));const n=(()=>{let e,n,i,o=null;try{if("undefined"==typeof window)try{const{JSDOM:t}=require("jsdom");o=new t("",{contentType:"text/xml"}),e=o.window.DOMParser,n=o.window.XMLSerializer,i=o.window.document.implementation}catch(r){try{const{DOMParser:t,XMLSerializer:r,DOMImplementation:o}=require("@xmldom/xmldom");e=t,n=r;const s=new o;i=s}catch(e){throw new t("Node.js environment detected but neither 'jsdom' nor '@xmldom/xmldom' are available.")}}else{if(!window.DOMParser)throw new t("DOMParser is not available in this environment");if(!window.XMLSerializer)throw new t("XMLSerializer is not available in this environment");e=window.DOMParser,n=window.XMLSerializer,i=document.implementation}}catch(e){throw new t(`DOM environment initialization failed: ${e instanceof Error?e.message:String(e)}`)}return{createParser:()=>{try{return new e}catch(e){throw new t(`Failed to create DOM parser: ${e instanceof Error?e.message:String(e)}`)}},createSerializer:()=>{try{return new n}catch(e){throw new t(`Failed to create XML serializer: ${e instanceof Error?e.message:String(e)}`)}},NodeType:r,parseFromString:(r,n="text/xml")=>{try{return(new e).parseFromString(r,n)}catch(e){throw new t(`Failed to parse XML: ${e instanceof Error?e.message:String(e)}`)}},serializeToString:e=>{try{return(new n).serializeToString(e)}catch(e){throw new t(`Failed to serialize XML: ${e instanceof Error?e.message:String(e)}`)}},createDocument:()=>{try{if("undefined"!=typeof window){return(new e).parseFromString("","text/xml")}return i.createDocument(null,null,null)}catch(e){throw new t(`Failed to create document: ${e instanceof Error?e.message:String(e)}`)}},createElement:e=>{try{if("undefined"!=typeof window)return document.createElement(e);return i.createDocument(null,null,null).createElement(e)}catch(e){throw new t(`Failed to create element: ${e instanceof Error?e.message:String(e)}`)}},createElementNS:(e,r)=>{try{if("undefined"!=typeof window)return document.createElementNS(e,r);return i.createDocument(null,null,null).createElementNS(e,r)}catch(e){throw new t(`Failed to create element with namespace: ${e instanceof Error?e.message:String(e)}`)}},createTextNode:e=>{try{if("undefined"!=typeof window)return document.createTextNode(e);return i.createDocument(null,null,null).createTextNode(e)}catch(e){throw new t(`Failed to create text node: ${e instanceof Error?e.message:String(e)}`)}},createCDATASection:e=>{try{if("undefined"!=typeof window){return document.implementation.createDocument(null,null,null).createCDATASection(e)}return i.createDocument(null,null,null).createCDATASection(e)}catch(e){throw new t(`Failed to create CDATA section: ${e instanceof Error?e.message:String(e)}`)}},createComment:e=>{try{if("undefined"!=typeof window)return document.createComment(e);return i.createDocument(null,null,null).createComment(e)}catch(e){throw new t(`Failed to create comment: ${e instanceof Error?e.message:String(e)}`)}},createProcessingInstruction:(e,r)=>{try{if("undefined"!=typeof window){return document.implementation.createDocument(null,null,null).createProcessingInstruction(e,r)}return i.createDocument(null,null,null).createProcessingInstruction(e,r)}catch(e){throw new t(`Failed to create processing instruction: ${e instanceof Error?e.message:String(e)}`)}},setNamespacedAttribute:(e,r,n,i)=>{try{r?e.setAttributeNS(r,n,i):e.setAttribute(n,i)}catch(e){throw new t(`Failed to set attribute: ${e instanceof Error?e.message:String(e)}`)}},isNode:e=>{try{return e&&"object"==typeof e&&"number"==typeof e.nodeType}catch(e){return!1}},getNodeTypeName:e=>{switch(e){case r.ELEMENT_NODE:return"ELEMENT_NODE";case r.TEXT_NODE:return"TEXT_NODE";case r.CDATA_SECTION_NODE:return"CDATA_SECTION_NODE";case r.COMMENT_NODE:return"COMMENT_NODE";case r.PROCESSING_INSTRUCTION_NODE:return"PROCESSING_INSTRUCTION_NODE";default:return`UNKNOWN_NODE_TYPE(${e})`}},getNodeAttributes:e=>{const t={};for(let r=0;r{o&&"function"==typeof o.window.close&&o.window.close()}}})();class i{constructor(e){this.config=e}getPath(e,t,r){const n=t.split(".");let i=e;for(const e of n){if(Array.isArray(i)){const t=i.map((t=>this.resolveSegment(t,e))).flat().filter((e=>void 0!==e));i=t.length>0?t:void 0}else i=this.resolveSegment(i,e);if(void 0===i)return r}return Array.isArray(i)&&1===i.length?i[0]:void 0!==i?i:r}resolveSegment(e,t){if(null==e||"object"!=typeof e)return;if(t in e)return e[t];if(t===this.config.propNames.value||t===this.config.propNames.children||t===this.config.propNames.attributes||t===this.config.propNames.namespace||t===this.config.propNames.prefix||t===this.config.propNames.cdata||t===this.config.propNames.comments||t===this.config.propNames.instruction||t===this.config.propNames.target){const r=Object.entries(this.config.propNames).find((([e,r])=>r===t))?.[0];if(r&&void 0!==e[t])return e[t]}const r=e[this.config.propNames.children];if(Array.isArray(r)){const e=r.map((e=>t in e?e[t]:void 0)).filter((e=>void 0!==e));return e.length>0?e:void 0}}objectToXJX(e,t){const r=this.wrapObject(e);if("string"==typeof t)return{[t]:r};if(t&&"object"==typeof t){const e=t.name||"root",n=t[this.config.propNames.prefix]||"",i=n?`${n}:${e}`:e,o={[i]:{}},s=this.config.propNames.attributes;t[s]&&Array.isArray(t[s])&&(o[i][s]=t[s]);const a=this.config.propNames.children,c=t[a]?t[a]:[];o[i][a]=[...c,{[e]:r}];const p=this.config.propNames.namespace;return t[p]&&(o[i][p]=t[p]),n&&t[p]&&(o[i][`xmlns:${n}`]=t[p]),o}return r}wrapObject(e){const t=this.config.propNames.value,r=this.config.propNames.children;if(null===e||"string"==typeof e||"number"==typeof e||"boolean"==typeof e)return{[t]:e};if(Array.isArray(e))return{[r]:e.map((e=>this.wrapObject(e)))};if("object"==typeof e){const t=Object.entries(e).map((([e,t])=>({[e]:this.wrapObject(t)})));return{[r]:t}}}isEmpty(e){return null==e||(Array.isArray(e)?0===e.length:"object"==typeof e&&0===Object.keys(e).length)}safeStringify(e,t=2){try{return JSON.stringify(e,null,t)}catch(e){return"[Cannot stringify object]"}}deepClone(e){try{return JSON.parse(JSON.stringify(e))}catch(e){throw new Error(`Failed to deep clone object: ${e instanceof Error?e.message:String(e)}`)}}deepMerge(e,t){return t&&"object"==typeof t&&null!==t?e&&"object"==typeof e&&null!==e?(Object.keys(t).forEach((r=>{const n=t[r],i=e[r];null===n||null===i||"object"!=typeof n||"object"!=typeof i||Array.isArray(n)||Array.isArray(i)?e[r]=n:e[r]=this.deepMerge(i,n)})),e):t:e}generateJsonSchema(){try{const e=this.config.propNames,t=this.config.outputOptions.compact||!1,r=this.config.preserveNamespaces,n=this.config.preserveComments,i=this.config.preserveCDATA,o=this.config.preserveProcessingInstr,s=this.config.preserveTextNodes,a=(this.config.preserveWhitespace,this.config.preserveAttributes),c=[];t||(a&&c.push(e.attributes),i&&c.push(e.cdata),n&&c.push(e.comments),o&&c.push(e.instruction),c.push(e.children),s&&(c.push(e.value),r&&c.push(e.namespace)));const p={};if(r&&(p[e.namespace]={description:"Namespace URI of the element",type:"string"},p[e.prefix]={description:"Namespace prefix of the element",type:"string"}),s&&(p[e.value]={description:"Text content of the element",type:"string"}),a&&(p[e.attributes]={description:"Element attributes",type:"array",items:{type:"object",patternProperties:{"^.*$":{type:"object",properties:{[e.value]:{description:"Attribute value",type:"string"}},required:[e.value]}},additionalProperties:!1}},r)){const t=p[e.attributes].items.patternProperties["^.*$"].properties;t[e.namespace]={description:"Namespace URI of the attribute",type:"string"},t[e.prefix]={description:"Namespace prefix of the attribute",type:"string"}}i&&(p[e.cdata]={description:"CDATA section content",type:"string"}),n&&(p[e.comments]={description:"Comment content",type:"string"}),o&&(p[e.instruction]={description:"Processing instruction",type:"object",properties:{[e.target]:{description:"Processing instruction target",type:"string"},[e.value]:{description:"Processing instruction content",type:"string"}},required:[e.target]}),p[e.children]={description:"Child elements",type:"array",items:{type:"object",patternProperties:{"^.*$":{$ref:"#/definitions/element"}},additionalProperties:!1}};return{$schema:"https://json-schema.org/draft/2020-12/schema",title:"XJX JSON Schema",description:"Schema for JSON representation of XML documents using the XJX library",type:"object",patternProperties:{"^.*$":{$ref:"#/definitions/element"}},additionalProperties:!1,definitions:{element:{type:"object",properties:p,required:c,additionalProperties:!1}}}}catch(e){throw new Error(`Schema generation failed: ${e instanceof Error?e.message:String(e)}`)}}generateExample(e="root"){const t=this.config.propNames,r=this.config.preserveNamespaces,n=this.config.preserveComments,i=this.config.preserveCDATA,o=this.config.preserveProcessingInstr,s=this.config.preserveAttributes,a={[e]:{[t.value]:"Root content",[t.children]:[{child:{[t.value]:"Child content"}}]}};return r&&(a[e][t.namespace]="http://example.org/ns",a[e][t.prefix]="ex",a[e][t.children][0].child[t.namespace]="http://example.org/ns",a[e][t.children][0].child[t.prefix]="ex"),s&&(a[e][t.attributes]=[{id:{[t.value]:"root-1"}},{lang:{[t.value]:"en"}}],r&&(a[e][t.attributes][1].lang[t.prefix]="xml"),a[e][t.children][0].child[t.attributes]=[{id:{[t.value]:"child-1"}}]),i&&(a[e][t.children][0].child[t.children]=[{[t.cdata]:"Raw content"}]),n&&(a[e][t.children][0].child[t.children]||(a[e][t.children][0].child[t.children]=[]),a[e][t.children][0].child[t.children].push({[t.comments]:"Comment about the child"})),o&&(a[e][t.children]||(a[e][t.children]=[]),a[e][t.children].unshift({[t.instruction]:{[t.target]:"xml-stylesheet",[t.value]:'type="text/css" href="style.css"'}})),a}}class o{constructor(e){this.config=e}applyTransforms(e,t){if(!this.config.valueTransforms||0===this.config.valueTransforms.length)return e;let r=e;for(const e of this.config.valueTransforms)r=e.process(r,t);return r}createContext(e,t,r,n={}){return{direction:e,nodeName:t,nodeType:r,path:n.path||t,namespace:n.namespace,prefix:n.prefix,isAttribute:n.isAttribute||!1,attributeName:n.attributeName,parent:n.parent,config:this.config}}getNodeTypeName(e){return n.getNodeTypeName(e)}}class s{constructor(e){this.config=e,this.jsonUtil=new i(this.config),this.transformUtil=new o(this.config)}convert(e){try{const r=n.parseFromString(e,"text/xml"),i=r.getElementsByTagName("parsererror");if(i.length>0)throw new t(`XML parsing error: ${i[0].textContent}`);return this.nodeToJson(r.documentElement)}catch(e){throw new t(`Failed to convert XML to JSON: ${e instanceof Error?e.message:String(e)}`)}}nodeToJson(e,t,r=""){const i={};if(e.nodeType===n.NodeType.ELEMENT_NODE){const o=e,s=o.localName||o.nodeName.split(":").pop()||o.nodeName,a=r?`${r}.${s}`:s,c={},p=this.transformUtil.createContext("xml-to-json",s,e.nodeType,{path:a,namespace:o.namespaceURI||void 0,prefix:o.prefix||void 0,parent:t});if(this.config.preserveNamespaces){const e=o.namespaceURI;e&&(c[this.config.propNames.namespace]=e);const t=o.prefix;t&&(c[this.config.propNames.prefix]=t)}if(this.config.preserveAttributes&&o.attributes.length>0){const t=[];for(let r=0;r0&&(c[this.config.propNames.attributes]=t)}if(o.childNodes.length>0){const e=[],t=this.config.propNames.children,r=this.config.propNames.value,i=this.config.propNames.cdata,s=this.config.propNames.comments,l=this.config.propNames.instruction,m=this.config.propNames.target;for(let t=0;t0&&(c[t]=e)}this.config.outputOptions.compact&&Object.keys(c).forEach((e=>{const t=this.cleanNode(c[e]);void 0===t?delete c[e]:c[e]=t})),i[s]=c}return i}cleanNode(e){if(Array.isArray(e)){const t=e.map((e=>this.cleanNode(e))).filter((e=>!(null==e||"object"==typeof e&&0===Object.keys(e).length)));return t.length>0?t:void 0}if("object"==typeof e&&null!==e){Object.keys(e).forEach((t=>{const r=this.cleanNode(e[t]);null==r||Array.isArray(r)&&0===r.length||"object"==typeof r&&0===Object.keys(r).length?delete e[t]:e[t]=r}));const t=this.config.propNames.children,r=this.config.propNames.attributes;if(Object.keys(e).every((e=>e===t||e===r))&&(void 0===e[t]||this.jsonUtil.isEmpty(e[t]))&&(void 0===e[r]||this.jsonUtil.isEmpty(e[r])))return;return Object.keys(e).length>0?e:void 0}return e}}class a{constructor(e){this.config=e}prettyPrintXml(e){const r=this.config.outputOptions.indent,i=" ".repeat(r);try{const t=n.parseFromString(e,"text/xml"),r=(e,t=0)=>{const o=i.repeat(t);switch(e.nodeType){case n.NodeType.ELEMENT_NODE:{const i=e,s=i.tagName,a=Array.from(i.attributes).map((e=>`${e.name}="${e.value}"`)).join(" "),c=a?`<${s} ${a}>`:`<${s}>`,p=Array.from(i.childNodes);if(0===p.length)return`${o}${c.replace(/>$/," />")}\n`;if(0===p.length||1===p.length&&p[0].nodeType===n.NodeType.TEXT_NODE&&""===p[0].textContent?.trim())return`${o}<${s}${a?" "+a:""}>\n`;return`${o}${c}\n${p.map((e=>r(e,t+1))).join("")}${o}\n`}case n.NodeType.TEXT_NODE:{const t=e.textContent?.trim();return t?`${o}${t}\n`:""}case n.NodeType.CDATA_SECTION_NODE:return`${o}\n`;case n.NodeType.COMMENT_NODE:return`${o}\x3c!--${e.nodeValue}--\x3e\n`;case n.NodeType.PROCESSING_INSTRUCTION_NODE:const i=e;return`${o}\n`;case n.NodeType.DOCUMENT_NODE:return Array.from(e.childNodes).map((e=>r(e,t))).join("");default:return""}};return r(t).trim()}catch(e){throw new t(`Failed to pretty print XML: ${e instanceof Error?e.message:String(e)}`)}}validateXML(e){try{const t=n.parseFromString(e,"text/xml").getElementsByTagName("parsererror");return t.length>0?{isValid:!1,message:t[0].textContent||"Unknown parsing error"}:{isValid:!0}}catch(e){return{isValid:!1,message:e instanceof Error?e.message:String(e)}}}ensureXMLDeclaration(e){return e.trim().startsWith("\n'+e}escapeXML(e){return"string"!=typeof e||0===e.length?"":e.replace(/[&<>"']/g,(e=>{switch(e){case"&":return"&";case"<":return"<";case">":return">";case'"':return""";case"'":return"'";default:return e}}))}unescapeXML(e){return"string"!=typeof e||0===e.length?"":e.replace(/&(amp|lt|gt|quot|apos);/g,((e,t)=>{switch(t){case"amp":return"&";case"lt":return"<";case"gt":return">";case"quot":return'"';case"apos":return"'";default:return e}}))}extractPrefix(e){const t=e.indexOf(":");return t>0?e.substring(0,t):null}extractLocalName(e){const t=e.indexOf(":");return t>0?e.substring(t+1):e}createQualifiedName(e,t){return e?`${e}:${t}`:t}}class c{constructor(e){this.config=e,this.xmlUtil=new a(this.config),this.transformUtil=new o(this.config)}convert(e){try{const t=n.createDocument(),r=this.jsonToNode(e,t);r&&(t.documentElement&&"temp"===t.documentElement.nodeName?t.replaceChild(r,t.documentElement):t.appendChild(r));let i=n.serializeToString(t);return i=i.replace(' xmlns="http://www.w3.org/1999/xhtml"',""),this.config.outputOptions.xml.declaration&&(i=this.xmlUtil.ensureXMLDeclaration(i)),this.config.outputOptions.prettyPrint&&(i=this.xmlUtil.prettyPrintXml(i)),i}catch(e){throw new t(`Failed to convert JSON to XML: ${e instanceof Error?e.message:String(e)}`)}}jsonToNode(e,t,r,i=""){if(!e||"object"!=typeof e)return null;const o=Object.keys(e)[0];if(!o)return null;const s=e[o],a=i?`${i}.${o}`:o;let c;const p=this.config.propNames.namespace,l=this.config.propNames.prefix,m=s[p],h=s[l],u=this.transformUtil.createContext("json-to-xml",o,n.NodeType.ELEMENT_NODE,{path:a,namespace:m,prefix:h,parent:r});c=m&&this.config.preserveNamespaces?h?n.createElementNS(m,`${h}:${o}`):n.createElementNS(m,o):n.createElement(o);const f=this.config.propNames.attributes,d=this.config.propNames.value;if(this.config.preserveAttributes&&s[f]&&Array.isArray(s[f])&&s[f].forEach((e=>{const t=Object.keys(e)[0];if(!t)return;const r=e[t],i=this.transformUtil.createContext("json-to-xml",o,n.NodeType.ELEMENT_NODE,{path:`${a}.${t}`,namespace:r[p],prefix:r[l],isAttribute:!0,attributeName:t,parent:u}),s=this.transformUtil.applyTransforms(r[d]||"",i),m=r[p],h=r[l];let f=t;h&&this.config.preserveNamespaces&&(f=`${h}:${t}`),n.setNamespacedAttribute(c,m&&this.config.preserveNamespaces?m:null,f,s)})),void 0!==s[d]){const e=this.transformUtil.createContext("json-to-xml",o,n.NodeType.TEXT_NODE,{path:`${a}.#text`,namespace:m,prefix:h,parent:u}),t=this.transformUtil.applyTransforms(s[d],e);c.textContent=t}const g=this.config.propNames.children,N=this.config.propNames.cdata,y=this.config.propNames.comments,T=this.config.propNames.instruction,E=this.config.propNames.target;return s[g]&&Array.isArray(s[g])&&s[g].forEach((e=>{if(void 0!==e[d]&&this.config.preserveTextNodes){const t=this.transformUtil.createContext("json-to-xml","#text",n.NodeType.TEXT_NODE,{path:`${a}.#text`,parent:u}),r=this.transformUtil.applyTransforms(e[d],t);c.appendChild(n.createTextNode(this.xmlUtil.escapeXML(r)))}else if(void 0!==e[N]&&this.config.preserveCDATA){const t=this.transformUtil.createContext("json-to-xml","#cdata",n.NodeType.CDATA_SECTION_NODE,{path:`${a}.#cdata`,parent:u}),r=this.transformUtil.applyTransforms(e[N],t);c.appendChild(n.createCDATASection(r))}else if(void 0!==e[y]&&this.config.preserveComments)c.appendChild(n.createComment(e[y]));else if(void 0!==e[T]&&this.config.preserveProcessingInstr){const t=e[T],r=t[E],i=t[d]||"";r&&c.appendChild(n.createProcessingInstruction(r,i))}else{const r=this.jsonToNode(e,t,u,a);r&&c.appendChild(r)}})),c}}const p={preserveNamespaces:!0,preserveComments:!0,preserveProcessingInstr:!0,preserveCDATA:!0,preserveTextNodes:!0,preserveWhitespace:!1,preserveAttributes:!0,outputOptions:{prettyPrint:!0,indent:2,compact:!0,json:{},xml:{declaration:!0}},propNames:{namespace:"$ns",prefix:"$pre",attributes:"$attr",value:"$val",cdata:"$cdata",comments:"$cmnt",instruction:"$pi",target:"$trgt",children:"$children"}};class l{constructor(e={}){this.jsonUtil=new i(p);const t=this.jsonUtil.deepClone(p);this.config=this.jsonUtil.deepMerge(t,e),this.jsonUtil=new i(this.config),this.xmlUtil=new a(this.config),this.xmlToJsonConverter=new s(this.config),this.jsonToXmlConverter=new c(this.config)}xmlToJson(e){return this.xmlToJsonConverter.convert(e)}jsonToXml(e){return this.jsonToXmlConverter.convert(e)}prettyPrintXml(e){return this.xmlUtil.prettyPrintXml(e)}getPath(e,t,r=void 0){return this.jsonUtil.getPath(e,t,r)}validateXML(e){return this.xmlUtil.validateXML(e)}generateJsonSchema(){return this.jsonUtil.generateJsonSchema()}objectToXJX(e,t){return this.jsonUtil.objectToXJX(e,t)}generateJsonExample(e="root"){return this.jsonUtil.generateExample(e)}addTransformer(e){return this.config.valueTransforms||(this.config.valueTransforms=[]),this.config.valueTransforms.push(e),this}clearTransformers(){return this.config.valueTransforms=[],this}cleanup(){n.cleanup()}}return e.DEFAULT_CONFIG=p,e.ValueTransformer=class{process(e,t){return"xml-to-json"===t.direction?this.xmlToJson(e,t):this.jsonToXml(e,t)}xmlToJson(e,t){return e}jsonToXml(e,t){return e}},e.XJX=l,e.XJXError=t,e.default=l,Object.defineProperty(e,"__esModule",{value:!0}),e}({}); +//# sourceMappingURL=xjx.min.js.map diff --git a/dist/xjx.min.js.map b/dist/xjx.min.js.map new file mode 100644 index 0000000..f743119 --- /dev/null +++ b/dist/xjx.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"xjx.min.js","sources":["../../src/core/types/error-types.ts","../../src/core/types/dom-types.ts","../../src/core/adapters/dom-adapter.ts","../../src/core/utils/json-utils.ts","../../src/core/transformers/TransformUtil.ts","../../src/core/converters/xml-to-json-converter.ts","../../src/core/utils/xml-utils.ts","../../src/core/converters/json-to-xml-converter.ts","../../src/core/config/config.ts","../../src/XJX.ts","../../src/core/transformers/ValueTransformer.ts"],"sourcesContent":["/**\n * Error classes for the XJX library\n */\n\n/**\n * Base error class\n */\nexport class XJXError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'XMLToJSONError';\n }\n}\n\n/**\n * Error for XML parsing issues\n */\nexport class XmlToJsonError extends XJXError {\n constructor(message: string) {\n super(`XML parse error: ${message}`);\n this.name = 'XmlToJsonError';\n }\n}\n\n/**\n * Error for XML serialization issues\n */\nexport class JsonToXmlError extends XJXError {\n constructor(message: string) {\n super(`XML serialization error: ${message}`);\n this.name = 'JsonToXmlError';\n }\n}\n\n/**\n * Error for environment incompatibility\n */\nexport class EnvironmentError extends XJXError {\n constructor(message: string) {\n super(`Environment error: ${message}`);\n this.name = 'EnvironmentError';\n }\n}\n\n/**\n * Error for invalid configuration\n */\nexport class ConfigurationError extends XJXError {\n constructor(message: string) {\n super(`Configuration error: ${message}`);\n this.name = 'ConfigurationError';\n }\n}","/**\n * DOM node types as an enum for better type safety\n */\nexport enum NodeType {\n ELEMENT_NODE = 1,\n ATTRIBUTE_NODE = 2,\n TEXT_NODE = 3, \n CDATA_SECTION_NODE = 4,\n PROCESSING_INSTRUCTION_NODE = 7,\n COMMENT_NODE = 8,\n DOCUMENT_NODE = 9\n }","/**\n * DOM Environment provider with unified interface for browser and Node.js\n */\nimport { XJXError } from '../types/error-types';\nimport { NodeType } from '../types/dom-types';\n\n\ninterface DOMWindow {\n DOMParser: any;\n XMLSerializer: any;\n // Node: {\n // ELEMENT_NODE: number;\n // TEXT_NODE: number;\n // CDATA_SECTION_NODE: number;\n // COMMENT_NODE: number;\n // PROCESSING_INSTRUCTION_NODE: number;\n // DOCUMENT_NODE: number; \n // };\n document: Document;\n close?: () => void; \n}\n\ninterface JSDOMInstance {\n window: DOMWindow;\n}\n\nexport const DOMAdapter = (() => {\n // Environment-specific DOM implementation\n let domParser: any;\n let xmlSerializer: any;\n // let nodeTypes: NodeTypes;\n let docImplementation: any;\n let jsdomInstance: JSDOMInstance | null = null;\n\n try {\n if (typeof window === \"undefined\") {\n // Node.js environment - try JSDOM first\n try {\n const { JSDOM } = require(\"jsdom\");\n jsdomInstance = new JSDOM(\"\", {\n contentType: \"text/xml\",\n }) as JSDOMInstance;\n\n domParser = jsdomInstance.window.DOMParser;\n xmlSerializer = jsdomInstance.window.XMLSerializer;\n // nodeTypes = {\n // ELEMENT_NODE: jsdomInstance.window.Node.ELEMENT_NODE,\n // TEXT_NODE: jsdomInstance.window.Node.TEXT_NODE,\n // CDATA_SECTION_NODE: jsdomInstance.window.Node.CDATA_SECTION_NODE,\n // COMMENT_NODE: jsdomInstance.window.Node.COMMENT_NODE,\n // PROCESSING_INSTRUCTION_NODE: jsdomInstance.window.Node.PROCESSING_INSTRUCTION_NODE,\n // DOCUMENT_NODE: jsdomInstance.window.Node.DOCUMENT_NODE, // Add this line\n // };\n docImplementation = jsdomInstance.window.document.implementation;\n } catch (jsdomError) {\n // Fall back to xmldom if JSDOM isn't available\n try {\n const { DOMParser, XMLSerializer, DOMImplementation } = require('@xmldom/xmldom');\n domParser = DOMParser;\n xmlSerializer = XMLSerializer;\n // Standard DOM node types\n // nodeTypes = {\n // ELEMENT_NODE: 1,\n // TEXT_NODE: 3,\n // CDATA_SECTION_NODE: 4,\n // COMMENT_NODE: 8,\n // PROCESSING_INSTRUCTION_NODE: 7,\n // DOCUMENT_NODE: 9, \n // };\n const implementation = new DOMImplementation();\n docImplementation = implementation;\n } catch (xmldomError) {\n throw new XJXError(`Node.js environment detected but neither 'jsdom' nor '@xmldom/xmldom' are available.`);\n }\n }\n } else {\n // Browser environment\n if (!window.DOMParser) {\n throw new XJXError(\"DOMParser is not available in this environment\");\n }\n\n if (!window.XMLSerializer) {\n throw new XJXError(\"XMLSerializer is not available in this environment\");\n }\n\n domParser = window.DOMParser;\n xmlSerializer = window.XMLSerializer;\n // nodeTypes = {\n // ELEMENT_NODE: Node.ELEMENT_NODE,\n // TEXT_NODE: Node.TEXT_NODE,\n // CDATA_SECTION_NODE: Node.CDATA_SECTION_NODE,\n // COMMENT_NODE: Node.COMMENT_NODE,\n // PROCESSING_INSTRUCTION_NODE: Node.PROCESSING_INSTRUCTION_NODE,\n // DOCUMENT_NODE: Node.DOCUMENT_NODE, \n // };\n docImplementation = document.implementation;\n }\n } catch (error) {\n throw new XJXError(`DOM environment initialization failed: ${error instanceof Error ? error.message : String(error)}`);\n }\n\n return {\n createParser: () => {\n try {\n return new domParser();\n } catch (error) {\n throw new XJXError(`Failed to create DOM parser: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n createSerializer: () => {\n try {\n return new xmlSerializer();\n } catch (error) {\n throw new XJXError(`Failed to create XML serializer: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n NodeType,\n \n parseFromString: (xmlString: string, contentType: string = 'text/xml') => {\n try {\n const parser = new domParser();\n return parser.parseFromString(xmlString, contentType);\n } catch (error) {\n throw new XJXError(`Failed to parse XML: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n serializeToString: (node: Node) => {\n try {\n const serializer = new xmlSerializer();\n return serializer.serializeToString(node);\n } catch (error) {\n throw new XJXError(`Failed to serialize XML: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n createDocument: () => {\n try {\n // For browsers, create a document with a root element to avoid issues\n if (typeof window !== \"undefined\") {\n const parser = new domParser();\n return parser.parseFromString('', 'text/xml');\n } else {\n return docImplementation.createDocument(null, null, null);\n }\n } catch (error) {\n throw new XJXError(`Failed to create document: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n createElement: (tagName: string) => {\n try {\n if (typeof window !== \"undefined\") {\n return document.createElement(tagName);\n } else {\n const doc = docImplementation.createDocument(null, null, null);\n return doc.createElement(tagName);\n }\n } catch (error) {\n throw new XJXError(`Failed to create element: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n createElementNS: (namespaceURI: string, qualifiedName: string) => {\n try {\n if (typeof window !== \"undefined\") {\n return document.createElementNS(namespaceURI, qualifiedName);\n } else {\n const doc = docImplementation.createDocument(null, null, null);\n return doc.createElementNS(namespaceURI, qualifiedName);\n }\n } catch (error) {\n throw new XJXError(`Failed to create element with namespace: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n createTextNode: (data: string) => {\n try {\n if (typeof window !== \"undefined\") {\n return document.createTextNode(data);\n } else {\n const doc = docImplementation.createDocument(null, null, null);\n return doc.createTextNode(data);\n }\n } catch (error) {\n throw new XJXError(`Failed to create text node: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n createCDATASection: (data: string) => {\n try {\n // For browser compatibility, use document.implementation to create CDATA\n if (typeof window !== \"undefined\") {\n const doc = document.implementation.createDocument(null, null, null);\n return doc.createCDATASection(data);\n } else {\n const doc = docImplementation.createDocument(null, null, null);\n return doc.createCDATASection(data);\n }\n } catch (error) {\n throw new XJXError(`Failed to create CDATA section: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n createComment: (data: string) => {\n try {\n if (typeof window !== \"undefined\") {\n return document.createComment(data);\n } else {\n const doc = docImplementation.createDocument(null, null, null);\n return doc.createComment(data);\n }\n } catch (error) {\n throw new XJXError(`Failed to create comment: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n createProcessingInstruction: (target: string, data: string) => {\n try {\n if (typeof window !== \"undefined\") {\n const doc = document.implementation.createDocument(null, null, null);\n return doc.createProcessingInstruction(target, data);\n } else {\n const doc = docImplementation.createDocument(null, null, null);\n return doc.createProcessingInstruction(target, data);\n }\n } catch (error) {\n throw new XJXError(`Failed to create processing instruction: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n // New helper methods\n \n /**\n * Creates a proper namespace qualified attribute\n */\n setNamespacedAttribute: (element: Element, namespaceURI: string | null, qualifiedName: string, value: string): void => {\n try {\n if (namespaceURI) {\n element.setAttributeNS(namespaceURI, qualifiedName, value);\n } else {\n element.setAttribute(qualifiedName, value);\n }\n } catch (error) {\n throw new XJXError(`Failed to set attribute: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n /**\n * Check if an object is a DOM node\n */\n isNode: (obj: any): boolean => {\n try {\n return obj && typeof obj === 'object' && typeof obj.nodeType === 'number';\n } catch (error) {\n return false;\n }\n },\n \n /**\n * Get DOM node type as string for debugging\n */\n getNodeTypeName: (nodeType: number): string => {\n switch (nodeType) {\n case NodeType.ELEMENT_NODE: return 'ELEMENT_NODE';\n case NodeType.TEXT_NODE: return 'TEXT_NODE';\n case NodeType.CDATA_SECTION_NODE: return 'CDATA_SECTION_NODE';\n case NodeType.COMMENT_NODE: return 'COMMENT_NODE';\n case NodeType.PROCESSING_INSTRUCTION_NODE: return 'PROCESSING_INSTRUCTION_NODE';\n default: return `UNKNOWN_NODE_TYPE(${nodeType})`;\n }\n },\n \n /**\n * Get all node attributes as an object\n */\n getNodeAttributes: (node: Element): Record => {\n const result: Record = {};\n for (let i = 0; i < node.attributes.length; i++) {\n const attr = node.attributes[i];\n result[attr.name] = attr.value;\n }\n return result;\n },\n \n // Cleanup method (mainly for JSDOM)\n cleanup: () => {\n if (jsdomInstance && typeof jsdomInstance.window.close === 'function') {\n jsdomInstance.window.close();\n }\n }\n };\n})();","/**\n * JSONUtil - Utility functions for JSON processing\n */\nimport { Configuration } from \"../types/config-types\";\nimport { JSONValue } from \"../types/json-types\";\n\nexport class JsonUtil {\n private config: Configuration;\n\n /**\n * Constructor for JSONUtil\n * @param config Configuration options\n */\n constructor(config: Configuration) {\n this.config = config;\n }\n\n /**\n * Safely retrieves a value from a JSON object using a dot-separated path.\n * Automatically traverses into children arrays and flattens results.\n *\n * @param obj The input JSON object\n * @param path The dot-separated path string (e.g., \"root.item.description.$val\")\n * @param fallback Value to return if the path does not resolve\n * @returns Retrieved value or fallback\n */\n getPath(\n obj: Record,\n path: string,\n fallback?: JSONValue\n ): any {\n const segments = path.split(\".\");\n let current: any = obj;\n\n for (const segment of segments) {\n if (Array.isArray(current)) {\n // Apply the segment to each array element and flatten results\n const results = current\n .map((item) => this.resolveSegment(item, segment))\n .flat()\n .filter((v) => v !== undefined);\n current = results.length > 0 ? results : undefined;\n } else {\n current = this.resolveSegment(current, segment);\n }\n\n if (current === undefined) return fallback;\n }\n\n // Collapse singleton arrays\n if (Array.isArray(current) && current.length === 1) {\n return current[0];\n }\n\n return current !== undefined ? current : fallback;\n }\n\n /**\n * Resolves a single path segment in the context of a JSON object.\n * Falls back to searching children for matching keys.\n *\n * @param obj The current object\n * @param segment The path segment to resolve\n * @returns Resolved value or undefined\n */\n private resolveSegment(obj: any, segment: string): any {\n if (obj == null || typeof obj !== \"object\") return undefined;\n\n // Direct property access\n if (segment in obj) {\n return obj[segment];\n }\n\n // Check if this is a special property name that matches the config\n if (\n segment === this.config.propNames.value ||\n segment === this.config.propNames.children ||\n segment === this.config.propNames.attributes ||\n segment === this.config.propNames.namespace ||\n segment === this.config.propNames.prefix ||\n segment === this.config.propNames.cdata ||\n segment === this.config.propNames.comments ||\n segment === this.config.propNames.instruction ||\n segment === this.config.propNames.target\n ) {\n const configKey = Object.entries(this.config.propNames).find(\n ([_, value]) => value === segment\n )?.[0];\n\n if (configKey && obj[segment] !== undefined) {\n return obj[segment];\n }\n }\n\n // Check children for objects that contain the segment\n const childrenKey = this.config.propNames.children;\n const children = obj[childrenKey];\n if (Array.isArray(children)) {\n const matches = children\n .map((child) => (segment in child ? child[segment] : undefined))\n .filter((v) => v !== undefined);\n return matches.length > 0 ? matches : undefined;\n }\n\n return undefined;\n }\n\n /**\n * Converts a plain JSON object to the XML-like JSON structure.\n * Optionally wraps the result in a root element with attributes and namespaces.\n *\n * @param obj Standard JSON object\n * @param root Optional root element configuration (either a string or object with $ keys)\n * @returns XML-like JSON object\n */\n objectToXJX(obj: any, root?: any): any {\n const wrappedObject = this.wrapObject(obj);\n\n if (typeof root === \"string\") {\n // Root is a simple string: wrap result with this root tag\n return { [root]: wrappedObject };\n }\n\n if (root && typeof root === \"object\") {\n // Handle root with config-based keys\n const elementName = root.name || \"root\"; // Default to \"root\" if no name is provided\n const prefix = root[this.config.propNames.prefix] || \"\";\n const qualifiedName = prefix ? `${prefix}:${elementName}` : elementName;\n\n const result: any = {\n [qualifiedName]: {},\n };\n\n // Add attributes to the root element if defined\n const attrsKey = this.config.propNames.attributes;\n if (root[attrsKey] && Array.isArray(root[attrsKey])) {\n result[qualifiedName][attrsKey] = root[attrsKey];\n }\n\n // Merge existing children with the new generated children\n const childrenKey = this.config.propNames.children;\n const children = root[childrenKey] ? root[childrenKey] : [];\n result[qualifiedName][childrenKey] = [\n ...children,\n { [elementName]: wrappedObject },\n ];\n\n // Add namespace and prefix if defined\n const nsKey = this.config.propNames.namespace;\n if (root[nsKey]) {\n result[qualifiedName][nsKey] = root[nsKey];\n }\n\n if (prefix && root[nsKey]) {\n result[qualifiedName][`xmlns:${prefix}`] = root[nsKey];\n }\n\n return result;\n }\n\n // Default behavior if no root is provided\n return wrappedObject;\n }\n\n /**\n * Wraps a standard JSON value in the XML-like JSON structure\n * @param value Value to wrap\n * @returns Wrapped value\n */\n private wrapObject(value: any): any {\n const valKey = this.config.propNames.value;\n const childrenKey = this.config.propNames.children;\n\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return { [valKey]: value };\n }\n\n if (Array.isArray(value)) {\n // For arrays, wrap each item and return as a children-style array of repeated elements\n return {\n [childrenKey]: value.map((item) => {\n return this.wrapObject(item);\n }),\n };\n }\n\n if (typeof value === \"object\") {\n // It's an object: wrap its properties in children\n const children = Object.entries(value).map(([key, val]) => ({\n [key]: this.wrapObject(val),\n }));\n\n return { [childrenKey]: children };\n }\n\n return undefined; // Fallback for unhandled types\n }\n\n /**\n * Check if an object is empty\n * @param value Value to check\n * @returns true if empty\n */\n isEmpty(value: any): boolean {\n if (value == null) return true;\n if (Array.isArray(value)) return value.length === 0;\n if (typeof value === \"object\") return Object.keys(value).length === 0;\n return false;\n }\n\n /**\n * Safely stringify JSON for debugging\n * @param obj Object to stringify\n * @param indent Optional indentation level\n * @returns JSON string representation\n */\n safeStringify(obj: any, indent: number = 2): string {\n try {\n return JSON.stringify(obj, null, indent);\n } catch (error) {\n return \"[Cannot stringify object]\";\n }\n }\n\n /**\n * Deep clone an object\n * @param obj Object to clone\n * @returns Cloned object\n */\n deepClone(obj: any): any {\n try {\n return JSON.parse(JSON.stringify(obj));\n } catch (error) {\n throw new Error(\n `Failed to deep clone object: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n /**\n * Deep merge two objects with proper type handling\n * @param target Target object\n * @param source Source object\n * @returns Merged object (target is modified)\n */\n deepMerge(target: T, source: Partial): T {\n if (!source || typeof source !== \"object\" || source === null) {\n return target;\n }\n\n if (!target || typeof target !== \"object\" || target === null) {\n return source as unknown as T;\n }\n\n Object.keys(source).forEach((key) => {\n const sourceValue = source[key as keyof Partial];\n const targetValue = target[key as keyof T];\n\n // If both source and target values are objects, recursively merge them\n if (\n sourceValue !== null &&\n targetValue !== null &&\n typeof sourceValue === \"object\" &&\n typeof targetValue === \"object\" &&\n !Array.isArray(sourceValue) &&\n !Array.isArray(targetValue)\n ) {\n // Recursively merge the nested objects\n (target as any)[key] = this.deepMerge(targetValue, sourceValue as any);\n } else {\n // Otherwise just replace the value\n (target as any)[key] = sourceValue;\n }\n });\n\n return target;\n }\n\n /**\n * Generates a JSON schema that matches the current configuration\n * @returns JSON schema object\n */\n generateJsonSchema(): Record {\n try {\n const propNames = this.config.propNames;\n const compact = this.config.outputOptions.compact || false;\n const preserveNamespaces = this.config.preserveNamespaces;\n const preserveComments = this.config.preserveComments;\n const preserveCDATA = this.config.preserveCDATA;\n const preserveProcessingInstr = this.config.preserveProcessingInstr;\n const preserveTextNodes = this.config.preserveTextNodes;\n const preserveWhitespace = this.config.preserveWhitespace;\n const preserveAttributes = this.config.preserveAttributes;\n\n // Determine which properties are required based on the configuration\n const requiredProps: string[] = [];\n\n if (!compact) {\n // Only add collections as required if they're preserved in the config\n if (preserveAttributes) requiredProps.push(propNames.attributes);\n\n if (preserveCDATA) requiredProps.push(propNames.cdata);\n if (preserveComments) requiredProps.push(propNames.comments);\n if (preserveProcessingInstr) requiredProps.push(propNames.instruction);\n requiredProps.push(propNames.children);\n\n if (preserveTextNodes) {\n requiredProps.push(propNames.value);\n\n if (preserveNamespaces) {\n requiredProps.push(propNames.namespace);\n // Note: prefix is not required as it may not be present for all elements\n }\n }\n }\n\n // Create schema for element properties\n const elementProperties: Record = {};\n\n // Add namespace property if preserving namespaces\n if (preserveNamespaces) {\n elementProperties[propNames.namespace] = {\n description: \"Namespace URI of the element\",\n type: \"string\",\n };\n\n // Add prefix property if preserving namespaces\n elementProperties[propNames.prefix] = {\n description: \"Namespace prefix of the element\",\n type: \"string\",\n };\n }\n\n // Add value property if preserving text nodes\n if (preserveTextNodes) {\n elementProperties[propNames.value] = {\n description: \"Text content of the element\",\n type: \"string\",\n };\n }\n\n // Add attributes property\n if (preserveAttributes) {\n elementProperties[propNames.attributes] = {\n description: \"Element attributes\",\n type: \"array\",\n items: {\n type: \"object\",\n patternProperties: {\n \"^.*$\": {\n type: \"object\",\n properties: {\n [propNames.value]: {\n description: \"Attribute value\",\n type: \"string\",\n },\n },\n required: [propNames.value],\n },\n },\n additionalProperties: false,\n },\n };\n\n // If preserving namespaces, add namespace properties to attribute schema\n if (preserveNamespaces) {\n const attrProps =\n elementProperties[propNames.attributes].items.patternProperties[\n \"^.*$\"\n ].properties;\n\n attrProps[propNames.namespace] = {\n description: \"Namespace URI of the attribute\",\n type: \"string\",\n };\n\n attrProps[propNames.prefix] = {\n description: \"Namespace prefix of the attribute\",\n type: \"string\",\n };\n }\n }\n\n // Add CDATA property if preserving CDATA\n if (preserveCDATA) {\n elementProperties[propNames.cdata] = {\n description: \"CDATA section content\",\n type: \"string\",\n };\n }\n\n // Add comments property if preserving comments\n if (preserveComments) {\n elementProperties[propNames.comments] = {\n description: \"Comment content\",\n type: \"string\",\n };\n }\n\n // Add processing instructions property if preserving them\n if (preserveProcessingInstr) {\n elementProperties[propNames.instruction] = {\n description: \"Processing instruction\",\n type: \"object\",\n properties: {\n [propNames.target]: {\n description: \"Processing instruction target\",\n type: \"string\",\n },\n [propNames.value]: {\n description: \"Processing instruction content\",\n type: \"string\",\n },\n },\n required: [propNames.target],\n };\n }\n\n // Add children property with recursive schema\n elementProperties[propNames.children] = {\n description: \"Child elements\",\n type: \"array\",\n items: {\n type: \"object\",\n patternProperties: {\n \"^.*$\": {\n $ref: \"#/definitions/element\",\n },\n },\n additionalProperties: false,\n },\n };\n\n // Create element definition (will be referenced recursively)\n const elementDefinition = {\n type: \"object\",\n properties: elementProperties,\n required: requiredProps,\n additionalProperties: false,\n };\n\n // Build the complete schema\n const schema = {\n $schema: \"https://json-schema.org/draft/2020-12/schema\",\n title: \"XJX JSON Schema\",\n description:\n \"Schema for JSON representation of XML documents using the XJX library\",\n type: \"object\",\n patternProperties: {\n \"^.*$\": {\n $ref: \"#/definitions/element\",\n },\n },\n additionalProperties: false,\n definitions: {\n element: elementDefinition,\n },\n };\n\n return schema;\n } catch (error) {\n throw new Error(\n `Schema generation failed: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n /**\n * Generate an example JSON object based on the schema\n * @param {string} rootName - Name of the root element\n * @returns {Record} - Example JSON object\n */\n generateExample(rootName: string = \"root\"): Record {\n const propNames = this.config.propNames;\n const preserveNamespaces = this.config.preserveNamespaces;\n const preserveComments = this.config.preserveComments;\n const preserveCDATA = this.config.preserveCDATA;\n const preserveProcessingInstr = this.config.preserveProcessingInstr;\n const preserveAttributes = this.config.preserveAttributes;\n\n // Simple example with common features\n const example: Record = {\n [rootName]: {\n [propNames.value]: \"Root content\",\n [propNames.children]: [\n {\n child: {\n [propNames.value]: \"Child content\",\n },\n },\n ],\n },\n };\n\n // Add namespace properties if enabled\n if (preserveNamespaces) {\n example[rootName][propNames.namespace] = \"http://example.org/ns\";\n example[rootName][propNames.prefix] = \"ex\";\n example[rootName][propNames.children][0].child[propNames.namespace] =\n \"http://example.org/ns\";\n example[rootName][propNames.children][0].child[propNames.prefix] = \"ex\";\n }\n\n // Add attributes if enabled\n if (preserveAttributes) {\n example[rootName][propNames.attributes] = [\n { id: { [propNames.value]: \"root-1\" } },\n { lang: { [propNames.value]: \"en\" } },\n ];\n\n if (preserveNamespaces) {\n example[rootName][propNames.attributes][1].lang[propNames.prefix] =\n \"xml\";\n }\n\n example[rootName][propNames.children][0].child[propNames.attributes] = [\n { id: { [propNames.value]: \"child-1\" } },\n ];\n }\n\n // Add CDATA if enabled\n if (preserveCDATA) {\n example[rootName][propNames.children][0].child[propNames.children] = [\n { [propNames.cdata]: \"Raw content\" },\n ];\n }\n\n // Add comments if enabled\n if (preserveComments) {\n if (!example[rootName][propNames.children][0].child[propNames.children]) {\n example[rootName][propNames.children][0].child[propNames.children] = [];\n }\n\n example[rootName][propNames.children][0].child[propNames.children].push({\n [propNames.comments]: \"Comment about the child\",\n });\n }\n\n // Add processing instruction if enabled\n if (preserveProcessingInstr) {\n if (!example[rootName][propNames.children]) {\n example[rootName][propNames.children] = [];\n }\n\n example[rootName][propNames.children].unshift({\n [propNames.instruction]: {\n [propNames.target]: \"xml-stylesheet\",\n [propNames.value]: 'type=\"text/css\" href=\"style.css\"',\n },\n });\n }\n\n return example;\n }\n}\n","/**\n * Utilities for applying value transformations\n */\nimport { Configuration } from '../types/config-types';\nimport { TransformContext, TransformDirection } from './ValueTransformer';\nimport { DOMAdapter } from '../adapters/dom-adapter';\n\n/**\n * Utility for applying value transformations\n */\nexport class TransformUtil {\n private config: Configuration;\n\n /**\n * Create a new TransformUtil\n * @param config Configuration\n */\n constructor(config: Configuration) {\n this.config = config;\n }\n\n /**\n * Apply transforms to a value\n * @param value Value to transform\n * @param context Transformation context\n * @returns Transformed value\n */\n applyTransforms(value: any, context: TransformContext): any {\n // Skip transformation if no transformers are configured\n if (!this.config.valueTransforms || this.config.valueTransforms.length === 0) {\n return value;\n }\n\n // Apply each transformer in sequence\n let transformedValue = value;\n for (const transformer of this.config.valueTransforms) {\n transformedValue = transformer.process(transformedValue, context);\n }\n\n return transformedValue;\n }\n\n /**\n * Create a transform context\n * @param direction Direction of transformation\n * @param nodeName Name of the current node\n * @param nodeType DOM node type\n * @param options Additional context options\n * @returns Transform context\n */\n createContext(\n direction: TransformDirection,\n nodeName: string,\n nodeType: number,\n options: {\n path?: string;\n namespace?: string;\n prefix?: string;\n isAttribute?: boolean;\n attributeName?: string;\n parent?: TransformContext;\n } = {}\n ): TransformContext {\n return {\n direction,\n nodeName,\n nodeType,\n path: options.path || nodeName,\n namespace: options.namespace,\n prefix: options.prefix,\n isAttribute: options.isAttribute || false,\n attributeName: options.attributeName,\n parent: options.parent,\n config: this.config,\n };\n }\n\n /**\n * Get a user-friendly node type name for debugging\n * @param nodeType DOM node type\n * @returns String representation of node type\n */\n getNodeTypeName(nodeType: number): string {\n return DOMAdapter.getNodeTypeName(nodeType);\n }\n}","/**\n * XmlToJsonConverter class for converting XML to JSON with consistent namespace handling\n */\nimport { Configuration } from \"../types/config-types\";\nimport { XJXError } from \"../types/error-types\";\nimport { DOMAdapter } from \"../adapters/dom-adapter\";\nimport { JsonUtil } from \"../utils/json-utils\";\nimport { TransformUtil } from \"../transformers/TransformUtil\";\nimport { TransformContext } from \"../transformers/ValueTransformer\";\n\n/**\n * XmlToJsonConverter Parser for converting XML to JSON\n */\nexport class XmlToJsonConverter {\n private config: Configuration;\n private jsonUtil: JsonUtil;\n private transformUtil: TransformUtil;\n\n /**\n * Constructor for XmlToJsonConverter\n * @param config Configuration options\n */\n constructor(config: Configuration) {\n this.config = config;\n this.jsonUtil = new JsonUtil(this.config);\n this.transformUtil = new TransformUtil(this.config);\n }\n\n /**\n * Convert XML string to JSON\n * @param xmlString XML content as string\n * @returns JSON object representing the XML content\n */\n public convert(xmlString: string): Record {\n try {\n const xmlDoc = DOMAdapter.parseFromString(xmlString, \"text/xml\");\n\n // Check for parsing errors\n const errors = xmlDoc.getElementsByTagName(\"parsererror\");\n if (errors.length > 0) {\n throw new XJXError(`XML parsing error: ${errors[0].textContent}`);\n }\n\n return this.nodeToJson(xmlDoc.documentElement);\n } catch (error) {\n throw new XJXError(\n `Failed to convert XML to JSON: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n /**\n * Convert a DOM node to JSON representation\n * @param node DOM node to convert\n * @param parentContext Optional parent context for transformation chain\n * @param path Current path in the XML tree\n * @returns JSON representation of the node\n */\n private nodeToJson(node: Node, parentContext?: TransformContext, path: string = \"\"): Record {\n const result: Record = {};\n\n // Handle element nodes\n if (node.nodeType === DOMAdapter.NodeType.ELEMENT_NODE) {\n const element = node as Element;\n // Use localName instead of nodeName to strip namespace prefix\n const nodeName =\n element.localName ||\n element.nodeName.split(\":\").pop() ||\n element.nodeName;\n\n // Update the current path\n const currentPath = path ? `${path}.${nodeName}` : nodeName;\n\n const nodeObj: Record = {};\n\n // Create context for this node\n const context = this.transformUtil.createContext(\n 'xml-to-json',\n nodeName,\n node.nodeType,\n {\n path: currentPath,\n namespace: element.namespaceURI || undefined,\n prefix: element.prefix || undefined,\n parent: parentContext\n }\n );\n\n // Process namespaces if enabled\n if (this.config.preserveNamespaces) {\n const ns = element.namespaceURI;\n if (ns) {\n nodeObj[this.config.propNames.namespace] = ns;\n }\n\n const prefix = element.prefix;\n if (prefix) {\n nodeObj[this.config.propNames.prefix] = prefix;\n }\n }\n\n // Process attributes if enabled\n if (this.config.preserveAttributes && element.attributes.length > 0) {\n const attrs: Array> = [];\n\n for (let i = 0; i < element.attributes.length; i++) {\n const attr = element.attributes[i];\n // Strip namespace prefix from attribute name\n const attrLocalName =\n attr.localName || attr.name.split(\":\").pop() || attr.name;\n\n // Create attribute context\n const attrContext = this.transformUtil.createContext(\n 'xml-to-json',\n nodeName,\n node.nodeType,\n {\n path: `${currentPath}.${attrLocalName}`,\n namespace: attr.namespaceURI || undefined,\n prefix: attr.prefix || undefined,\n isAttribute: true,\n attributeName: attrLocalName,\n parent: context\n }\n );\n\n // Apply transformations to attribute value\n const transformedValue = this.transformUtil.applyTransforms(\n attr.value,\n attrContext\n );\n\n // Create attribute object with consistent structure\n const attrObj: Record = {\n [attrLocalName]: {\n [this.config.propNames.value]: transformedValue,\n },\n };\n\n // Add namespace info for attribute if present and enabled\n if (this.config.preserveNamespaces) {\n // Handle attribute namespace\n if (attr.namespaceURI) {\n attrObj[attrLocalName][this.config.propNames.namespace] =\n attr.namespaceURI;\n }\n\n // Handle attribute prefix\n if (attr.prefix) {\n attrObj[attrLocalName][this.config.propNames.prefix] =\n attr.prefix;\n }\n }\n\n attrs.push(attrObj);\n }\n\n if (attrs.length > 0) {\n nodeObj[this.config.propNames.attributes] = attrs;\n }\n }\n\n // Process child nodes\n if (element.childNodes.length > 0) {\n const children: Array> = [];\n const childrenKey = this.config.propNames.children;\n const valueKey = this.config.propNames.value;\n const cdataKey = this.config.propNames.cdata;\n const commentsKey = this.config.propNames.comments;\n const instructionKey = this.config.propNames.instruction;\n const targetKey = this.config.propNames.target;\n\n for (let i = 0; i < element.childNodes.length; i++) {\n const child = element.childNodes[i];\n\n // Text nodes - only process if preserveTextNodes is true\n if (child.nodeType === DOMAdapter.NodeType.TEXT_NODE) {\n if (this.config.preserveTextNodes) {\n let text = child.nodeValue || \"\";\n\n // Skip whitespace-only text nodes if whitespace preservation is disabled\n if (!this.config.preserveWhitespace) {\n if (text.trim() === \"\") {\n continue;\n }\n // Trim the text when preserveWhitespace is false\n text = text.trim();\n }\n\n // Create text node context\n const textContext = this.transformUtil.createContext(\n 'xml-to-json',\n '#text',\n child.nodeType,\n {\n path: `${currentPath}.#text`,\n parent: context\n }\n );\n\n // Apply transformations to text value\n const transformedText = this.transformUtil.applyTransforms(\n text,\n textContext\n );\n\n children.push({ [valueKey]: transformedText });\n }\n }\n // CDATA sections\n else if (\n child.nodeType === DOMAdapter.NodeType.CDATA_SECTION_NODE &&\n this.config.preserveCDATA\n ) {\n // Create CDATA context\n const cdataContext = this.transformUtil.createContext(\n 'xml-to-json',\n '#cdata',\n child.nodeType,\n {\n path: `${currentPath}.#cdata`,\n parent: context\n }\n );\n\n // Apply transformations to CDATA value\n const transformedCData = this.transformUtil.applyTransforms(\n child.nodeValue || \"\",\n cdataContext\n );\n\n children.push({\n [cdataKey]: transformedCData,\n });\n }\n // Comments\n else if (\n child.nodeType === DOMAdapter.NodeType.COMMENT_NODE &&\n this.config.preserveComments\n ) {\n children.push({\n [commentsKey]: child.nodeValue || \"\",\n });\n }\n // Processing instructions\n else if (\n child.nodeType ===\n DOMAdapter.NodeType.PROCESSING_INSTRUCTION_NODE &&\n this.config.preserveProcessingInstr\n ) {\n children.push({\n [instructionKey]: {\n [targetKey]: child.nodeName,\n [valueKey]: child.nodeValue || \"\",\n },\n });\n }\n // Element nodes (recursive)\n else if (child.nodeType === DOMAdapter.NodeType.ELEMENT_NODE) {\n children.push(this.nodeToJson(child, context, currentPath));\n }\n }\n\n if (children.length > 0) {\n nodeObj[childrenKey] = children;\n }\n }\n\n // Apply compact option - remove empty properties if enabled\n if (this.config.outputOptions.compact) {\n Object.keys(nodeObj).forEach((key) => {\n const cleaned = this.cleanNode(nodeObj[key]);\n if (cleaned === undefined) {\n delete nodeObj[key];\n } else {\n nodeObj[key] = cleaned;\n }\n });\n }\n\n result[nodeName] = nodeObj;\n }\n\n return result;\n }\n\n private cleanNode(node: any): any {\n if (Array.isArray(node)) {\n // Clean each item in the array and filter out empty ones\n const cleanedArray = node\n .map((item) => this.cleanNode(item))\n .filter((item) => {\n return !(\n item === null ||\n item === undefined ||\n (typeof item === \"object\" && Object.keys(item).length === 0)\n );\n });\n return cleanedArray.length > 0 ? cleanedArray : undefined;\n } else if (typeof node === \"object\" && node !== null) {\n // Clean properties recursively\n Object.keys(node).forEach((key) => {\n const cleanedChild = this.cleanNode(node[key]);\n if (\n cleanedChild === null ||\n cleanedChild === undefined ||\n (Array.isArray(cleanedChild) && cleanedChild.length === 0) ||\n (typeof cleanedChild === \"object\" &&\n Object.keys(cleanedChild).length === 0)\n ) {\n delete node[key];\n } else {\n node[key] = cleanedChild;\n }\n });\n\n // Handle the special case for nodes with only empty children/attributes\n const childrenKey = this.config.propNames.children;\n const attrsKey = this.config.propNames.attributes;\n const keys = Object.keys(node);\n if (\n keys.every((key) => key === childrenKey || key === attrsKey) &&\n (node[childrenKey] === undefined ||\n this.jsonUtil.isEmpty(node[childrenKey])) &&\n (node[attrsKey] === undefined || this.jsonUtil.isEmpty(node[attrsKey]))\n ) {\n return undefined;\n }\n\n return Object.keys(node).length > 0 ? node : undefined;\n }\n\n return node;\n }\n}","/**\n * XMLUtil - Utility functions for XML processing\n */\nimport { XJXError } from \"../types/error-types\";\nimport { DOMAdapter } from \"../adapters/dom-adapter\";\nimport { Configuration } from \"../types/config-types\";\n\nexport class XmlUtil {\n private config: Configuration;\n\n /**\n * Constructor for XMLUtil\n * @param config Configuration options\n */\n constructor(config: Configuration) {\n this.config = config;\n }\n\n /**\n * Pretty print an XML string\n * @param xmlString XML string to format\n * @returns Formatted XML string\n */\n prettyPrintXml(xmlString: string): string {\n const indent = this.config.outputOptions.indent;\n const INDENT = \" \".repeat(indent);\n\n try {\n const doc = DOMAdapter.parseFromString(xmlString, \"text/xml\");\n\n const serializer = (node: Node, level = 0): string => {\n const pad = INDENT.repeat(level);\n\n switch (node.nodeType) {\n case DOMAdapter.NodeType.ELEMENT_NODE: {\n const el = node as Element;\n const tagName = el.tagName;\n const attrs = Array.from(el.attributes)\n .map((a) => `${a.name}=\"${a.value}\"`)\n .join(\" \");\n const openTag = attrs ? `<${tagName} ${attrs}>` : `<${tagName}>`;\n\n const children = Array.from(el.childNodes);\n\n if (children.length === 0) {\n return `${pad}${openTag.replace(/>$/, \" />\")}\\n`;\n }\n\n // Single text node: print inline\n if (\n children.length === 0 ||\n (children.length === 1 &&\n children[0].nodeType === DOMAdapter.NodeType.TEXT_NODE &&\n children[0].textContent?.trim() === \"\")\n ) {\n // Empty or whitespace-only\n return `${pad}<${tagName}${attrs ? \" \" + attrs : \"\"}>\\n`;\n }\n\n const inner = children\n .map((child) => serializer(child, level + 1))\n .join(\"\");\n return `${pad}${openTag}\\n${inner}${pad}\\n`;\n }\n\n case DOMAdapter.NodeType.TEXT_NODE: {\n const text = node.textContent?.trim();\n return text ? `${pad}${text}\\n` : \"\";\n }\n\n case DOMAdapter.NodeType.CDATA_SECTION_NODE:\n return `${pad}\\n`;\n\n case DOMAdapter.NodeType.COMMENT_NODE:\n return `${pad}\\n`;\n\n case DOMAdapter.NodeType.PROCESSING_INSTRUCTION_NODE:\n const pi = node as ProcessingInstruction;\n return `${pad}\\n`;\n\n case DOMAdapter.NodeType.DOCUMENT_NODE:\n return Array.from(node.childNodes)\n .map((child) => serializer(child, level))\n .join(\"\");\n\n default:\n return \"\";\n }\n };\n\n return serializer(doc).trim();\n } catch (error) {\n throw new XJXError(\n `Failed to pretty print XML: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n /**\n * Check if XML string is well-formed\n * @param xmlString XML string to validate\n * @returns Object with validation result and any error messages\n */\n validateXML(xmlString: string): {\n isValid: boolean;\n message?: string;\n } {\n try {\n const doc = DOMAdapter.parseFromString(xmlString, \"text/xml\");\n const errors = doc.getElementsByTagName(\"parsererror\");\n if (errors.length > 0) {\n return {\n isValid: false,\n message: errors[0].textContent || \"Unknown parsing error\",\n };\n }\n return { isValid: true };\n } catch (error) {\n return {\n isValid: false,\n message: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Add XML declaration to a string if missing\n * @param xmlString XML string\n * @returns XML string with declaration\n */\n ensureXMLDeclaration(xmlString: string): string {\n if (!xmlString.trim().startsWith(\"\\n' + xmlString;\n }\n return xmlString;\n }\n\n /**\n * Escapes special characters in text for safe XML usage.\n * @param text Text to escape.\n * @returns Escaped XML string.\n */\n escapeXML(text: string): string {\n if (typeof text !== \"string\" || text.length === 0) {\n return \"\";\n }\n\n return text.replace(/[&<>\"']/g, (char) => {\n switch (char) {\n case \"&\":\n return \"&\";\n case \"<\":\n return \"<\";\n case \">\":\n return \">\";\n case '\"':\n return \""\";\n case \"'\":\n return \"'\";\n default:\n return char;\n }\n });\n }\n\n /**\n * Unescapes XML entities back to their character equivalents.\n * @param text Text with XML entities.\n * @returns Unescaped text.\n */\n unescapeXML(text: string): string {\n if (typeof text !== \"string\" || text.length === 0) {\n return \"\";\n }\n\n return text.replace(/&(amp|lt|gt|quot|apos);/g, (match, entity) => {\n switch (entity) {\n case \"amp\":\n return \"&\";\n case \"lt\":\n return \"<\";\n case \"gt\":\n return \">\";\n case \"quot\":\n return '\"';\n case \"apos\":\n return \"'\";\n default:\n return match;\n }\n });\n }\n\n /**\n * Extract the namespace prefix from a qualified name\n * @param qualifiedName Qualified name (e.g., \"ns:element\")\n * @returns Prefix or null if no prefix\n */\n extractPrefix(qualifiedName: string): string | null {\n const colonIndex = qualifiedName.indexOf(\":\");\n return colonIndex > 0 ? qualifiedName.substring(0, colonIndex) : null;\n }\n\n /**\n * Extract the local name from a qualified name\n * @param qualifiedName Qualified name (e.g., \"ns:element\")\n * @returns Local name\n */\n extractLocalName(qualifiedName: string): string {\n const colonIndex = qualifiedName.indexOf(\":\");\n return colonIndex > 0\n ? qualifiedName.substring(colonIndex + 1)\n : qualifiedName;\n }\n\n /**\n * Create a qualified name from prefix and local name\n * @param prefix Namespace prefix (can be null)\n * @param localName Local name\n * @returns Qualified name\n */\n createQualifiedName(prefix: string | null, localName: string): string {\n return prefix ? `${prefix}:${localName}` : localName;\n }\n}","/**\n * JsonToXmlConverter class for converting JSON to XML with consistent namespace handling\n */\nimport { Configuration } from \"../types/config-types\";\nimport { XJXError } from \"../types/error-types\";\nimport { DOMAdapter } from \"../adapters/dom-adapter\";\nimport { XmlUtil } from \"../utils/xml-utils\";\nimport { TransformUtil } from \"../transformers/TransformUtil\";\nimport { TransformContext } from \"../transformers/ValueTransformer\";\n\n/**\n * JsonToXmlConverter for converting JSON to XML\n */\nexport class JsonToXmlConverter {\n private config: Configuration;\n private xmlUtil: XmlUtil;\n private transformUtil: TransformUtil;\n\n /**\n * Constructor for JsonToXmlConverter\n * @param config Configuration options\n */\n constructor(config: Configuration) {\n this.config = config;\n this.xmlUtil = new XmlUtil(this.config);\n this.transformUtil = new TransformUtil(this.config);\n }\n\n /**\n * Convert JSON object to XML string\n * @param jsonObj JSON object to convert\n * @returns XML string\n */\n public convert(jsonObj: Record): string {\n try {\n const doc = DOMAdapter.createDocument();\n const rootElement = this.jsonToNode(jsonObj, doc);\n\n if (rootElement) {\n // Handle the temporary root element if it exists\n if (doc.documentElement && doc.documentElement.nodeName === \"temp\") {\n doc.replaceChild(rootElement, doc.documentElement);\n } else {\n doc.appendChild(rootElement);\n }\n }\n\n // Add XML declaration if specified\n let xmlString = DOMAdapter.serializeToString(doc);\n\n // remove xhtml decl inserted by dom\n xmlString = xmlString.replace(' xmlns=\"http://www.w3.org/1999/xhtml\"', '');\n\n if (this.config.outputOptions.xml.declaration) {\n xmlString = this.xmlUtil.ensureXMLDeclaration(xmlString);\n }\n\n // Apply pretty printing if enabled\n if (this.config.outputOptions.prettyPrint) {\n xmlString = this.xmlUtil.prettyPrintXml(xmlString);\n }\n\n return xmlString;\n } catch (error) {\n throw new XJXError(\n `Failed to convert JSON to XML: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n /**\n * Convert JSON object to DOM node\n * @param jsonObj JSON object to convert\n * @param doc Document for creating elements\n * @param parentContext Optional parent context for transformation chain\n * @param path Current path in the JSON object\n * @returns DOM Element\n */\n private jsonToNode(\n jsonObj: Record,\n doc: Document,\n parentContext?: TransformContext,\n path: string = \"\"\n ): Element | null {\n if (!jsonObj || typeof jsonObj !== \"object\") {\n return null;\n }\n\n // Get the node name (first key in the object)\n const nodeName = Object.keys(jsonObj)[0];\n if (!nodeName) {\n return null;\n }\n\n const nodeData = jsonObj[nodeName];\n \n // Update the current path\n const currentPath = path ? `${path}.${nodeName}` : nodeName;\n\n // Create element with namespace if available\n let element: Element;\n const namespaceKey = this.config.propNames.namespace;\n const prefixKey = this.config.propNames.prefix;\n const ns = nodeData[namespaceKey];\n const prefix = nodeData[prefixKey];\n\n // Create context for this node\n const context = this.transformUtil.createContext(\n 'json-to-xml',\n nodeName,\n DOMAdapter.NodeType.ELEMENT_NODE,\n {\n path: currentPath,\n namespace: ns,\n prefix: prefix,\n parent: parentContext\n }\n );\n\n if (ns && this.config.preserveNamespaces) {\n if (prefix) {\n // Create element with namespace and prefix\n element = DOMAdapter.createElementNS(ns, `${prefix}:${nodeName}`);\n } else {\n // Create element with namespace but no prefix\n element = DOMAdapter.createElementNS(ns, nodeName);\n }\n } else {\n // Create element without namespace\n element = DOMAdapter.createElement(nodeName);\n }\n\n // Process attributes if enabled\n const attributesKey = this.config.propNames.attributes;\n const valueKey = this.config.propNames.value;\n if (\n this.config.preserveAttributes &&\n nodeData[attributesKey] &&\n Array.isArray(nodeData[attributesKey])\n ) {\n nodeData[attributesKey].forEach(\n (attrObj: Record) => {\n const attrName = Object.keys(attrObj)[0];\n if (!attrName) return;\n\n const attrData = attrObj[attrName];\n \n // Create attribute context\n const attrContext = this.transformUtil.createContext(\n 'json-to-xml',\n nodeName,\n DOMAdapter.NodeType.ELEMENT_NODE,\n {\n path: `${currentPath}.${attrName}`,\n namespace: attrData[namespaceKey],\n prefix: attrData[prefixKey],\n isAttribute: true,\n attributeName: attrName,\n parent: context\n }\n );\n \n // Apply transformations to attribute value\n const transformedValue = this.transformUtil.applyTransforms(\n attrData[valueKey] || \"\",\n attrContext\n );\n \n const attrNs = attrData[namespaceKey];\n const attrPrefix = attrData[prefixKey];\n\n // Form qualified name for attribute if it has a prefix\n let qualifiedName = attrName;\n if (attrPrefix && this.config.preserveNamespaces) {\n qualifiedName = `${attrPrefix}:${attrName}`;\n }\n\n DOMAdapter.setNamespacedAttribute(\n element, \n (attrNs && this.config.preserveNamespaces) ? attrNs : null, \n qualifiedName, \n transformedValue\n );\n }\n );\n }\n\n // Process simple text value\n if (nodeData[valueKey] !== undefined) {\n // Apply transformations to text value\n const textContext = this.transformUtil.createContext(\n 'json-to-xml',\n nodeName,\n DOMAdapter.NodeType.TEXT_NODE,\n {\n path: `${currentPath}.#text`,\n namespace: ns,\n prefix: prefix,\n parent: context\n }\n );\n \n const transformedValue = this.transformUtil.applyTransforms(\n nodeData[valueKey],\n textContext\n );\n \n element.textContent = transformedValue;\n }\n\n // Process children\n const childrenKey = this.config.propNames.children;\n const cdataKey = this.config.propNames.cdata;\n const commentsKey = this.config.propNames.comments;\n const instructionKey = this.config.propNames.instruction;\n const targetKey = this.config.propNames.target;\n\n if (\n nodeData[childrenKey] &&\n Array.isArray(nodeData[childrenKey])\n ) {\n nodeData[childrenKey].forEach(\n (child: Record) => {\n // Text nodes\n if (\n child[valueKey] !== undefined &&\n this.config.preserveTextNodes\n ) {\n // Apply transformations to text node\n const textContext = this.transformUtil.createContext(\n 'json-to-xml',\n '#text',\n DOMAdapter.NodeType.TEXT_NODE,\n {\n path: `${currentPath}.#text`,\n parent: context\n }\n );\n \n const transformedText = this.transformUtil.applyTransforms(\n child[valueKey],\n textContext\n );\n \n element.appendChild(\n DOMAdapter.createTextNode(this.xmlUtil.escapeXML(transformedText))\n );\n }\n // CDATA sections\n else if (\n child[cdataKey] !== undefined &&\n this.config.preserveCDATA\n ) {\n // Apply transformations to CDATA\n const cdataContext = this.transformUtil.createContext(\n 'json-to-xml',\n '#cdata',\n DOMAdapter.NodeType.CDATA_SECTION_NODE,\n {\n path: `${currentPath}.#cdata`,\n parent: context\n }\n );\n \n const transformedCData = this.transformUtil.applyTransforms(\n child[cdataKey],\n cdataContext\n );\n \n element.appendChild(\n DOMAdapter.createCDATASection(\n transformedCData\n )\n );\n }\n // Comments\n else if (\n child[commentsKey] !== undefined &&\n this.config.preserveComments\n ) {\n element.appendChild(\n DOMAdapter.createComment(\n child[commentsKey]\n )\n );\n }\n // Processing instructions\n else if (\n child[instructionKey] !== undefined &&\n this.config.preserveProcessingInstr\n ) {\n const piData = child[instructionKey];\n const target = piData[targetKey];\n const data = piData[valueKey] || \"\";\n\n if (target) {\n element.appendChild(\n DOMAdapter.createProcessingInstruction(target, data)\n );\n }\n }\n // Element nodes (recursive)\n else {\n const childElement = this.jsonToNode(child, doc, context, currentPath);\n if (childElement) {\n element.appendChild(childElement);\n }\n }\n }\n );\n }\n\n return element;\n }\n}","/**\n * Default configuration for the XJX library\n */\nimport { Configuration } from '../types/config-types';\n\n/**\n * Default configuration\n */\nexport const DEFAULT_CONFIG: Configuration = {\n preserveNamespaces: true,\n preserveComments: true,\n preserveProcessingInstr: true,\n preserveCDATA: true,\n preserveTextNodes: true,\n preserveWhitespace: false,\n preserveAttributes: true,\n\n outputOptions: {\n prettyPrint: true,\n indent: 2,\n compact: true,\n json: {},\n xml: {\n declaration: true,\n },\n },\n\n propNames: {\n namespace: \"$ns\",\n prefix: \"$pre\",\n attributes: \"$attr\",\n value: \"$val\",\n cdata: \"$cdata\",\n comments: \"$cmnt\",\n instruction: \"$pi\", \n target: \"$trgt\", \n children: \"$children\",\n },\n};","/**\n * XJX - Facade class for XML-JSON conversion operations\n */\nimport { XmlToJsonConverter } from \"./core/converters/xml-to-json-converter\";\nimport { JsonToXmlConverter } from \"./core/converters/json-to-xml-converter\";\nimport { Configuration } from \"./core/types/config-types\";\nimport { DEFAULT_CONFIG } from \"./core/config/config\";\nimport { DOMAdapter } from \"./core/adapters/dom-adapter\";\nimport { XmlUtil } from \"./core/utils/xml-utils\";\nimport { JsonUtil } from \"./core/utils/json-utils\";\nimport { ValueTransformer } from \"./core/transformers\";\n\nexport class XJX {\n private config: Configuration;\n private xmlToJsonConverter: XmlToJsonConverter;\n private jsonToXmlConverter: JsonToXmlConverter;\n private jsonUtil: JsonUtil;\n private xmlUtil: XmlUtil;\n\n /**\n * Constructor for XJX utility\n * @param config Configuration options\n */\n constructor(config: Partial = {}) {\n // First create a jsonUtil instance with default config to use its methods\n this.jsonUtil = new JsonUtil(DEFAULT_CONFIG);\n\n // Create a deep clone of the default config\n const defaultClone = this.jsonUtil.deepClone(DEFAULT_CONFIG);\n\n // Deep merge with the provided config\n this.config = this.jsonUtil.deepMerge(defaultClone, config);\n\n // Re-initialize jsonUtil with the merged config\n this.jsonUtil = new JsonUtil(this.config);\n\n // Initialize other components\n this.xmlUtil = new XmlUtil(this.config);\n this.xmlToJsonConverter = new XmlToJsonConverter(this.config);\n this.jsonToXmlConverter = new JsonToXmlConverter(this.config);\n }\n\n /**\n * Convert XML string to JSON\n * @param xmlString XML content as string\n * @returns JSON object representing the XML content\n */\n public xmlToJson(xmlString: string): Record {\n return this.xmlToJsonConverter.convert(xmlString);\n }\n\n /**\n * Convert JSON object back to XML string\n * @param jsonObj JSON object to convert\n * @returns XML string\n */\n public jsonToXml(jsonObj: Record): string {\n return this.jsonToXmlConverter.convert(jsonObj);\n }\n\n /**\n * Pretty print an XML string\n * @param xmlString XML string to format\n * @returns Formatted XML string\n */\n public prettyPrintXml(xmlString: string): string {\n return this.xmlUtil.prettyPrintXml(xmlString);\n }\n\n /**\n * Safely retrieves a value from a JSON object using a dot-separated path.\n * @param obj The input JSON object\n * @param path The dot-separated path string (e.g., \"root.item.description.$val\")\n * @param fallback Value to return if the path does not resolve\n * @returns The value at the specified path or the fallback value\n */\n public getPath(\n obj: Record,\n path: string,\n fallback: any = undefined\n ): any {\n return this.jsonUtil.getPath(obj, path, fallback);\n }\n\n /**\n * Validate XML string\n * @param xmlString XML string to validate\n * @returns Validation result\n */\n public validateXML(xmlString: string): {\n isValid: boolean;\n message?: string;\n } {\n return this.xmlUtil.validateXML(xmlString);\n }\n\n /**\n * Generate a JSON schema based on the current configuration\n * @returns JSON schema object for validating XML-JSON documents\n */\n public generateJsonSchema(): Record {\n return this.jsonUtil.generateJsonSchema();\n }\n\n /**\n * Convert a standard JSON object to the XML-like JSON structure\n * @param obj Standard JSON object\n * @param root Optional root element configuration (string or object with properties)\n * @returns XML-like JSON object ready for conversion to XML\n */\n public objectToXJX(obj: any, root?: string | Record): Record {\n return this.jsonUtil.objectToXJX(obj, root);\n }\n\n /**\n * Generate an example JSON object that matches the current configuration\n * @param rootName Name of the root element\n * @returns Example JSON object\n */\n public generateJsonExample(rootName: string = \"root\"): Record {\n return this.jsonUtil.generateExample(rootName);\n }\n\n /**\n * Add a value transformer to the configuration\n * @param transformer Value transformer to add\n * @returns This XJX instance for chaining\n */\n public addTransformer(transformer: ValueTransformer): XJX {\n if (!this.config.valueTransforms) {\n this.config.valueTransforms = [];\n }\n this.config.valueTransforms.push(transformer);\n return this;\n }\n\n /**\n * Removes all value transformers from the configuration\n * @returns This XJX instance for chaining\n */\n public clearTransformers(): XJX {\n this.config.valueTransforms = [];\n return this;\n }\n\n /**\n * Clean up any resources\n */\n public cleanup(): void {\n DOMAdapter.cleanup();\n }\n}","/**\n * Value transformation types and base class for the XJX library\n */\nimport { Configuration } from '../types/config-types';\n\n/**\n * Direction of the transformation\n */\nexport type TransformDirection = 'xml-to-json' | 'json-to-xml';\n\n/**\n * Context provided to value transformers\n */\nexport interface TransformContext {\n // Core transformation info\n direction: TransformDirection; // Direction of the current transformation\n \n // Node information\n nodeName: string; // Name of the current node\n nodeType: number; // DOM node type (element, text, etc.)\n namespace?: string; // Namespace URI if available\n prefix?: string; // Namespace prefix if available\n \n // Structure information\n path: string; // Dot-notation path to current node\n isAttribute: boolean; // Whether the current value is from an attribute\n attributeName?: string; // Name of attribute if isAttribute is true\n \n // Parent context (creates a chain)\n parent?: TransformContext; // Reference to parent context for traversal\n \n // Configuration reference\n config: Configuration; // Reference to the current configuration\n}\n\n/**\n * Abstract base class for value transformers\n */\nexport abstract class ValueTransformer {\n /**\n * Process a value, transforming it if applicable\n * @param value Value to potentially transform\n * @param context Context including direction and other information\n * @returns Transformed value or original if not applicable\n */\n process(value: any, context: TransformContext): any {\n if (context.direction === 'xml-to-json') {\n return this.xmlToJson(value, context);\n } else {\n return this.jsonToXml(value, context);\n }\n }\n\n /**\n * Transform a value from XML to JSON representation\n * @param value Value from XML\n * @param context Transformation context\n * @returns Transformed value for JSON\n */\n protected xmlToJson(value: any, context: TransformContext): any {\n // Default implementation returns original value\n return value;\n }\n\n /**\n * Transform a value from JSON to XML representation\n * @param value Value from JSON\n * @param context Transformation context\n * @returns Transformed value for XML\n */\n protected jsonToXml(value: any, context: TransformContext): any {\n // Default implementation returns original value\n return value;\n }\n}"],"names":["XJXError","Error","constructor","message","super","this","name","NodeType","DOMAdapter","domParser","xmlSerializer","docImplementation","jsdomInstance","window","JSDOM","require","contentType","DOMParser","XMLSerializer","document","implementation","jsdomError","DOMImplementation","xmldomError","error","String","createParser","createSerializer","parseFromString","xmlString","serializeToString","node","createDocument","createElement","tagName","createElementNS","namespaceURI","qualifiedName","createTextNode","data","createCDATASection","createComment","createProcessingInstruction","target","setNamespacedAttribute","element","value","setAttributeNS","setAttribute","isNode","obj","nodeType","getNodeTypeName","ELEMENT_NODE","TEXT_NODE","CDATA_SECTION_NODE","COMMENT_NODE","PROCESSING_INSTRUCTION_NODE","getNodeAttributes","result","i","attributes","length","attr","cleanup","close","JsonUtil","config","getPath","path","fallback","segments","split","current","segment","Array","isArray","results","map","item","resolveSegment","flat","filter","v","undefined","propNames","children","namespace","prefix","cdata","comments","instruction","configKey","Object","entries","find","_","matches","child","objectToXJX","root","wrappedObject","wrapObject","elementName","attrsKey","childrenKey","nsKey","valKey","key","val","isEmpty","keys","safeStringify","indent","JSON","stringify","deepClone","parse","deepMerge","source","forEach","sourceValue","targetValue","generateJsonSchema","compact","outputOptions","preserveNamespaces","preserveComments","preserveCDATA","preserveProcessingInstr","preserveTextNodes","preserveAttributes","preserveWhitespace","requiredProps","push","elementProperties","description","type","items","patternProperties","properties","required","additionalProperties","attrProps","$ref","$schema","title","definitions","generateExample","rootName","example","id","lang","unshift","TransformUtil","applyTransforms","context","valueTransforms","transformedValue","transformer","process","createContext","direction","nodeName","options","isAttribute","attributeName","parent","XmlToJsonConverter","jsonUtil","transformUtil","convert","xmlDoc","errors","getElementsByTagName","textContent","nodeToJson","documentElement","parentContext","localName","pop","currentPath","nodeObj","ns","attrs","attrLocalName","attrContext","attrObj","childNodes","valueKey","cdataKey","commentsKey","instructionKey","targetKey","text","nodeValue","trim","textContext","transformedText","cdataContext","transformedCData","cleaned","cleanNode","cleanedArray","cleanedChild","every","XmlUtil","prettyPrintXml","INDENT","repeat","doc","serializer","level","pad","el","from","a","join","openTag","replace","pi","DOCUMENT_NODE","validateXML","isValid","ensureXMLDeclaration","startsWith","escapeXML","char","unescapeXML","match","entity","extractPrefix","colonIndex","indexOf","substring","extractLocalName","createQualifiedName","JsonToXmlConverter","xmlUtil","jsonObj","rootElement","jsonToNode","replaceChild","appendChild","xml","declaration","prettyPrint","nodeData","namespaceKey","prefixKey","attributesKey","attrName","attrData","attrNs","attrPrefix","piData","childElement","DEFAULT_CONFIG","json","XJX","defaultClone","xmlToJsonConverter","jsonToXmlConverter","xmlToJson","jsonToXml","generateJsonExample","addTransformer","clearTransformers"],"mappings":"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"} \ No newline at end of file diff --git a/dist/xjx.umd.js b/dist/xjx.umd.js new file mode 100644 index 0000000..5e15338 --- /dev/null +++ b/dist/xjx.umd.js @@ -0,0 +1,1684 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.XJX = {})); +})(this, (function (exports) { 'use strict'; + + /** + * Error classes for the XJX library + */ + /** + * Base error class + */ + class XJXError extends Error { + constructor(message) { + super(message); + this.name = 'XMLToJSONError'; + } + } + + /** + * DOM node types as an enum for better type safety + */ + var NodeType; + (function (NodeType) { + NodeType[NodeType["ELEMENT_NODE"] = 1] = "ELEMENT_NODE"; + NodeType[NodeType["ATTRIBUTE_NODE"] = 2] = "ATTRIBUTE_NODE"; + NodeType[NodeType["TEXT_NODE"] = 3] = "TEXT_NODE"; + NodeType[NodeType["CDATA_SECTION_NODE"] = 4] = "CDATA_SECTION_NODE"; + NodeType[NodeType["PROCESSING_INSTRUCTION_NODE"] = 7] = "PROCESSING_INSTRUCTION_NODE"; + NodeType[NodeType["COMMENT_NODE"] = 8] = "COMMENT_NODE"; + NodeType[NodeType["DOCUMENT_NODE"] = 9] = "DOCUMENT_NODE"; + })(NodeType || (NodeType = {})); + + /** + * DOM Environment provider with unified interface for browser and Node.js + */ + const DOMAdapter = (() => { + // Environment-specific DOM implementation + let domParser; + let xmlSerializer; + // let nodeTypes: NodeTypes; + let docImplementation; + let jsdomInstance = null; + try { + if (typeof window === "undefined") { + // Node.js environment - try JSDOM first + try { + const { JSDOM } = require("jsdom"); + jsdomInstance = new JSDOM("", { + contentType: "text/xml", + }); + domParser = jsdomInstance.window.DOMParser; + xmlSerializer = jsdomInstance.window.XMLSerializer; + // nodeTypes = { + // ELEMENT_NODE: jsdomInstance.window.Node.ELEMENT_NODE, + // TEXT_NODE: jsdomInstance.window.Node.TEXT_NODE, + // CDATA_SECTION_NODE: jsdomInstance.window.Node.CDATA_SECTION_NODE, + // COMMENT_NODE: jsdomInstance.window.Node.COMMENT_NODE, + // PROCESSING_INSTRUCTION_NODE: jsdomInstance.window.Node.PROCESSING_INSTRUCTION_NODE, + // DOCUMENT_NODE: jsdomInstance.window.Node.DOCUMENT_NODE, // Add this line + // }; + docImplementation = jsdomInstance.window.document.implementation; + } + catch (jsdomError) { + // Fall back to xmldom if JSDOM isn't available + try { + const { DOMParser, XMLSerializer, DOMImplementation } = require('@xmldom/xmldom'); + domParser = DOMParser; + xmlSerializer = XMLSerializer; + // Standard DOM node types + // nodeTypes = { + // ELEMENT_NODE: 1, + // TEXT_NODE: 3, + // CDATA_SECTION_NODE: 4, + // COMMENT_NODE: 8, + // PROCESSING_INSTRUCTION_NODE: 7, + // DOCUMENT_NODE: 9, + // }; + const implementation = new DOMImplementation(); + docImplementation = implementation; + } + catch (xmldomError) { + throw new XJXError(`Node.js environment detected but neither 'jsdom' nor '@xmldom/xmldom' are available.`); + } + } + } + else { + // Browser environment + if (!window.DOMParser) { + throw new XJXError("DOMParser is not available in this environment"); + } + if (!window.XMLSerializer) { + throw new XJXError("XMLSerializer is not available in this environment"); + } + domParser = window.DOMParser; + xmlSerializer = window.XMLSerializer; + // nodeTypes = { + // ELEMENT_NODE: Node.ELEMENT_NODE, + // TEXT_NODE: Node.TEXT_NODE, + // CDATA_SECTION_NODE: Node.CDATA_SECTION_NODE, + // COMMENT_NODE: Node.COMMENT_NODE, + // PROCESSING_INSTRUCTION_NODE: Node.PROCESSING_INSTRUCTION_NODE, + // DOCUMENT_NODE: Node.DOCUMENT_NODE, + // }; + docImplementation = document.implementation; + } + } + catch (error) { + throw new XJXError(`DOM environment initialization failed: ${error instanceof Error ? error.message : String(error)}`); + } + return { + createParser: () => { + try { + return new domParser(); + } + catch (error) { + throw new XJXError(`Failed to create DOM parser: ${error instanceof Error ? error.message : String(error)}`); + } + }, + createSerializer: () => { + try { + return new xmlSerializer(); + } + catch (error) { + throw new XJXError(`Failed to create XML serializer: ${error instanceof Error ? error.message : String(error)}`); + } + }, + NodeType, + parseFromString: (xmlString, contentType = 'text/xml') => { + try { + const parser = new domParser(); + return parser.parseFromString(xmlString, contentType); + } + catch (error) { + throw new XJXError(`Failed to parse XML: ${error instanceof Error ? error.message : String(error)}`); + } + }, + serializeToString: (node) => { + try { + const serializer = new xmlSerializer(); + return serializer.serializeToString(node); + } + catch (error) { + throw new XJXError(`Failed to serialize XML: ${error instanceof Error ? error.message : String(error)}`); + } + }, + createDocument: () => { + try { + // For browsers, create a document with a root element to avoid issues + if (typeof window !== "undefined") { + const parser = new domParser(); + return parser.parseFromString('', 'text/xml'); + } + else { + return docImplementation.createDocument(null, null, null); + } + } + catch (error) { + throw new XJXError(`Failed to create document: ${error instanceof Error ? error.message : String(error)}`); + } + }, + createElement: (tagName) => { + try { + if (typeof window !== "undefined") { + return document.createElement(tagName); + } + else { + const doc = docImplementation.createDocument(null, null, null); + return doc.createElement(tagName); + } + } + catch (error) { + throw new XJXError(`Failed to create element: ${error instanceof Error ? error.message : String(error)}`); + } + }, + createElementNS: (namespaceURI, qualifiedName) => { + try { + if (typeof window !== "undefined") { + return document.createElementNS(namespaceURI, qualifiedName); + } + else { + const doc = docImplementation.createDocument(null, null, null); + return doc.createElementNS(namespaceURI, qualifiedName); + } + } + catch (error) { + throw new XJXError(`Failed to create element with namespace: ${error instanceof Error ? error.message : String(error)}`); + } + }, + createTextNode: (data) => { + try { + if (typeof window !== "undefined") { + return document.createTextNode(data); + } + else { + const doc = docImplementation.createDocument(null, null, null); + return doc.createTextNode(data); + } + } + catch (error) { + throw new XJXError(`Failed to create text node: ${error instanceof Error ? error.message : String(error)}`); + } + }, + createCDATASection: (data) => { + try { + // For browser compatibility, use document.implementation to create CDATA + if (typeof window !== "undefined") { + const doc = document.implementation.createDocument(null, null, null); + return doc.createCDATASection(data); + } + else { + const doc = docImplementation.createDocument(null, null, null); + return doc.createCDATASection(data); + } + } + catch (error) { + throw new XJXError(`Failed to create CDATA section: ${error instanceof Error ? error.message : String(error)}`); + } + }, + createComment: (data) => { + try { + if (typeof window !== "undefined") { + return document.createComment(data); + } + else { + const doc = docImplementation.createDocument(null, null, null); + return doc.createComment(data); + } + } + catch (error) { + throw new XJXError(`Failed to create comment: ${error instanceof Error ? error.message : String(error)}`); + } + }, + createProcessingInstruction: (target, data) => { + try { + if (typeof window !== "undefined") { + const doc = document.implementation.createDocument(null, null, null); + return doc.createProcessingInstruction(target, data); + } + else { + const doc = docImplementation.createDocument(null, null, null); + return doc.createProcessingInstruction(target, data); + } + } + catch (error) { + throw new XJXError(`Failed to create processing instruction: ${error instanceof Error ? error.message : String(error)}`); + } + }, + // New helper methods + /** + * Creates a proper namespace qualified attribute + */ + setNamespacedAttribute: (element, namespaceURI, qualifiedName, value) => { + try { + if (namespaceURI) { + element.setAttributeNS(namespaceURI, qualifiedName, value); + } + else { + element.setAttribute(qualifiedName, value); + } + } + catch (error) { + throw new XJXError(`Failed to set attribute: ${error instanceof Error ? error.message : String(error)}`); + } + }, + /** + * Check if an object is a DOM node + */ + isNode: (obj) => { + try { + return obj && typeof obj === 'object' && typeof obj.nodeType === 'number'; + } + catch (error) { + return false; + } + }, + /** + * Get DOM node type as string for debugging + */ + getNodeTypeName: (nodeType) => { + switch (nodeType) { + case NodeType.ELEMENT_NODE: return 'ELEMENT_NODE'; + case NodeType.TEXT_NODE: return 'TEXT_NODE'; + case NodeType.CDATA_SECTION_NODE: return 'CDATA_SECTION_NODE'; + case NodeType.COMMENT_NODE: return 'COMMENT_NODE'; + case NodeType.PROCESSING_INSTRUCTION_NODE: return 'PROCESSING_INSTRUCTION_NODE'; + default: return `UNKNOWN_NODE_TYPE(${nodeType})`; + } + }, + /** + * Get all node attributes as an object + */ + getNodeAttributes: (node) => { + const result = {}; + for (let i = 0; i < node.attributes.length; i++) { + const attr = node.attributes[i]; + result[attr.name] = attr.value; + } + return result; + }, + // Cleanup method (mainly for JSDOM) + cleanup: () => { + if (jsdomInstance && typeof jsdomInstance.window.close === 'function') { + jsdomInstance.window.close(); + } + } + }; + })(); + + class JsonUtil { + /** + * Constructor for JSONUtil + * @param config Configuration options + */ + constructor(config) { + this.config = config; + } + /** + * Safely retrieves a value from a JSON object using a dot-separated path. + * Automatically traverses into children arrays and flattens results. + * + * @param obj The input JSON object + * @param path The dot-separated path string (e.g., "root.item.description.$val") + * @param fallback Value to return if the path does not resolve + * @returns Retrieved value or fallback + */ + getPath(obj, path, fallback) { + const segments = path.split("."); + let current = obj; + for (const segment of segments) { + if (Array.isArray(current)) { + // Apply the segment to each array element and flatten results + const results = current + .map((item) => this.resolveSegment(item, segment)) + .flat() + .filter((v) => v !== undefined); + current = results.length > 0 ? results : undefined; + } + else { + current = this.resolveSegment(current, segment); + } + if (current === undefined) + return fallback; + } + // Collapse singleton arrays + if (Array.isArray(current) && current.length === 1) { + return current[0]; + } + return current !== undefined ? current : fallback; + } + /** + * Resolves a single path segment in the context of a JSON object. + * Falls back to searching children for matching keys. + * + * @param obj The current object + * @param segment The path segment to resolve + * @returns Resolved value or undefined + */ + resolveSegment(obj, segment) { + if (obj == null || typeof obj !== "object") + return undefined; + // Direct property access + if (segment in obj) { + return obj[segment]; + } + // Check if this is a special property name that matches the config + if (segment === this.config.propNames.value || + segment === this.config.propNames.children || + segment === this.config.propNames.attributes || + segment === this.config.propNames.namespace || + segment === this.config.propNames.prefix || + segment === this.config.propNames.cdata || + segment === this.config.propNames.comments || + segment === this.config.propNames.instruction || + segment === this.config.propNames.target) { + const configKey = Object.entries(this.config.propNames).find(([_, value]) => value === segment)?.[0]; + if (configKey && obj[segment] !== undefined) { + return obj[segment]; + } + } + // Check children for objects that contain the segment + const childrenKey = this.config.propNames.children; + const children = obj[childrenKey]; + if (Array.isArray(children)) { + const matches = children + .map((child) => (segment in child ? child[segment] : undefined)) + .filter((v) => v !== undefined); + return matches.length > 0 ? matches : undefined; + } + return undefined; + } + /** + * Converts a plain JSON object to the XML-like JSON structure. + * Optionally wraps the result in a root element with attributes and namespaces. + * + * @param obj Standard JSON object + * @param root Optional root element configuration (either a string or object with $ keys) + * @returns XML-like JSON object + */ + objectToXJX(obj, root) { + const wrappedObject = this.wrapObject(obj); + if (typeof root === "string") { + // Root is a simple string: wrap result with this root tag + return { [root]: wrappedObject }; + } + if (root && typeof root === "object") { + // Handle root with config-based keys + const elementName = root.name || "root"; // Default to "root" if no name is provided + const prefix = root[this.config.propNames.prefix] || ""; + const qualifiedName = prefix ? `${prefix}:${elementName}` : elementName; + const result = { + [qualifiedName]: {}, + }; + // Add attributes to the root element if defined + const attrsKey = this.config.propNames.attributes; + if (root[attrsKey] && Array.isArray(root[attrsKey])) { + result[qualifiedName][attrsKey] = root[attrsKey]; + } + // Merge existing children with the new generated children + const childrenKey = this.config.propNames.children; + const children = root[childrenKey] ? root[childrenKey] : []; + result[qualifiedName][childrenKey] = [ + ...children, + { [elementName]: wrappedObject }, + ]; + // Add namespace and prefix if defined + const nsKey = this.config.propNames.namespace; + if (root[nsKey]) { + result[qualifiedName][nsKey] = root[nsKey]; + } + if (prefix && root[nsKey]) { + result[qualifiedName][`xmlns:${prefix}`] = root[nsKey]; + } + return result; + } + // Default behavior if no root is provided + return wrappedObject; + } + /** + * Wraps a standard JSON value in the XML-like JSON structure + * @param value Value to wrap + * @returns Wrapped value + */ + wrapObject(value) { + const valKey = this.config.propNames.value; + const childrenKey = this.config.propNames.children; + if (value === null || + typeof value === "string" || + typeof value === "number" || + typeof value === "boolean") { + return { [valKey]: value }; + } + if (Array.isArray(value)) { + // For arrays, wrap each item and return as a children-style array of repeated elements + return { + [childrenKey]: value.map((item) => { + return this.wrapObject(item); + }), + }; + } + if (typeof value === "object") { + // It's an object: wrap its properties in children + const children = Object.entries(value).map(([key, val]) => ({ + [key]: this.wrapObject(val), + })); + return { [childrenKey]: children }; + } + return undefined; // Fallback for unhandled types + } + /** + * Check if an object is empty + * @param value Value to check + * @returns true if empty + */ + isEmpty(value) { + if (value == null) + return true; + if (Array.isArray(value)) + return value.length === 0; + if (typeof value === "object") + return Object.keys(value).length === 0; + return false; + } + /** + * Safely stringify JSON for debugging + * @param obj Object to stringify + * @param indent Optional indentation level + * @returns JSON string representation + */ + safeStringify(obj, indent = 2) { + try { + return JSON.stringify(obj, null, indent); + } + catch (error) { + return "[Cannot stringify object]"; + } + } + /** + * Deep clone an object + * @param obj Object to clone + * @returns Cloned object + */ + deepClone(obj) { + try { + return JSON.parse(JSON.stringify(obj)); + } + catch (error) { + throw new Error(`Failed to deep clone object: ${error instanceof Error ? error.message : String(error)}`); + } + } + /** + * Deep merge two objects with proper type handling + * @param target Target object + * @param source Source object + * @returns Merged object (target is modified) + */ + deepMerge(target, source) { + if (!source || typeof source !== "object" || source === null) { + return target; + } + if (!target || typeof target !== "object" || target === null) { + return source; + } + Object.keys(source).forEach((key) => { + const sourceValue = source[key]; + const targetValue = target[key]; + // If both source and target values are objects, recursively merge them + if (sourceValue !== null && + targetValue !== null && + typeof sourceValue === "object" && + typeof targetValue === "object" && + !Array.isArray(sourceValue) && + !Array.isArray(targetValue)) { + // Recursively merge the nested objects + target[key] = this.deepMerge(targetValue, sourceValue); + } + else { + // Otherwise just replace the value + target[key] = sourceValue; + } + }); + return target; + } + /** + * Generates a JSON schema that matches the current configuration + * @returns JSON schema object + */ + generateJsonSchema() { + try { + const propNames = this.config.propNames; + const compact = this.config.outputOptions.compact || false; + const preserveNamespaces = this.config.preserveNamespaces; + const preserveComments = this.config.preserveComments; + const preserveCDATA = this.config.preserveCDATA; + const preserveProcessingInstr = this.config.preserveProcessingInstr; + const preserveTextNodes = this.config.preserveTextNodes; + const preserveWhitespace = this.config.preserveWhitespace; + const preserveAttributes = this.config.preserveAttributes; + // Determine which properties are required based on the configuration + const requiredProps = []; + if (!compact) { + // Only add collections as required if they're preserved in the config + if (preserveAttributes) + requiredProps.push(propNames.attributes); + if (preserveCDATA) + requiredProps.push(propNames.cdata); + if (preserveComments) + requiredProps.push(propNames.comments); + if (preserveProcessingInstr) + requiredProps.push(propNames.instruction); + requiredProps.push(propNames.children); + if (preserveTextNodes) { + requiredProps.push(propNames.value); + if (preserveNamespaces) { + requiredProps.push(propNames.namespace); + // Note: prefix is not required as it may not be present for all elements + } + } + } + // Create schema for element properties + const elementProperties = {}; + // Add namespace property if preserving namespaces + if (preserveNamespaces) { + elementProperties[propNames.namespace] = { + description: "Namespace URI of the element", + type: "string", + }; + // Add prefix property if preserving namespaces + elementProperties[propNames.prefix] = { + description: "Namespace prefix of the element", + type: "string", + }; + } + // Add value property if preserving text nodes + if (preserveTextNodes) { + elementProperties[propNames.value] = { + description: "Text content of the element", + type: "string", + }; + } + // Add attributes property + if (preserveAttributes) { + elementProperties[propNames.attributes] = { + description: "Element attributes", + type: "array", + items: { + type: "object", + patternProperties: { + "^.*$": { + type: "object", + properties: { + [propNames.value]: { + description: "Attribute value", + type: "string", + }, + }, + required: [propNames.value], + }, + }, + additionalProperties: false, + }, + }; + // If preserving namespaces, add namespace properties to attribute schema + if (preserveNamespaces) { + const attrProps = elementProperties[propNames.attributes].items.patternProperties["^.*$"].properties; + attrProps[propNames.namespace] = { + description: "Namespace URI of the attribute", + type: "string", + }; + attrProps[propNames.prefix] = { + description: "Namespace prefix of the attribute", + type: "string", + }; + } + } + // Add CDATA property if preserving CDATA + if (preserveCDATA) { + elementProperties[propNames.cdata] = { + description: "CDATA section content", + type: "string", + }; + } + // Add comments property if preserving comments + if (preserveComments) { + elementProperties[propNames.comments] = { + description: "Comment content", + type: "string", + }; + } + // Add processing instructions property if preserving them + if (preserveProcessingInstr) { + elementProperties[propNames.instruction] = { + description: "Processing instruction", + type: "object", + properties: { + [propNames.target]: { + description: "Processing instruction target", + type: "string", + }, + [propNames.value]: { + description: "Processing instruction content", + type: "string", + }, + }, + required: [propNames.target], + }; + } + // Add children property with recursive schema + elementProperties[propNames.children] = { + description: "Child elements", + type: "array", + items: { + type: "object", + patternProperties: { + "^.*$": { + $ref: "#/definitions/element", + }, + }, + additionalProperties: false, + }, + }; + // Create element definition (will be referenced recursively) + const elementDefinition = { + type: "object", + properties: elementProperties, + required: requiredProps, + additionalProperties: false, + }; + // Build the complete schema + const schema = { + $schema: "https://json-schema.org/draft/2020-12/schema", + title: "XJX JSON Schema", + description: "Schema for JSON representation of XML documents using the XJX library", + type: "object", + patternProperties: { + "^.*$": { + $ref: "#/definitions/element", + }, + }, + additionalProperties: false, + definitions: { + element: elementDefinition, + }, + }; + return schema; + } + catch (error) { + throw new Error(`Schema generation failed: ${error instanceof Error ? error.message : String(error)}`); + } + } + /** + * Generate an example JSON object based on the schema + * @param {string} rootName - Name of the root element + * @returns {Record} - Example JSON object + */ + generateExample(rootName = "root") { + const propNames = this.config.propNames; + const preserveNamespaces = this.config.preserveNamespaces; + const preserveComments = this.config.preserveComments; + const preserveCDATA = this.config.preserveCDATA; + const preserveProcessingInstr = this.config.preserveProcessingInstr; + const preserveAttributes = this.config.preserveAttributes; + // Simple example with common features + const example = { + [rootName]: { + [propNames.value]: "Root content", + [propNames.children]: [ + { + child: { + [propNames.value]: "Child content", + }, + }, + ], + }, + }; + // Add namespace properties if enabled + if (preserveNamespaces) { + example[rootName][propNames.namespace] = "http://example.org/ns"; + example[rootName][propNames.prefix] = "ex"; + example[rootName][propNames.children][0].child[propNames.namespace] = + "http://example.org/ns"; + example[rootName][propNames.children][0].child[propNames.prefix] = "ex"; + } + // Add attributes if enabled + if (preserveAttributes) { + example[rootName][propNames.attributes] = [ + { id: { [propNames.value]: "root-1" } }, + { lang: { [propNames.value]: "en" } }, + ]; + if (preserveNamespaces) { + example[rootName][propNames.attributes][1].lang[propNames.prefix] = + "xml"; + } + example[rootName][propNames.children][0].child[propNames.attributes] = [ + { id: { [propNames.value]: "child-1" } }, + ]; + } + // Add CDATA if enabled + if (preserveCDATA) { + example[rootName][propNames.children][0].child[propNames.children] = [ + { [propNames.cdata]: "Raw content" }, + ]; + } + // Add comments if enabled + if (preserveComments) { + if (!example[rootName][propNames.children][0].child[propNames.children]) { + example[rootName][propNames.children][0].child[propNames.children] = []; + } + example[rootName][propNames.children][0].child[propNames.children].push({ + [propNames.comments]: "Comment about the child", + }); + } + // Add processing instruction if enabled + if (preserveProcessingInstr) { + if (!example[rootName][propNames.children]) { + example[rootName][propNames.children] = []; + } + example[rootName][propNames.children].unshift({ + [propNames.instruction]: { + [propNames.target]: "xml-stylesheet", + [propNames.value]: 'type="text/css" href="style.css"', + }, + }); + } + return example; + } + } + + /** + * Utility for applying value transformations + */ + class TransformUtil { + /** + * Create a new TransformUtil + * @param config Configuration + */ + constructor(config) { + this.config = config; + } + /** + * Apply transforms to a value + * @param value Value to transform + * @param context Transformation context + * @returns Transformed value + */ + applyTransforms(value, context) { + // Skip transformation if no transformers are configured + if (!this.config.valueTransforms || this.config.valueTransforms.length === 0) { + return value; + } + // Apply each transformer in sequence + let transformedValue = value; + for (const transformer of this.config.valueTransforms) { + transformedValue = transformer.process(transformedValue, context); + } + return transformedValue; + } + /** + * Create a transform context + * @param direction Direction of transformation + * @param nodeName Name of the current node + * @param nodeType DOM node type + * @param options Additional context options + * @returns Transform context + */ + createContext(direction, nodeName, nodeType, options = {}) { + return { + direction, + nodeName, + nodeType, + path: options.path || nodeName, + namespace: options.namespace, + prefix: options.prefix, + isAttribute: options.isAttribute || false, + attributeName: options.attributeName, + parent: options.parent, + config: this.config, + }; + } + /** + * Get a user-friendly node type name for debugging + * @param nodeType DOM node type + * @returns String representation of node type + */ + getNodeTypeName(nodeType) { + return DOMAdapter.getNodeTypeName(nodeType); + } + } + + /** + * XmlToJsonConverter Parser for converting XML to JSON + */ + class XmlToJsonConverter { + /** + * Constructor for XmlToJsonConverter + * @param config Configuration options + */ + constructor(config) { + this.config = config; + this.jsonUtil = new JsonUtil(this.config); + this.transformUtil = new TransformUtil(this.config); + } + /** + * Convert XML string to JSON + * @param xmlString XML content as string + * @returns JSON object representing the XML content + */ + convert(xmlString) { + try { + const xmlDoc = DOMAdapter.parseFromString(xmlString, "text/xml"); + // Check for parsing errors + const errors = xmlDoc.getElementsByTagName("parsererror"); + if (errors.length > 0) { + throw new XJXError(`XML parsing error: ${errors[0].textContent}`); + } + return this.nodeToJson(xmlDoc.documentElement); + } + catch (error) { + throw new XJXError(`Failed to convert XML to JSON: ${error instanceof Error ? error.message : String(error)}`); + } + } + /** + * Convert a DOM node to JSON representation + * @param node DOM node to convert + * @param parentContext Optional parent context for transformation chain + * @param path Current path in the XML tree + * @returns JSON representation of the node + */ + nodeToJson(node, parentContext, path = "") { + const result = {}; + // Handle element nodes + if (node.nodeType === DOMAdapter.NodeType.ELEMENT_NODE) { + const element = node; + // Use localName instead of nodeName to strip namespace prefix + const nodeName = element.localName || + element.nodeName.split(":").pop() || + element.nodeName; + // Update the current path + const currentPath = path ? `${path}.${nodeName}` : nodeName; + const nodeObj = {}; + // Create context for this node + const context = this.transformUtil.createContext('xml-to-json', nodeName, node.nodeType, { + path: currentPath, + namespace: element.namespaceURI || undefined, + prefix: element.prefix || undefined, + parent: parentContext + }); + // Process namespaces if enabled + if (this.config.preserveNamespaces) { + const ns = element.namespaceURI; + if (ns) { + nodeObj[this.config.propNames.namespace] = ns; + } + const prefix = element.prefix; + if (prefix) { + nodeObj[this.config.propNames.prefix] = prefix; + } + } + // Process attributes if enabled + if (this.config.preserveAttributes && element.attributes.length > 0) { + const attrs = []; + for (let i = 0; i < element.attributes.length; i++) { + const attr = element.attributes[i]; + // Strip namespace prefix from attribute name + const attrLocalName = attr.localName || attr.name.split(":").pop() || attr.name; + // Create attribute context + const attrContext = this.transformUtil.createContext('xml-to-json', nodeName, node.nodeType, { + path: `${currentPath}.${attrLocalName}`, + namespace: attr.namespaceURI || undefined, + prefix: attr.prefix || undefined, + isAttribute: true, + attributeName: attrLocalName, + parent: context + }); + // Apply transformations to attribute value + const transformedValue = this.transformUtil.applyTransforms(attr.value, attrContext); + // Create attribute object with consistent structure + const attrObj = { + [attrLocalName]: { + [this.config.propNames.value]: transformedValue, + }, + }; + // Add namespace info for attribute if present and enabled + if (this.config.preserveNamespaces) { + // Handle attribute namespace + if (attr.namespaceURI) { + attrObj[attrLocalName][this.config.propNames.namespace] = + attr.namespaceURI; + } + // Handle attribute prefix + if (attr.prefix) { + attrObj[attrLocalName][this.config.propNames.prefix] = + attr.prefix; + } + } + attrs.push(attrObj); + } + if (attrs.length > 0) { + nodeObj[this.config.propNames.attributes] = attrs; + } + } + // Process child nodes + if (element.childNodes.length > 0) { + const children = []; + const childrenKey = this.config.propNames.children; + const valueKey = this.config.propNames.value; + const cdataKey = this.config.propNames.cdata; + const commentsKey = this.config.propNames.comments; + const instructionKey = this.config.propNames.instruction; + const targetKey = this.config.propNames.target; + for (let i = 0; i < element.childNodes.length; i++) { + const child = element.childNodes[i]; + // Text nodes - only process if preserveTextNodes is true + if (child.nodeType === DOMAdapter.NodeType.TEXT_NODE) { + if (this.config.preserveTextNodes) { + let text = child.nodeValue || ""; + // Skip whitespace-only text nodes if whitespace preservation is disabled + if (!this.config.preserveWhitespace) { + if (text.trim() === "") { + continue; + } + // Trim the text when preserveWhitespace is false + text = text.trim(); + } + // Create text node context + const textContext = this.transformUtil.createContext('xml-to-json', '#text', child.nodeType, { + path: `${currentPath}.#text`, + parent: context + }); + // Apply transformations to text value + const transformedText = this.transformUtil.applyTransforms(text, textContext); + children.push({ [valueKey]: transformedText }); + } + } + // CDATA sections + else if (child.nodeType === DOMAdapter.NodeType.CDATA_SECTION_NODE && + this.config.preserveCDATA) { + // Create CDATA context + const cdataContext = this.transformUtil.createContext('xml-to-json', '#cdata', child.nodeType, { + path: `${currentPath}.#cdata`, + parent: context + }); + // Apply transformations to CDATA value + const transformedCData = this.transformUtil.applyTransforms(child.nodeValue || "", cdataContext); + children.push({ + [cdataKey]: transformedCData, + }); + } + // Comments + else if (child.nodeType === DOMAdapter.NodeType.COMMENT_NODE && + this.config.preserveComments) { + children.push({ + [commentsKey]: child.nodeValue || "", + }); + } + // Processing instructions + else if (child.nodeType === + DOMAdapter.NodeType.PROCESSING_INSTRUCTION_NODE && + this.config.preserveProcessingInstr) { + children.push({ + [instructionKey]: { + [targetKey]: child.nodeName, + [valueKey]: child.nodeValue || "", + }, + }); + } + // Element nodes (recursive) + else if (child.nodeType === DOMAdapter.NodeType.ELEMENT_NODE) { + children.push(this.nodeToJson(child, context, currentPath)); + } + } + if (children.length > 0) { + nodeObj[childrenKey] = children; + } + } + // Apply compact option - remove empty properties if enabled + if (this.config.outputOptions.compact) { + Object.keys(nodeObj).forEach((key) => { + const cleaned = this.cleanNode(nodeObj[key]); + if (cleaned === undefined) { + delete nodeObj[key]; + } + else { + nodeObj[key] = cleaned; + } + }); + } + result[nodeName] = nodeObj; + } + return result; + } + cleanNode(node) { + if (Array.isArray(node)) { + // Clean each item in the array and filter out empty ones + const cleanedArray = node + .map((item) => this.cleanNode(item)) + .filter((item) => { + return !(item === null || + item === undefined || + (typeof item === "object" && Object.keys(item).length === 0)); + }); + return cleanedArray.length > 0 ? cleanedArray : undefined; + } + else if (typeof node === "object" && node !== null) { + // Clean properties recursively + Object.keys(node).forEach((key) => { + const cleanedChild = this.cleanNode(node[key]); + if (cleanedChild === null || + cleanedChild === undefined || + (Array.isArray(cleanedChild) && cleanedChild.length === 0) || + (typeof cleanedChild === "object" && + Object.keys(cleanedChild).length === 0)) { + delete node[key]; + } + else { + node[key] = cleanedChild; + } + }); + // Handle the special case for nodes with only empty children/attributes + const childrenKey = this.config.propNames.children; + const attrsKey = this.config.propNames.attributes; + const keys = Object.keys(node); + if (keys.every((key) => key === childrenKey || key === attrsKey) && + (node[childrenKey] === undefined || + this.jsonUtil.isEmpty(node[childrenKey])) && + (node[attrsKey] === undefined || this.jsonUtil.isEmpty(node[attrsKey]))) { + return undefined; + } + return Object.keys(node).length > 0 ? node : undefined; + } + return node; + } + } + + /** + * XMLUtil - Utility functions for XML processing + */ + class XmlUtil { + /** + * Constructor for XMLUtil + * @param config Configuration options + */ + constructor(config) { + this.config = config; + } + /** + * Pretty print an XML string + * @param xmlString XML string to format + * @returns Formatted XML string + */ + prettyPrintXml(xmlString) { + const indent = this.config.outputOptions.indent; + const INDENT = " ".repeat(indent); + try { + const doc = DOMAdapter.parseFromString(xmlString, "text/xml"); + const serializer = (node, level = 0) => { + const pad = INDENT.repeat(level); + switch (node.nodeType) { + case DOMAdapter.NodeType.ELEMENT_NODE: { + const el = node; + const tagName = el.tagName; + const attrs = Array.from(el.attributes) + .map((a) => `${a.name}="${a.value}"`) + .join(" "); + const openTag = attrs ? `<${tagName} ${attrs}>` : `<${tagName}>`; + const children = Array.from(el.childNodes); + if (children.length === 0) { + return `${pad}${openTag.replace(/>$/, " />")}\n`; + } + // Single text node: print inline + if (children.length === 0 || + (children.length === 1 && + children[0].nodeType === DOMAdapter.NodeType.TEXT_NODE && + children[0].textContent?.trim() === "")) { + // Empty or whitespace-only + return `${pad}<${tagName}${attrs ? " " + attrs : ""}>\n`; + } + const inner = children + .map((child) => serializer(child, level + 1)) + .join(""); + return `${pad}${openTag}\n${inner}${pad}\n`; + } + case DOMAdapter.NodeType.TEXT_NODE: { + const text = node.textContent?.trim(); + return text ? `${pad}${text}\n` : ""; + } + case DOMAdapter.NodeType.CDATA_SECTION_NODE: + return `${pad}\n`; + case DOMAdapter.NodeType.COMMENT_NODE: + return `${pad}\n`; + case DOMAdapter.NodeType.PROCESSING_INSTRUCTION_NODE: + const pi = node; + return `${pad}\n`; + case DOMAdapter.NodeType.DOCUMENT_NODE: + return Array.from(node.childNodes) + .map((child) => serializer(child, level)) + .join(""); + default: + return ""; + } + }; + return serializer(doc).trim(); + } + catch (error) { + throw new XJXError(`Failed to pretty print XML: ${error instanceof Error ? error.message : String(error)}`); + } + } + /** + * Check if XML string is well-formed + * @param xmlString XML string to validate + * @returns Object with validation result and any error messages + */ + validateXML(xmlString) { + try { + const doc = DOMAdapter.parseFromString(xmlString, "text/xml"); + const errors = doc.getElementsByTagName("parsererror"); + if (errors.length > 0) { + return { + isValid: false, + message: errors[0].textContent || "Unknown parsing error", + }; + } + return { isValid: true }; + } + catch (error) { + return { + isValid: false, + message: error instanceof Error ? error.message : String(error), + }; + } + } + /** + * Add XML declaration to a string if missing + * @param xmlString XML string + * @returns XML string with declaration + */ + ensureXMLDeclaration(xmlString) { + if (!xmlString.trim().startsWith("\n' + xmlString; + } + return xmlString; + } + /** + * Escapes special characters in text for safe XML usage. + * @param text Text to escape. + * @returns Escaped XML string. + */ + escapeXML(text) { + if (typeof text !== "string" || text.length === 0) { + return ""; + } + return text.replace(/[&<>"']/g, (char) => { + switch (char) { + case "&": + return "&"; + case "<": + return "<"; + case ">": + return ">"; + case '"': + return """; + case "'": + return "'"; + default: + return char; + } + }); + } + /** + * Unescapes XML entities back to their character equivalents. + * @param text Text with XML entities. + * @returns Unescaped text. + */ + unescapeXML(text) { + if (typeof text !== "string" || text.length === 0) { + return ""; + } + return text.replace(/&(amp|lt|gt|quot|apos);/g, (match, entity) => { + switch (entity) { + case "amp": + return "&"; + case "lt": + return "<"; + case "gt": + return ">"; + case "quot": + return '"'; + case "apos": + return "'"; + default: + return match; + } + }); + } + /** + * Extract the namespace prefix from a qualified name + * @param qualifiedName Qualified name (e.g., "ns:element") + * @returns Prefix or null if no prefix + */ + extractPrefix(qualifiedName) { + const colonIndex = qualifiedName.indexOf(":"); + return colonIndex > 0 ? qualifiedName.substring(0, colonIndex) : null; + } + /** + * Extract the local name from a qualified name + * @param qualifiedName Qualified name (e.g., "ns:element") + * @returns Local name + */ + extractLocalName(qualifiedName) { + const colonIndex = qualifiedName.indexOf(":"); + return colonIndex > 0 + ? qualifiedName.substring(colonIndex + 1) + : qualifiedName; + } + /** + * Create a qualified name from prefix and local name + * @param prefix Namespace prefix (can be null) + * @param localName Local name + * @returns Qualified name + */ + createQualifiedName(prefix, localName) { + return prefix ? `${prefix}:${localName}` : localName; + } + } + + /** + * JsonToXmlConverter for converting JSON to XML + */ + class JsonToXmlConverter { + /** + * Constructor for JsonToXmlConverter + * @param config Configuration options + */ + constructor(config) { + this.config = config; + this.xmlUtil = new XmlUtil(this.config); + this.transformUtil = new TransformUtil(this.config); + } + /** + * Convert JSON object to XML string + * @param jsonObj JSON object to convert + * @returns XML string + */ + convert(jsonObj) { + try { + const doc = DOMAdapter.createDocument(); + const rootElement = this.jsonToNode(jsonObj, doc); + if (rootElement) { + // Handle the temporary root element if it exists + if (doc.documentElement && doc.documentElement.nodeName === "temp") { + doc.replaceChild(rootElement, doc.documentElement); + } + else { + doc.appendChild(rootElement); + } + } + // Add XML declaration if specified + let xmlString = DOMAdapter.serializeToString(doc); + // remove xhtml decl inserted by dom + xmlString = xmlString.replace(' xmlns="http://www.w3.org/1999/xhtml"', ''); + if (this.config.outputOptions.xml.declaration) { + xmlString = this.xmlUtil.ensureXMLDeclaration(xmlString); + } + // Apply pretty printing if enabled + if (this.config.outputOptions.prettyPrint) { + xmlString = this.xmlUtil.prettyPrintXml(xmlString); + } + return xmlString; + } + catch (error) { + throw new XJXError(`Failed to convert JSON to XML: ${error instanceof Error ? error.message : String(error)}`); + } + } + /** + * Convert JSON object to DOM node + * @param jsonObj JSON object to convert + * @param doc Document for creating elements + * @param parentContext Optional parent context for transformation chain + * @param path Current path in the JSON object + * @returns DOM Element + */ + jsonToNode(jsonObj, doc, parentContext, path = "") { + if (!jsonObj || typeof jsonObj !== "object") { + return null; + } + // Get the node name (first key in the object) + const nodeName = Object.keys(jsonObj)[0]; + if (!nodeName) { + return null; + } + const nodeData = jsonObj[nodeName]; + // Update the current path + const currentPath = path ? `${path}.${nodeName}` : nodeName; + // Create element with namespace if available + let element; + const namespaceKey = this.config.propNames.namespace; + const prefixKey = this.config.propNames.prefix; + const ns = nodeData[namespaceKey]; + const prefix = nodeData[prefixKey]; + // Create context for this node + const context = this.transformUtil.createContext('json-to-xml', nodeName, DOMAdapter.NodeType.ELEMENT_NODE, { + path: currentPath, + namespace: ns, + prefix: prefix, + parent: parentContext + }); + if (ns && this.config.preserveNamespaces) { + if (prefix) { + // Create element with namespace and prefix + element = DOMAdapter.createElementNS(ns, `${prefix}:${nodeName}`); + } + else { + // Create element with namespace but no prefix + element = DOMAdapter.createElementNS(ns, nodeName); + } + } + else { + // Create element without namespace + element = DOMAdapter.createElement(nodeName); + } + // Process attributes if enabled + const attributesKey = this.config.propNames.attributes; + const valueKey = this.config.propNames.value; + if (this.config.preserveAttributes && + nodeData[attributesKey] && + Array.isArray(nodeData[attributesKey])) { + nodeData[attributesKey].forEach((attrObj) => { + const attrName = Object.keys(attrObj)[0]; + if (!attrName) + return; + const attrData = attrObj[attrName]; + // Create attribute context + const attrContext = this.transformUtil.createContext('json-to-xml', nodeName, DOMAdapter.NodeType.ELEMENT_NODE, { + path: `${currentPath}.${attrName}`, + namespace: attrData[namespaceKey], + prefix: attrData[prefixKey], + isAttribute: true, + attributeName: attrName, + parent: context + }); + // Apply transformations to attribute value + const transformedValue = this.transformUtil.applyTransforms(attrData[valueKey] || "", attrContext); + const attrNs = attrData[namespaceKey]; + const attrPrefix = attrData[prefixKey]; + // Form qualified name for attribute if it has a prefix + let qualifiedName = attrName; + if (attrPrefix && this.config.preserveNamespaces) { + qualifiedName = `${attrPrefix}:${attrName}`; + } + DOMAdapter.setNamespacedAttribute(element, (attrNs && this.config.preserveNamespaces) ? attrNs : null, qualifiedName, transformedValue); + }); + } + // Process simple text value + if (nodeData[valueKey] !== undefined) { + // Apply transformations to text value + const textContext = this.transformUtil.createContext('json-to-xml', nodeName, DOMAdapter.NodeType.TEXT_NODE, { + path: `${currentPath}.#text`, + namespace: ns, + prefix: prefix, + parent: context + }); + const transformedValue = this.transformUtil.applyTransforms(nodeData[valueKey], textContext); + element.textContent = transformedValue; + } + // Process children + const childrenKey = this.config.propNames.children; + const cdataKey = this.config.propNames.cdata; + const commentsKey = this.config.propNames.comments; + const instructionKey = this.config.propNames.instruction; + const targetKey = this.config.propNames.target; + if (nodeData[childrenKey] && + Array.isArray(nodeData[childrenKey])) { + nodeData[childrenKey].forEach((child) => { + // Text nodes + if (child[valueKey] !== undefined && + this.config.preserveTextNodes) { + // Apply transformations to text node + const textContext = this.transformUtil.createContext('json-to-xml', '#text', DOMAdapter.NodeType.TEXT_NODE, { + path: `${currentPath}.#text`, + parent: context + }); + const transformedText = this.transformUtil.applyTransforms(child[valueKey], textContext); + element.appendChild(DOMAdapter.createTextNode(this.xmlUtil.escapeXML(transformedText))); + } + // CDATA sections + else if (child[cdataKey] !== undefined && + this.config.preserveCDATA) { + // Apply transformations to CDATA + const cdataContext = this.transformUtil.createContext('json-to-xml', '#cdata', DOMAdapter.NodeType.CDATA_SECTION_NODE, { + path: `${currentPath}.#cdata`, + parent: context + }); + const transformedCData = this.transformUtil.applyTransforms(child[cdataKey], cdataContext); + element.appendChild(DOMAdapter.createCDATASection(transformedCData)); + } + // Comments + else if (child[commentsKey] !== undefined && + this.config.preserveComments) { + element.appendChild(DOMAdapter.createComment(child[commentsKey])); + } + // Processing instructions + else if (child[instructionKey] !== undefined && + this.config.preserveProcessingInstr) { + const piData = child[instructionKey]; + const target = piData[targetKey]; + const data = piData[valueKey] || ""; + if (target) { + element.appendChild(DOMAdapter.createProcessingInstruction(target, data)); + } + } + // Element nodes (recursive) + else { + const childElement = this.jsonToNode(child, doc, context, currentPath); + if (childElement) { + element.appendChild(childElement); + } + } + }); + } + return element; + } + } + + /** + * Default configuration + */ + const DEFAULT_CONFIG = { + preserveNamespaces: true, + preserveComments: true, + preserveProcessingInstr: true, + preserveCDATA: true, + preserveTextNodes: true, + preserveWhitespace: false, + preserveAttributes: true, + outputOptions: { + prettyPrint: true, + indent: 2, + compact: true, + json: {}, + xml: { + declaration: true, + }, + }, + propNames: { + namespace: "$ns", + prefix: "$pre", + attributes: "$attr", + value: "$val", + cdata: "$cdata", + comments: "$cmnt", + instruction: "$pi", + target: "$trgt", + children: "$children", + }, + }; + + /** + * XJX - Facade class for XML-JSON conversion operations + */ + class XJX { + /** + * Constructor for XJX utility + * @param config Configuration options + */ + constructor(config = {}) { + // First create a jsonUtil instance with default config to use its methods + this.jsonUtil = new JsonUtil(DEFAULT_CONFIG); + // Create a deep clone of the default config + const defaultClone = this.jsonUtil.deepClone(DEFAULT_CONFIG); + // Deep merge with the provided config + this.config = this.jsonUtil.deepMerge(defaultClone, config); + // Re-initialize jsonUtil with the merged config + this.jsonUtil = new JsonUtil(this.config); + // Initialize other components + this.xmlUtil = new XmlUtil(this.config); + this.xmlToJsonConverter = new XmlToJsonConverter(this.config); + this.jsonToXmlConverter = new JsonToXmlConverter(this.config); + } + /** + * Convert XML string to JSON + * @param xmlString XML content as string + * @returns JSON object representing the XML content + */ + xmlToJson(xmlString) { + return this.xmlToJsonConverter.convert(xmlString); + } + /** + * Convert JSON object back to XML string + * @param jsonObj JSON object to convert + * @returns XML string + */ + jsonToXml(jsonObj) { + return this.jsonToXmlConverter.convert(jsonObj); + } + /** + * Pretty print an XML string + * @param xmlString XML string to format + * @returns Formatted XML string + */ + prettyPrintXml(xmlString) { + return this.xmlUtil.prettyPrintXml(xmlString); + } + /** + * Safely retrieves a value from a JSON object using a dot-separated path. + * @param obj The input JSON object + * @param path The dot-separated path string (e.g., "root.item.description.$val") + * @param fallback Value to return if the path does not resolve + * @returns The value at the specified path or the fallback value + */ + getPath(obj, path, fallback = undefined) { + return this.jsonUtil.getPath(obj, path, fallback); + } + /** + * Validate XML string + * @param xmlString XML string to validate + * @returns Validation result + */ + validateXML(xmlString) { + return this.xmlUtil.validateXML(xmlString); + } + /** + * Generate a JSON schema based on the current configuration + * @returns JSON schema object for validating XML-JSON documents + */ + generateJsonSchema() { + return this.jsonUtil.generateJsonSchema(); + } + /** + * Convert a standard JSON object to the XML-like JSON structure + * @param obj Standard JSON object + * @param root Optional root element configuration (string or object with properties) + * @returns XML-like JSON object ready for conversion to XML + */ + objectToXJX(obj, root) { + return this.jsonUtil.objectToXJX(obj, root); + } + /** + * Generate an example JSON object that matches the current configuration + * @param rootName Name of the root element + * @returns Example JSON object + */ + generateJsonExample(rootName = "root") { + return this.jsonUtil.generateExample(rootName); + } + /** + * Add a value transformer to the configuration + * @param transformer Value transformer to add + * @returns This XJX instance for chaining + */ + addTransformer(transformer) { + if (!this.config.valueTransforms) { + this.config.valueTransforms = []; + } + this.config.valueTransforms.push(transformer); + return this; + } + /** + * Removes all value transformers from the configuration + * @returns This XJX instance for chaining + */ + clearTransformers() { + this.config.valueTransforms = []; + return this; + } + /** + * Clean up any resources + */ + cleanup() { + DOMAdapter.cleanup(); + } + } + + /** + * Abstract base class for value transformers + */ + class ValueTransformer { + /** + * Process a value, transforming it if applicable + * @param value Value to potentially transform + * @param context Context including direction and other information + * @returns Transformed value or original if not applicable + */ + process(value, context) { + if (context.direction === 'xml-to-json') { + return this.xmlToJson(value, context); + } + else { + return this.jsonToXml(value, context); + } + } + /** + * Transform a value from XML to JSON representation + * @param value Value from XML + * @param context Transformation context + * @returns Transformed value for JSON + */ + xmlToJson(value, context) { + // Default implementation returns original value + return value; + } + /** + * Transform a value from JSON to XML representation + * @param value Value from JSON + * @param context Transformation context + * @returns Transformed value for XML + */ + jsonToXml(value, context) { + // Default implementation returns original value + return value; + } + } + + // Import locally so you can use it below + + exports.DEFAULT_CONFIG = DEFAULT_CONFIG; + exports.ValueTransformer = ValueTransformer; + exports.XJX = XJX; + exports.XJXError = XJXError; + exports.default = XJX; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); +//# sourceMappingURL=xjx.umd.js.map diff --git a/dist/xjx.umd.js.map b/dist/xjx.umd.js.map new file mode 100644 index 0000000..cbb1809 --- /dev/null +++ b/dist/xjx.umd.js.map @@ -0,0 +1 @@ +{"version":3,"file":"xjx.umd.js","sources":["../../src/core/types/error-types.ts","../../src/core/types/dom-types.ts","../../src/core/adapters/dom-adapter.ts","../../src/core/utils/json-utils.ts","../../src/core/transformers/TransformUtil.ts","../../src/core/converters/xml-to-json-converter.ts","../../src/core/utils/xml-utils.ts","../../src/core/converters/json-to-xml-converter.ts","../../src/core/config/config.ts","../../src/XJX.ts","../../src/core/transformers/ValueTransformer.ts","../../src/index.ts"],"sourcesContent":["/**\n * Error classes for the XJX library\n */\n\n/**\n * Base error class\n */\nexport class XJXError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'XMLToJSONError';\n }\n}\n\n/**\n * Error for XML parsing issues\n */\nexport class XmlToJsonError extends XJXError {\n constructor(message: string) {\n super(`XML parse error: ${message}`);\n this.name = 'XmlToJsonError';\n }\n}\n\n/**\n * Error for XML serialization issues\n */\nexport class JsonToXmlError extends XJXError {\n constructor(message: string) {\n super(`XML serialization error: ${message}`);\n this.name = 'JsonToXmlError';\n }\n}\n\n/**\n * Error for environment incompatibility\n */\nexport class EnvironmentError extends XJXError {\n constructor(message: string) {\n super(`Environment error: ${message}`);\n this.name = 'EnvironmentError';\n }\n}\n\n/**\n * Error for invalid configuration\n */\nexport class ConfigurationError extends XJXError {\n constructor(message: string) {\n super(`Configuration error: ${message}`);\n this.name = 'ConfigurationError';\n }\n}","/**\n * DOM node types as an enum for better type safety\n */\nexport enum NodeType {\n ELEMENT_NODE = 1,\n ATTRIBUTE_NODE = 2,\n TEXT_NODE = 3, \n CDATA_SECTION_NODE = 4,\n PROCESSING_INSTRUCTION_NODE = 7,\n COMMENT_NODE = 8,\n DOCUMENT_NODE = 9\n }","/**\n * DOM Environment provider with unified interface for browser and Node.js\n */\nimport { XJXError } from '../types/error-types';\nimport { NodeType } from '../types/dom-types';\n\n\ninterface DOMWindow {\n DOMParser: any;\n XMLSerializer: any;\n // Node: {\n // ELEMENT_NODE: number;\n // TEXT_NODE: number;\n // CDATA_SECTION_NODE: number;\n // COMMENT_NODE: number;\n // PROCESSING_INSTRUCTION_NODE: number;\n // DOCUMENT_NODE: number; \n // };\n document: Document;\n close?: () => void; \n}\n\ninterface JSDOMInstance {\n window: DOMWindow;\n}\n\nexport const DOMAdapter = (() => {\n // Environment-specific DOM implementation\n let domParser: any;\n let xmlSerializer: any;\n // let nodeTypes: NodeTypes;\n let docImplementation: any;\n let jsdomInstance: JSDOMInstance | null = null;\n\n try {\n if (typeof window === \"undefined\") {\n // Node.js environment - try JSDOM first\n try {\n const { JSDOM } = require(\"jsdom\");\n jsdomInstance = new JSDOM(\"\", {\n contentType: \"text/xml\",\n }) as JSDOMInstance;\n\n domParser = jsdomInstance.window.DOMParser;\n xmlSerializer = jsdomInstance.window.XMLSerializer;\n // nodeTypes = {\n // ELEMENT_NODE: jsdomInstance.window.Node.ELEMENT_NODE,\n // TEXT_NODE: jsdomInstance.window.Node.TEXT_NODE,\n // CDATA_SECTION_NODE: jsdomInstance.window.Node.CDATA_SECTION_NODE,\n // COMMENT_NODE: jsdomInstance.window.Node.COMMENT_NODE,\n // PROCESSING_INSTRUCTION_NODE: jsdomInstance.window.Node.PROCESSING_INSTRUCTION_NODE,\n // DOCUMENT_NODE: jsdomInstance.window.Node.DOCUMENT_NODE, // Add this line\n // };\n docImplementation = jsdomInstance.window.document.implementation;\n } catch (jsdomError) {\n // Fall back to xmldom if JSDOM isn't available\n try {\n const { DOMParser, XMLSerializer, DOMImplementation } = require('@xmldom/xmldom');\n domParser = DOMParser;\n xmlSerializer = XMLSerializer;\n // Standard DOM node types\n // nodeTypes = {\n // ELEMENT_NODE: 1,\n // TEXT_NODE: 3,\n // CDATA_SECTION_NODE: 4,\n // COMMENT_NODE: 8,\n // PROCESSING_INSTRUCTION_NODE: 7,\n // DOCUMENT_NODE: 9, \n // };\n const implementation = new DOMImplementation();\n docImplementation = implementation;\n } catch (xmldomError) {\n throw new XJXError(`Node.js environment detected but neither 'jsdom' nor '@xmldom/xmldom' are available.`);\n }\n }\n } else {\n // Browser environment\n if (!window.DOMParser) {\n throw new XJXError(\"DOMParser is not available in this environment\");\n }\n\n if (!window.XMLSerializer) {\n throw new XJXError(\"XMLSerializer is not available in this environment\");\n }\n\n domParser = window.DOMParser;\n xmlSerializer = window.XMLSerializer;\n // nodeTypes = {\n // ELEMENT_NODE: Node.ELEMENT_NODE,\n // TEXT_NODE: Node.TEXT_NODE,\n // CDATA_SECTION_NODE: Node.CDATA_SECTION_NODE,\n // COMMENT_NODE: Node.COMMENT_NODE,\n // PROCESSING_INSTRUCTION_NODE: Node.PROCESSING_INSTRUCTION_NODE,\n // DOCUMENT_NODE: Node.DOCUMENT_NODE, \n // };\n docImplementation = document.implementation;\n }\n } catch (error) {\n throw new XJXError(`DOM environment initialization failed: ${error instanceof Error ? error.message : String(error)}`);\n }\n\n return {\n createParser: () => {\n try {\n return new domParser();\n } catch (error) {\n throw new XJXError(`Failed to create DOM parser: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n createSerializer: () => {\n try {\n return new xmlSerializer();\n } catch (error) {\n throw new XJXError(`Failed to create XML serializer: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n NodeType,\n \n parseFromString: (xmlString: string, contentType: string = 'text/xml') => {\n try {\n const parser = new domParser();\n return parser.parseFromString(xmlString, contentType);\n } catch (error) {\n throw new XJXError(`Failed to parse XML: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n serializeToString: (node: Node) => {\n try {\n const serializer = new xmlSerializer();\n return serializer.serializeToString(node);\n } catch (error) {\n throw new XJXError(`Failed to serialize XML: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n createDocument: () => {\n try {\n // For browsers, create a document with a root element to avoid issues\n if (typeof window !== \"undefined\") {\n const parser = new domParser();\n return parser.parseFromString('', 'text/xml');\n } else {\n return docImplementation.createDocument(null, null, null);\n }\n } catch (error) {\n throw new XJXError(`Failed to create document: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n createElement: (tagName: string) => {\n try {\n if (typeof window !== \"undefined\") {\n return document.createElement(tagName);\n } else {\n const doc = docImplementation.createDocument(null, null, null);\n return doc.createElement(tagName);\n }\n } catch (error) {\n throw new XJXError(`Failed to create element: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n createElementNS: (namespaceURI: string, qualifiedName: string) => {\n try {\n if (typeof window !== \"undefined\") {\n return document.createElementNS(namespaceURI, qualifiedName);\n } else {\n const doc = docImplementation.createDocument(null, null, null);\n return doc.createElementNS(namespaceURI, qualifiedName);\n }\n } catch (error) {\n throw new XJXError(`Failed to create element with namespace: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n createTextNode: (data: string) => {\n try {\n if (typeof window !== \"undefined\") {\n return document.createTextNode(data);\n } else {\n const doc = docImplementation.createDocument(null, null, null);\n return doc.createTextNode(data);\n }\n } catch (error) {\n throw new XJXError(`Failed to create text node: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n createCDATASection: (data: string) => {\n try {\n // For browser compatibility, use document.implementation to create CDATA\n if (typeof window !== \"undefined\") {\n const doc = document.implementation.createDocument(null, null, null);\n return doc.createCDATASection(data);\n } else {\n const doc = docImplementation.createDocument(null, null, null);\n return doc.createCDATASection(data);\n }\n } catch (error) {\n throw new XJXError(`Failed to create CDATA section: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n createComment: (data: string) => {\n try {\n if (typeof window !== \"undefined\") {\n return document.createComment(data);\n } else {\n const doc = docImplementation.createDocument(null, null, null);\n return doc.createComment(data);\n }\n } catch (error) {\n throw new XJXError(`Failed to create comment: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n createProcessingInstruction: (target: string, data: string) => {\n try {\n if (typeof window !== \"undefined\") {\n const doc = document.implementation.createDocument(null, null, null);\n return doc.createProcessingInstruction(target, data);\n } else {\n const doc = docImplementation.createDocument(null, null, null);\n return doc.createProcessingInstruction(target, data);\n }\n } catch (error) {\n throw new XJXError(`Failed to create processing instruction: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n // New helper methods\n \n /**\n * Creates a proper namespace qualified attribute\n */\n setNamespacedAttribute: (element: Element, namespaceURI: string | null, qualifiedName: string, value: string): void => {\n try {\n if (namespaceURI) {\n element.setAttributeNS(namespaceURI, qualifiedName, value);\n } else {\n element.setAttribute(qualifiedName, value);\n }\n } catch (error) {\n throw new XJXError(`Failed to set attribute: ${error instanceof Error ? error.message : String(error)}`);\n }\n },\n \n /**\n * Check if an object is a DOM node\n */\n isNode: (obj: any): boolean => {\n try {\n return obj && typeof obj === 'object' && typeof obj.nodeType === 'number';\n } catch (error) {\n return false;\n }\n },\n \n /**\n * Get DOM node type as string for debugging\n */\n getNodeTypeName: (nodeType: number): string => {\n switch (nodeType) {\n case NodeType.ELEMENT_NODE: return 'ELEMENT_NODE';\n case NodeType.TEXT_NODE: return 'TEXT_NODE';\n case NodeType.CDATA_SECTION_NODE: return 'CDATA_SECTION_NODE';\n case NodeType.COMMENT_NODE: return 'COMMENT_NODE';\n case NodeType.PROCESSING_INSTRUCTION_NODE: return 'PROCESSING_INSTRUCTION_NODE';\n default: return `UNKNOWN_NODE_TYPE(${nodeType})`;\n }\n },\n \n /**\n * Get all node attributes as an object\n */\n getNodeAttributes: (node: Element): Record => {\n const result: Record = {};\n for (let i = 0; i < node.attributes.length; i++) {\n const attr = node.attributes[i];\n result[attr.name] = attr.value;\n }\n return result;\n },\n \n // Cleanup method (mainly for JSDOM)\n cleanup: () => {\n if (jsdomInstance && typeof jsdomInstance.window.close === 'function') {\n jsdomInstance.window.close();\n }\n }\n };\n})();","/**\n * JSONUtil - Utility functions for JSON processing\n */\nimport { Configuration } from \"../types/config-types\";\nimport { JSONValue } from \"../types/json-types\";\n\nexport class JsonUtil {\n private config: Configuration;\n\n /**\n * Constructor for JSONUtil\n * @param config Configuration options\n */\n constructor(config: Configuration) {\n this.config = config;\n }\n\n /**\n * Safely retrieves a value from a JSON object using a dot-separated path.\n * Automatically traverses into children arrays and flattens results.\n *\n * @param obj The input JSON object\n * @param path The dot-separated path string (e.g., \"root.item.description.$val\")\n * @param fallback Value to return if the path does not resolve\n * @returns Retrieved value or fallback\n */\n getPath(\n obj: Record,\n path: string,\n fallback?: JSONValue\n ): any {\n const segments = path.split(\".\");\n let current: any = obj;\n\n for (const segment of segments) {\n if (Array.isArray(current)) {\n // Apply the segment to each array element and flatten results\n const results = current\n .map((item) => this.resolveSegment(item, segment))\n .flat()\n .filter((v) => v !== undefined);\n current = results.length > 0 ? results : undefined;\n } else {\n current = this.resolveSegment(current, segment);\n }\n\n if (current === undefined) return fallback;\n }\n\n // Collapse singleton arrays\n if (Array.isArray(current) && current.length === 1) {\n return current[0];\n }\n\n return current !== undefined ? current : fallback;\n }\n\n /**\n * Resolves a single path segment in the context of a JSON object.\n * Falls back to searching children for matching keys.\n *\n * @param obj The current object\n * @param segment The path segment to resolve\n * @returns Resolved value or undefined\n */\n private resolveSegment(obj: any, segment: string): any {\n if (obj == null || typeof obj !== \"object\") return undefined;\n\n // Direct property access\n if (segment in obj) {\n return obj[segment];\n }\n\n // Check if this is a special property name that matches the config\n if (\n segment === this.config.propNames.value ||\n segment === this.config.propNames.children ||\n segment === this.config.propNames.attributes ||\n segment === this.config.propNames.namespace ||\n segment === this.config.propNames.prefix ||\n segment === this.config.propNames.cdata ||\n segment === this.config.propNames.comments ||\n segment === this.config.propNames.instruction ||\n segment === this.config.propNames.target\n ) {\n const configKey = Object.entries(this.config.propNames).find(\n ([_, value]) => value === segment\n )?.[0];\n\n if (configKey && obj[segment] !== undefined) {\n return obj[segment];\n }\n }\n\n // Check children for objects that contain the segment\n const childrenKey = this.config.propNames.children;\n const children = obj[childrenKey];\n if (Array.isArray(children)) {\n const matches = children\n .map((child) => (segment in child ? child[segment] : undefined))\n .filter((v) => v !== undefined);\n return matches.length > 0 ? matches : undefined;\n }\n\n return undefined;\n }\n\n /**\n * Converts a plain JSON object to the XML-like JSON structure.\n * Optionally wraps the result in a root element with attributes and namespaces.\n *\n * @param obj Standard JSON object\n * @param root Optional root element configuration (either a string or object with $ keys)\n * @returns XML-like JSON object\n */\n objectToXJX(obj: any, root?: any): any {\n const wrappedObject = this.wrapObject(obj);\n\n if (typeof root === \"string\") {\n // Root is a simple string: wrap result with this root tag\n return { [root]: wrappedObject };\n }\n\n if (root && typeof root === \"object\") {\n // Handle root with config-based keys\n const elementName = root.name || \"root\"; // Default to \"root\" if no name is provided\n const prefix = root[this.config.propNames.prefix] || \"\";\n const qualifiedName = prefix ? `${prefix}:${elementName}` : elementName;\n\n const result: any = {\n [qualifiedName]: {},\n };\n\n // Add attributes to the root element if defined\n const attrsKey = this.config.propNames.attributes;\n if (root[attrsKey] && Array.isArray(root[attrsKey])) {\n result[qualifiedName][attrsKey] = root[attrsKey];\n }\n\n // Merge existing children with the new generated children\n const childrenKey = this.config.propNames.children;\n const children = root[childrenKey] ? root[childrenKey] : [];\n result[qualifiedName][childrenKey] = [\n ...children,\n { [elementName]: wrappedObject },\n ];\n\n // Add namespace and prefix if defined\n const nsKey = this.config.propNames.namespace;\n if (root[nsKey]) {\n result[qualifiedName][nsKey] = root[nsKey];\n }\n\n if (prefix && root[nsKey]) {\n result[qualifiedName][`xmlns:${prefix}`] = root[nsKey];\n }\n\n return result;\n }\n\n // Default behavior if no root is provided\n return wrappedObject;\n }\n\n /**\n * Wraps a standard JSON value in the XML-like JSON structure\n * @param value Value to wrap\n * @returns Wrapped value\n */\n private wrapObject(value: any): any {\n const valKey = this.config.propNames.value;\n const childrenKey = this.config.propNames.children;\n\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return { [valKey]: value };\n }\n\n if (Array.isArray(value)) {\n // For arrays, wrap each item and return as a children-style array of repeated elements\n return {\n [childrenKey]: value.map((item) => {\n return this.wrapObject(item);\n }),\n };\n }\n\n if (typeof value === \"object\") {\n // It's an object: wrap its properties in children\n const children = Object.entries(value).map(([key, val]) => ({\n [key]: this.wrapObject(val),\n }));\n\n return { [childrenKey]: children };\n }\n\n return undefined; // Fallback for unhandled types\n }\n\n /**\n * Check if an object is empty\n * @param value Value to check\n * @returns true if empty\n */\n isEmpty(value: any): boolean {\n if (value == null) return true;\n if (Array.isArray(value)) return value.length === 0;\n if (typeof value === \"object\") return Object.keys(value).length === 0;\n return false;\n }\n\n /**\n * Safely stringify JSON for debugging\n * @param obj Object to stringify\n * @param indent Optional indentation level\n * @returns JSON string representation\n */\n safeStringify(obj: any, indent: number = 2): string {\n try {\n return JSON.stringify(obj, null, indent);\n } catch (error) {\n return \"[Cannot stringify object]\";\n }\n }\n\n /**\n * Deep clone an object\n * @param obj Object to clone\n * @returns Cloned object\n */\n deepClone(obj: any): any {\n try {\n return JSON.parse(JSON.stringify(obj));\n } catch (error) {\n throw new Error(\n `Failed to deep clone object: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n /**\n * Deep merge two objects with proper type handling\n * @param target Target object\n * @param source Source object\n * @returns Merged object (target is modified)\n */\n deepMerge(target: T, source: Partial): T {\n if (!source || typeof source !== \"object\" || source === null) {\n return target;\n }\n\n if (!target || typeof target !== \"object\" || target === null) {\n return source as unknown as T;\n }\n\n Object.keys(source).forEach((key) => {\n const sourceValue = source[key as keyof Partial];\n const targetValue = target[key as keyof T];\n\n // If both source and target values are objects, recursively merge them\n if (\n sourceValue !== null &&\n targetValue !== null &&\n typeof sourceValue === \"object\" &&\n typeof targetValue === \"object\" &&\n !Array.isArray(sourceValue) &&\n !Array.isArray(targetValue)\n ) {\n // Recursively merge the nested objects\n (target as any)[key] = this.deepMerge(targetValue, sourceValue as any);\n } else {\n // Otherwise just replace the value\n (target as any)[key] = sourceValue;\n }\n });\n\n return target;\n }\n\n /**\n * Generates a JSON schema that matches the current configuration\n * @returns JSON schema object\n */\n generateJsonSchema(): Record {\n try {\n const propNames = this.config.propNames;\n const compact = this.config.outputOptions.compact || false;\n const preserveNamespaces = this.config.preserveNamespaces;\n const preserveComments = this.config.preserveComments;\n const preserveCDATA = this.config.preserveCDATA;\n const preserveProcessingInstr = this.config.preserveProcessingInstr;\n const preserveTextNodes = this.config.preserveTextNodes;\n const preserveWhitespace = this.config.preserveWhitespace;\n const preserveAttributes = this.config.preserveAttributes;\n\n // Determine which properties are required based on the configuration\n const requiredProps: string[] = [];\n\n if (!compact) {\n // Only add collections as required if they're preserved in the config\n if (preserveAttributes) requiredProps.push(propNames.attributes);\n\n if (preserveCDATA) requiredProps.push(propNames.cdata);\n if (preserveComments) requiredProps.push(propNames.comments);\n if (preserveProcessingInstr) requiredProps.push(propNames.instruction);\n requiredProps.push(propNames.children);\n\n if (preserveTextNodes) {\n requiredProps.push(propNames.value);\n\n if (preserveNamespaces) {\n requiredProps.push(propNames.namespace);\n // Note: prefix is not required as it may not be present for all elements\n }\n }\n }\n\n // Create schema for element properties\n const elementProperties: Record = {};\n\n // Add namespace property if preserving namespaces\n if (preserveNamespaces) {\n elementProperties[propNames.namespace] = {\n description: \"Namespace URI of the element\",\n type: \"string\",\n };\n\n // Add prefix property if preserving namespaces\n elementProperties[propNames.prefix] = {\n description: \"Namespace prefix of the element\",\n type: \"string\",\n };\n }\n\n // Add value property if preserving text nodes\n if (preserveTextNodes) {\n elementProperties[propNames.value] = {\n description: \"Text content of the element\",\n type: \"string\",\n };\n }\n\n // Add attributes property\n if (preserveAttributes) {\n elementProperties[propNames.attributes] = {\n description: \"Element attributes\",\n type: \"array\",\n items: {\n type: \"object\",\n patternProperties: {\n \"^.*$\": {\n type: \"object\",\n properties: {\n [propNames.value]: {\n description: \"Attribute value\",\n type: \"string\",\n },\n },\n required: [propNames.value],\n },\n },\n additionalProperties: false,\n },\n };\n\n // If preserving namespaces, add namespace properties to attribute schema\n if (preserveNamespaces) {\n const attrProps =\n elementProperties[propNames.attributes].items.patternProperties[\n \"^.*$\"\n ].properties;\n\n attrProps[propNames.namespace] = {\n description: \"Namespace URI of the attribute\",\n type: \"string\",\n };\n\n attrProps[propNames.prefix] = {\n description: \"Namespace prefix of the attribute\",\n type: \"string\",\n };\n }\n }\n\n // Add CDATA property if preserving CDATA\n if (preserveCDATA) {\n elementProperties[propNames.cdata] = {\n description: \"CDATA section content\",\n type: \"string\",\n };\n }\n\n // Add comments property if preserving comments\n if (preserveComments) {\n elementProperties[propNames.comments] = {\n description: \"Comment content\",\n type: \"string\",\n };\n }\n\n // Add processing instructions property if preserving them\n if (preserveProcessingInstr) {\n elementProperties[propNames.instruction] = {\n description: \"Processing instruction\",\n type: \"object\",\n properties: {\n [propNames.target]: {\n description: \"Processing instruction target\",\n type: \"string\",\n },\n [propNames.value]: {\n description: \"Processing instruction content\",\n type: \"string\",\n },\n },\n required: [propNames.target],\n };\n }\n\n // Add children property with recursive schema\n elementProperties[propNames.children] = {\n description: \"Child elements\",\n type: \"array\",\n items: {\n type: \"object\",\n patternProperties: {\n \"^.*$\": {\n $ref: \"#/definitions/element\",\n },\n },\n additionalProperties: false,\n },\n };\n\n // Create element definition (will be referenced recursively)\n const elementDefinition = {\n type: \"object\",\n properties: elementProperties,\n required: requiredProps,\n additionalProperties: false,\n };\n\n // Build the complete schema\n const schema = {\n $schema: \"https://json-schema.org/draft/2020-12/schema\",\n title: \"XJX JSON Schema\",\n description:\n \"Schema for JSON representation of XML documents using the XJX library\",\n type: \"object\",\n patternProperties: {\n \"^.*$\": {\n $ref: \"#/definitions/element\",\n },\n },\n additionalProperties: false,\n definitions: {\n element: elementDefinition,\n },\n };\n\n return schema;\n } catch (error) {\n throw new Error(\n `Schema generation failed: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n /**\n * Generate an example JSON object based on the schema\n * @param {string} rootName - Name of the root element\n * @returns {Record} - Example JSON object\n */\n generateExample(rootName: string = \"root\"): Record {\n const propNames = this.config.propNames;\n const preserveNamespaces = this.config.preserveNamespaces;\n const preserveComments = this.config.preserveComments;\n const preserveCDATA = this.config.preserveCDATA;\n const preserveProcessingInstr = this.config.preserveProcessingInstr;\n const preserveAttributes = this.config.preserveAttributes;\n\n // Simple example with common features\n const example: Record = {\n [rootName]: {\n [propNames.value]: \"Root content\",\n [propNames.children]: [\n {\n child: {\n [propNames.value]: \"Child content\",\n },\n },\n ],\n },\n };\n\n // Add namespace properties if enabled\n if (preserveNamespaces) {\n example[rootName][propNames.namespace] = \"http://example.org/ns\";\n example[rootName][propNames.prefix] = \"ex\";\n example[rootName][propNames.children][0].child[propNames.namespace] =\n \"http://example.org/ns\";\n example[rootName][propNames.children][0].child[propNames.prefix] = \"ex\";\n }\n\n // Add attributes if enabled\n if (preserveAttributes) {\n example[rootName][propNames.attributes] = [\n { id: { [propNames.value]: \"root-1\" } },\n { lang: { [propNames.value]: \"en\" } },\n ];\n\n if (preserveNamespaces) {\n example[rootName][propNames.attributes][1].lang[propNames.prefix] =\n \"xml\";\n }\n\n example[rootName][propNames.children][0].child[propNames.attributes] = [\n { id: { [propNames.value]: \"child-1\" } },\n ];\n }\n\n // Add CDATA if enabled\n if (preserveCDATA) {\n example[rootName][propNames.children][0].child[propNames.children] = [\n { [propNames.cdata]: \"Raw content\" },\n ];\n }\n\n // Add comments if enabled\n if (preserveComments) {\n if (!example[rootName][propNames.children][0].child[propNames.children]) {\n example[rootName][propNames.children][0].child[propNames.children] = [];\n }\n\n example[rootName][propNames.children][0].child[propNames.children].push({\n [propNames.comments]: \"Comment about the child\",\n });\n }\n\n // Add processing instruction if enabled\n if (preserveProcessingInstr) {\n if (!example[rootName][propNames.children]) {\n example[rootName][propNames.children] = [];\n }\n\n example[rootName][propNames.children].unshift({\n [propNames.instruction]: {\n [propNames.target]: \"xml-stylesheet\",\n [propNames.value]: 'type=\"text/css\" href=\"style.css\"',\n },\n });\n }\n\n return example;\n }\n}\n","/**\n * Utilities for applying value transformations\n */\nimport { Configuration } from '../types/config-types';\nimport { TransformContext, TransformDirection } from './ValueTransformer';\nimport { DOMAdapter } from '../adapters/dom-adapter';\n\n/**\n * Utility for applying value transformations\n */\nexport class TransformUtil {\n private config: Configuration;\n\n /**\n * Create a new TransformUtil\n * @param config Configuration\n */\n constructor(config: Configuration) {\n this.config = config;\n }\n\n /**\n * Apply transforms to a value\n * @param value Value to transform\n * @param context Transformation context\n * @returns Transformed value\n */\n applyTransforms(value: any, context: TransformContext): any {\n // Skip transformation if no transformers are configured\n if (!this.config.valueTransforms || this.config.valueTransforms.length === 0) {\n return value;\n }\n\n // Apply each transformer in sequence\n let transformedValue = value;\n for (const transformer of this.config.valueTransforms) {\n transformedValue = transformer.process(transformedValue, context);\n }\n\n return transformedValue;\n }\n\n /**\n * Create a transform context\n * @param direction Direction of transformation\n * @param nodeName Name of the current node\n * @param nodeType DOM node type\n * @param options Additional context options\n * @returns Transform context\n */\n createContext(\n direction: TransformDirection,\n nodeName: string,\n nodeType: number,\n options: {\n path?: string;\n namespace?: string;\n prefix?: string;\n isAttribute?: boolean;\n attributeName?: string;\n parent?: TransformContext;\n } = {}\n ): TransformContext {\n return {\n direction,\n nodeName,\n nodeType,\n path: options.path || nodeName,\n namespace: options.namespace,\n prefix: options.prefix,\n isAttribute: options.isAttribute || false,\n attributeName: options.attributeName,\n parent: options.parent,\n config: this.config,\n };\n }\n\n /**\n * Get a user-friendly node type name for debugging\n * @param nodeType DOM node type\n * @returns String representation of node type\n */\n getNodeTypeName(nodeType: number): string {\n return DOMAdapter.getNodeTypeName(nodeType);\n }\n}","/**\n * XmlToJsonConverter class for converting XML to JSON with consistent namespace handling\n */\nimport { Configuration } from \"../types/config-types\";\nimport { XJXError } from \"../types/error-types\";\nimport { DOMAdapter } from \"../adapters/dom-adapter\";\nimport { JsonUtil } from \"../utils/json-utils\";\nimport { TransformUtil } from \"../transformers/TransformUtil\";\nimport { TransformContext } from \"../transformers/ValueTransformer\";\n\n/**\n * XmlToJsonConverter Parser for converting XML to JSON\n */\nexport class XmlToJsonConverter {\n private config: Configuration;\n private jsonUtil: JsonUtil;\n private transformUtil: TransformUtil;\n\n /**\n * Constructor for XmlToJsonConverter\n * @param config Configuration options\n */\n constructor(config: Configuration) {\n this.config = config;\n this.jsonUtil = new JsonUtil(this.config);\n this.transformUtil = new TransformUtil(this.config);\n }\n\n /**\n * Convert XML string to JSON\n * @param xmlString XML content as string\n * @returns JSON object representing the XML content\n */\n public convert(xmlString: string): Record {\n try {\n const xmlDoc = DOMAdapter.parseFromString(xmlString, \"text/xml\");\n\n // Check for parsing errors\n const errors = xmlDoc.getElementsByTagName(\"parsererror\");\n if (errors.length > 0) {\n throw new XJXError(`XML parsing error: ${errors[0].textContent}`);\n }\n\n return this.nodeToJson(xmlDoc.documentElement);\n } catch (error) {\n throw new XJXError(\n `Failed to convert XML to JSON: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n /**\n * Convert a DOM node to JSON representation\n * @param node DOM node to convert\n * @param parentContext Optional parent context for transformation chain\n * @param path Current path in the XML tree\n * @returns JSON representation of the node\n */\n private nodeToJson(node: Node, parentContext?: TransformContext, path: string = \"\"): Record {\n const result: Record = {};\n\n // Handle element nodes\n if (node.nodeType === DOMAdapter.NodeType.ELEMENT_NODE) {\n const element = node as Element;\n // Use localName instead of nodeName to strip namespace prefix\n const nodeName =\n element.localName ||\n element.nodeName.split(\":\").pop() ||\n element.nodeName;\n\n // Update the current path\n const currentPath = path ? `${path}.${nodeName}` : nodeName;\n\n const nodeObj: Record = {};\n\n // Create context for this node\n const context = this.transformUtil.createContext(\n 'xml-to-json',\n nodeName,\n node.nodeType,\n {\n path: currentPath,\n namespace: element.namespaceURI || undefined,\n prefix: element.prefix || undefined,\n parent: parentContext\n }\n );\n\n // Process namespaces if enabled\n if (this.config.preserveNamespaces) {\n const ns = element.namespaceURI;\n if (ns) {\n nodeObj[this.config.propNames.namespace] = ns;\n }\n\n const prefix = element.prefix;\n if (prefix) {\n nodeObj[this.config.propNames.prefix] = prefix;\n }\n }\n\n // Process attributes if enabled\n if (this.config.preserveAttributes && element.attributes.length > 0) {\n const attrs: Array> = [];\n\n for (let i = 0; i < element.attributes.length; i++) {\n const attr = element.attributes[i];\n // Strip namespace prefix from attribute name\n const attrLocalName =\n attr.localName || attr.name.split(\":\").pop() || attr.name;\n\n // Create attribute context\n const attrContext = this.transformUtil.createContext(\n 'xml-to-json',\n nodeName,\n node.nodeType,\n {\n path: `${currentPath}.${attrLocalName}`,\n namespace: attr.namespaceURI || undefined,\n prefix: attr.prefix || undefined,\n isAttribute: true,\n attributeName: attrLocalName,\n parent: context\n }\n );\n\n // Apply transformations to attribute value\n const transformedValue = this.transformUtil.applyTransforms(\n attr.value,\n attrContext\n );\n\n // Create attribute object with consistent structure\n const attrObj: Record = {\n [attrLocalName]: {\n [this.config.propNames.value]: transformedValue,\n },\n };\n\n // Add namespace info for attribute if present and enabled\n if (this.config.preserveNamespaces) {\n // Handle attribute namespace\n if (attr.namespaceURI) {\n attrObj[attrLocalName][this.config.propNames.namespace] =\n attr.namespaceURI;\n }\n\n // Handle attribute prefix\n if (attr.prefix) {\n attrObj[attrLocalName][this.config.propNames.prefix] =\n attr.prefix;\n }\n }\n\n attrs.push(attrObj);\n }\n\n if (attrs.length > 0) {\n nodeObj[this.config.propNames.attributes] = attrs;\n }\n }\n\n // Process child nodes\n if (element.childNodes.length > 0) {\n const children: Array> = [];\n const childrenKey = this.config.propNames.children;\n const valueKey = this.config.propNames.value;\n const cdataKey = this.config.propNames.cdata;\n const commentsKey = this.config.propNames.comments;\n const instructionKey = this.config.propNames.instruction;\n const targetKey = this.config.propNames.target;\n\n for (let i = 0; i < element.childNodes.length; i++) {\n const child = element.childNodes[i];\n\n // Text nodes - only process if preserveTextNodes is true\n if (child.nodeType === DOMAdapter.NodeType.TEXT_NODE) {\n if (this.config.preserveTextNodes) {\n let text = child.nodeValue || \"\";\n\n // Skip whitespace-only text nodes if whitespace preservation is disabled\n if (!this.config.preserveWhitespace) {\n if (text.trim() === \"\") {\n continue;\n }\n // Trim the text when preserveWhitespace is false\n text = text.trim();\n }\n\n // Create text node context\n const textContext = this.transformUtil.createContext(\n 'xml-to-json',\n '#text',\n child.nodeType,\n {\n path: `${currentPath}.#text`,\n parent: context\n }\n );\n\n // Apply transformations to text value\n const transformedText = this.transformUtil.applyTransforms(\n text,\n textContext\n );\n\n children.push({ [valueKey]: transformedText });\n }\n }\n // CDATA sections\n else if (\n child.nodeType === DOMAdapter.NodeType.CDATA_SECTION_NODE &&\n this.config.preserveCDATA\n ) {\n // Create CDATA context\n const cdataContext = this.transformUtil.createContext(\n 'xml-to-json',\n '#cdata',\n child.nodeType,\n {\n path: `${currentPath}.#cdata`,\n parent: context\n }\n );\n\n // Apply transformations to CDATA value\n const transformedCData = this.transformUtil.applyTransforms(\n child.nodeValue || \"\",\n cdataContext\n );\n\n children.push({\n [cdataKey]: transformedCData,\n });\n }\n // Comments\n else if (\n child.nodeType === DOMAdapter.NodeType.COMMENT_NODE &&\n this.config.preserveComments\n ) {\n children.push({\n [commentsKey]: child.nodeValue || \"\",\n });\n }\n // Processing instructions\n else if (\n child.nodeType ===\n DOMAdapter.NodeType.PROCESSING_INSTRUCTION_NODE &&\n this.config.preserveProcessingInstr\n ) {\n children.push({\n [instructionKey]: {\n [targetKey]: child.nodeName,\n [valueKey]: child.nodeValue || \"\",\n },\n });\n }\n // Element nodes (recursive)\n else if (child.nodeType === DOMAdapter.NodeType.ELEMENT_NODE) {\n children.push(this.nodeToJson(child, context, currentPath));\n }\n }\n\n if (children.length > 0) {\n nodeObj[childrenKey] = children;\n }\n }\n\n // Apply compact option - remove empty properties if enabled\n if (this.config.outputOptions.compact) {\n Object.keys(nodeObj).forEach((key) => {\n const cleaned = this.cleanNode(nodeObj[key]);\n if (cleaned === undefined) {\n delete nodeObj[key];\n } else {\n nodeObj[key] = cleaned;\n }\n });\n }\n\n result[nodeName] = nodeObj;\n }\n\n return result;\n }\n\n private cleanNode(node: any): any {\n if (Array.isArray(node)) {\n // Clean each item in the array and filter out empty ones\n const cleanedArray = node\n .map((item) => this.cleanNode(item))\n .filter((item) => {\n return !(\n item === null ||\n item === undefined ||\n (typeof item === \"object\" && Object.keys(item).length === 0)\n );\n });\n return cleanedArray.length > 0 ? cleanedArray : undefined;\n } else if (typeof node === \"object\" && node !== null) {\n // Clean properties recursively\n Object.keys(node).forEach((key) => {\n const cleanedChild = this.cleanNode(node[key]);\n if (\n cleanedChild === null ||\n cleanedChild === undefined ||\n (Array.isArray(cleanedChild) && cleanedChild.length === 0) ||\n (typeof cleanedChild === \"object\" &&\n Object.keys(cleanedChild).length === 0)\n ) {\n delete node[key];\n } else {\n node[key] = cleanedChild;\n }\n });\n\n // Handle the special case for nodes with only empty children/attributes\n const childrenKey = this.config.propNames.children;\n const attrsKey = this.config.propNames.attributes;\n const keys = Object.keys(node);\n if (\n keys.every((key) => key === childrenKey || key === attrsKey) &&\n (node[childrenKey] === undefined ||\n this.jsonUtil.isEmpty(node[childrenKey])) &&\n (node[attrsKey] === undefined || this.jsonUtil.isEmpty(node[attrsKey]))\n ) {\n return undefined;\n }\n\n return Object.keys(node).length > 0 ? node : undefined;\n }\n\n return node;\n }\n}","/**\n * XMLUtil - Utility functions for XML processing\n */\nimport { XJXError } from \"../types/error-types\";\nimport { DOMAdapter } from \"../adapters/dom-adapter\";\nimport { Configuration } from \"../types/config-types\";\n\nexport class XmlUtil {\n private config: Configuration;\n\n /**\n * Constructor for XMLUtil\n * @param config Configuration options\n */\n constructor(config: Configuration) {\n this.config = config;\n }\n\n /**\n * Pretty print an XML string\n * @param xmlString XML string to format\n * @returns Formatted XML string\n */\n prettyPrintXml(xmlString: string): string {\n const indent = this.config.outputOptions.indent;\n const INDENT = \" \".repeat(indent);\n\n try {\n const doc = DOMAdapter.parseFromString(xmlString, \"text/xml\");\n\n const serializer = (node: Node, level = 0): string => {\n const pad = INDENT.repeat(level);\n\n switch (node.nodeType) {\n case DOMAdapter.NodeType.ELEMENT_NODE: {\n const el = node as Element;\n const tagName = el.tagName;\n const attrs = Array.from(el.attributes)\n .map((a) => `${a.name}=\"${a.value}\"`)\n .join(\" \");\n const openTag = attrs ? `<${tagName} ${attrs}>` : `<${tagName}>`;\n\n const children = Array.from(el.childNodes);\n\n if (children.length === 0) {\n return `${pad}${openTag.replace(/>$/, \" />\")}\\n`;\n }\n\n // Single text node: print inline\n if (\n children.length === 0 ||\n (children.length === 1 &&\n children[0].nodeType === DOMAdapter.NodeType.TEXT_NODE &&\n children[0].textContent?.trim() === \"\")\n ) {\n // Empty or whitespace-only\n return `${pad}<${tagName}${attrs ? \" \" + attrs : \"\"}>\\n`;\n }\n\n const inner = children\n .map((child) => serializer(child, level + 1))\n .join(\"\");\n return `${pad}${openTag}\\n${inner}${pad}\\n`;\n }\n\n case DOMAdapter.NodeType.TEXT_NODE: {\n const text = node.textContent?.trim();\n return text ? `${pad}${text}\\n` : \"\";\n }\n\n case DOMAdapter.NodeType.CDATA_SECTION_NODE:\n return `${pad}\\n`;\n\n case DOMAdapter.NodeType.COMMENT_NODE:\n return `${pad}\\n`;\n\n case DOMAdapter.NodeType.PROCESSING_INSTRUCTION_NODE:\n const pi = node as ProcessingInstruction;\n return `${pad}\\n`;\n\n case DOMAdapter.NodeType.DOCUMENT_NODE:\n return Array.from(node.childNodes)\n .map((child) => serializer(child, level))\n .join(\"\");\n\n default:\n return \"\";\n }\n };\n\n return serializer(doc).trim();\n } catch (error) {\n throw new XJXError(\n `Failed to pretty print XML: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n /**\n * Check if XML string is well-formed\n * @param xmlString XML string to validate\n * @returns Object with validation result and any error messages\n */\n validateXML(xmlString: string): {\n isValid: boolean;\n message?: string;\n } {\n try {\n const doc = DOMAdapter.parseFromString(xmlString, \"text/xml\");\n const errors = doc.getElementsByTagName(\"parsererror\");\n if (errors.length > 0) {\n return {\n isValid: false,\n message: errors[0].textContent || \"Unknown parsing error\",\n };\n }\n return { isValid: true };\n } catch (error) {\n return {\n isValid: false,\n message: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Add XML declaration to a string if missing\n * @param xmlString XML string\n * @returns XML string with declaration\n */\n ensureXMLDeclaration(xmlString: string): string {\n if (!xmlString.trim().startsWith(\"\\n' + xmlString;\n }\n return xmlString;\n }\n\n /**\n * Escapes special characters in text for safe XML usage.\n * @param text Text to escape.\n * @returns Escaped XML string.\n */\n escapeXML(text: string): string {\n if (typeof text !== \"string\" || text.length === 0) {\n return \"\";\n }\n\n return text.replace(/[&<>\"']/g, (char) => {\n switch (char) {\n case \"&\":\n return \"&\";\n case \"<\":\n return \"<\";\n case \">\":\n return \">\";\n case '\"':\n return \""\";\n case \"'\":\n return \"'\";\n default:\n return char;\n }\n });\n }\n\n /**\n * Unescapes XML entities back to their character equivalents.\n * @param text Text with XML entities.\n * @returns Unescaped text.\n */\n unescapeXML(text: string): string {\n if (typeof text !== \"string\" || text.length === 0) {\n return \"\";\n }\n\n return text.replace(/&(amp|lt|gt|quot|apos);/g, (match, entity) => {\n switch (entity) {\n case \"amp\":\n return \"&\";\n case \"lt\":\n return \"<\";\n case \"gt\":\n return \">\";\n case \"quot\":\n return '\"';\n case \"apos\":\n return \"'\";\n default:\n return match;\n }\n });\n }\n\n /**\n * Extract the namespace prefix from a qualified name\n * @param qualifiedName Qualified name (e.g., \"ns:element\")\n * @returns Prefix or null if no prefix\n */\n extractPrefix(qualifiedName: string): string | null {\n const colonIndex = qualifiedName.indexOf(\":\");\n return colonIndex > 0 ? qualifiedName.substring(0, colonIndex) : null;\n }\n\n /**\n * Extract the local name from a qualified name\n * @param qualifiedName Qualified name (e.g., \"ns:element\")\n * @returns Local name\n */\n extractLocalName(qualifiedName: string): string {\n const colonIndex = qualifiedName.indexOf(\":\");\n return colonIndex > 0\n ? qualifiedName.substring(colonIndex + 1)\n : qualifiedName;\n }\n\n /**\n * Create a qualified name from prefix and local name\n * @param prefix Namespace prefix (can be null)\n * @param localName Local name\n * @returns Qualified name\n */\n createQualifiedName(prefix: string | null, localName: string): string {\n return prefix ? `${prefix}:${localName}` : localName;\n }\n}","/**\n * JsonToXmlConverter class for converting JSON to XML with consistent namespace handling\n */\nimport { Configuration } from \"../types/config-types\";\nimport { XJXError } from \"../types/error-types\";\nimport { DOMAdapter } from \"../adapters/dom-adapter\";\nimport { XmlUtil } from \"../utils/xml-utils\";\nimport { TransformUtil } from \"../transformers/TransformUtil\";\nimport { TransformContext } from \"../transformers/ValueTransformer\";\n\n/**\n * JsonToXmlConverter for converting JSON to XML\n */\nexport class JsonToXmlConverter {\n private config: Configuration;\n private xmlUtil: XmlUtil;\n private transformUtil: TransformUtil;\n\n /**\n * Constructor for JsonToXmlConverter\n * @param config Configuration options\n */\n constructor(config: Configuration) {\n this.config = config;\n this.xmlUtil = new XmlUtil(this.config);\n this.transformUtil = new TransformUtil(this.config);\n }\n\n /**\n * Convert JSON object to XML string\n * @param jsonObj JSON object to convert\n * @returns XML string\n */\n public convert(jsonObj: Record): string {\n try {\n const doc = DOMAdapter.createDocument();\n const rootElement = this.jsonToNode(jsonObj, doc);\n\n if (rootElement) {\n // Handle the temporary root element if it exists\n if (doc.documentElement && doc.documentElement.nodeName === \"temp\") {\n doc.replaceChild(rootElement, doc.documentElement);\n } else {\n doc.appendChild(rootElement);\n }\n }\n\n // Add XML declaration if specified\n let xmlString = DOMAdapter.serializeToString(doc);\n\n // remove xhtml decl inserted by dom\n xmlString = xmlString.replace(' xmlns=\"http://www.w3.org/1999/xhtml\"', '');\n\n if (this.config.outputOptions.xml.declaration) {\n xmlString = this.xmlUtil.ensureXMLDeclaration(xmlString);\n }\n\n // Apply pretty printing if enabled\n if (this.config.outputOptions.prettyPrint) {\n xmlString = this.xmlUtil.prettyPrintXml(xmlString);\n }\n\n return xmlString;\n } catch (error) {\n throw new XJXError(\n `Failed to convert JSON to XML: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n /**\n * Convert JSON object to DOM node\n * @param jsonObj JSON object to convert\n * @param doc Document for creating elements\n * @param parentContext Optional parent context for transformation chain\n * @param path Current path in the JSON object\n * @returns DOM Element\n */\n private jsonToNode(\n jsonObj: Record,\n doc: Document,\n parentContext?: TransformContext,\n path: string = \"\"\n ): Element | null {\n if (!jsonObj || typeof jsonObj !== \"object\") {\n return null;\n }\n\n // Get the node name (first key in the object)\n const nodeName = Object.keys(jsonObj)[0];\n if (!nodeName) {\n return null;\n }\n\n const nodeData = jsonObj[nodeName];\n \n // Update the current path\n const currentPath = path ? `${path}.${nodeName}` : nodeName;\n\n // Create element with namespace if available\n let element: Element;\n const namespaceKey = this.config.propNames.namespace;\n const prefixKey = this.config.propNames.prefix;\n const ns = nodeData[namespaceKey];\n const prefix = nodeData[prefixKey];\n\n // Create context for this node\n const context = this.transformUtil.createContext(\n 'json-to-xml',\n nodeName,\n DOMAdapter.NodeType.ELEMENT_NODE,\n {\n path: currentPath,\n namespace: ns,\n prefix: prefix,\n parent: parentContext\n }\n );\n\n if (ns && this.config.preserveNamespaces) {\n if (prefix) {\n // Create element with namespace and prefix\n element = DOMAdapter.createElementNS(ns, `${prefix}:${nodeName}`);\n } else {\n // Create element with namespace but no prefix\n element = DOMAdapter.createElementNS(ns, nodeName);\n }\n } else {\n // Create element without namespace\n element = DOMAdapter.createElement(nodeName);\n }\n\n // Process attributes if enabled\n const attributesKey = this.config.propNames.attributes;\n const valueKey = this.config.propNames.value;\n if (\n this.config.preserveAttributes &&\n nodeData[attributesKey] &&\n Array.isArray(nodeData[attributesKey])\n ) {\n nodeData[attributesKey].forEach(\n (attrObj: Record) => {\n const attrName = Object.keys(attrObj)[0];\n if (!attrName) return;\n\n const attrData = attrObj[attrName];\n \n // Create attribute context\n const attrContext = this.transformUtil.createContext(\n 'json-to-xml',\n nodeName,\n DOMAdapter.NodeType.ELEMENT_NODE,\n {\n path: `${currentPath}.${attrName}`,\n namespace: attrData[namespaceKey],\n prefix: attrData[prefixKey],\n isAttribute: true,\n attributeName: attrName,\n parent: context\n }\n );\n \n // Apply transformations to attribute value\n const transformedValue = this.transformUtil.applyTransforms(\n attrData[valueKey] || \"\",\n attrContext\n );\n \n const attrNs = attrData[namespaceKey];\n const attrPrefix = attrData[prefixKey];\n\n // Form qualified name for attribute if it has a prefix\n let qualifiedName = attrName;\n if (attrPrefix && this.config.preserveNamespaces) {\n qualifiedName = `${attrPrefix}:${attrName}`;\n }\n\n DOMAdapter.setNamespacedAttribute(\n element, \n (attrNs && this.config.preserveNamespaces) ? attrNs : null, \n qualifiedName, \n transformedValue\n );\n }\n );\n }\n\n // Process simple text value\n if (nodeData[valueKey] !== undefined) {\n // Apply transformations to text value\n const textContext = this.transformUtil.createContext(\n 'json-to-xml',\n nodeName,\n DOMAdapter.NodeType.TEXT_NODE,\n {\n path: `${currentPath}.#text`,\n namespace: ns,\n prefix: prefix,\n parent: context\n }\n );\n \n const transformedValue = this.transformUtil.applyTransforms(\n nodeData[valueKey],\n textContext\n );\n \n element.textContent = transformedValue;\n }\n\n // Process children\n const childrenKey = this.config.propNames.children;\n const cdataKey = this.config.propNames.cdata;\n const commentsKey = this.config.propNames.comments;\n const instructionKey = this.config.propNames.instruction;\n const targetKey = this.config.propNames.target;\n\n if (\n nodeData[childrenKey] &&\n Array.isArray(nodeData[childrenKey])\n ) {\n nodeData[childrenKey].forEach(\n (child: Record) => {\n // Text nodes\n if (\n child[valueKey] !== undefined &&\n this.config.preserveTextNodes\n ) {\n // Apply transformations to text node\n const textContext = this.transformUtil.createContext(\n 'json-to-xml',\n '#text',\n DOMAdapter.NodeType.TEXT_NODE,\n {\n path: `${currentPath}.#text`,\n parent: context\n }\n );\n \n const transformedText = this.transformUtil.applyTransforms(\n child[valueKey],\n textContext\n );\n \n element.appendChild(\n DOMAdapter.createTextNode(this.xmlUtil.escapeXML(transformedText))\n );\n }\n // CDATA sections\n else if (\n child[cdataKey] !== undefined &&\n this.config.preserveCDATA\n ) {\n // Apply transformations to CDATA\n const cdataContext = this.transformUtil.createContext(\n 'json-to-xml',\n '#cdata',\n DOMAdapter.NodeType.CDATA_SECTION_NODE,\n {\n path: `${currentPath}.#cdata`,\n parent: context\n }\n );\n \n const transformedCData = this.transformUtil.applyTransforms(\n child[cdataKey],\n cdataContext\n );\n \n element.appendChild(\n DOMAdapter.createCDATASection(\n transformedCData\n )\n );\n }\n // Comments\n else if (\n child[commentsKey] !== undefined &&\n this.config.preserveComments\n ) {\n element.appendChild(\n DOMAdapter.createComment(\n child[commentsKey]\n )\n );\n }\n // Processing instructions\n else if (\n child[instructionKey] !== undefined &&\n this.config.preserveProcessingInstr\n ) {\n const piData = child[instructionKey];\n const target = piData[targetKey];\n const data = piData[valueKey] || \"\";\n\n if (target) {\n element.appendChild(\n DOMAdapter.createProcessingInstruction(target, data)\n );\n }\n }\n // Element nodes (recursive)\n else {\n const childElement = this.jsonToNode(child, doc, context, currentPath);\n if (childElement) {\n element.appendChild(childElement);\n }\n }\n }\n );\n }\n\n return element;\n }\n}","/**\n * Default configuration for the XJX library\n */\nimport { Configuration } from '../types/config-types';\n\n/**\n * Default configuration\n */\nexport const DEFAULT_CONFIG: Configuration = {\n preserveNamespaces: true,\n preserveComments: true,\n preserveProcessingInstr: true,\n preserveCDATA: true,\n preserveTextNodes: true,\n preserveWhitespace: false,\n preserveAttributes: true,\n\n outputOptions: {\n prettyPrint: true,\n indent: 2,\n compact: true,\n json: {},\n xml: {\n declaration: true,\n },\n },\n\n propNames: {\n namespace: \"$ns\",\n prefix: \"$pre\",\n attributes: \"$attr\",\n value: \"$val\",\n cdata: \"$cdata\",\n comments: \"$cmnt\",\n instruction: \"$pi\", \n target: \"$trgt\", \n children: \"$children\",\n },\n};","/**\n * XJX - Facade class for XML-JSON conversion operations\n */\nimport { XmlToJsonConverter } from \"./core/converters/xml-to-json-converter\";\nimport { JsonToXmlConverter } from \"./core/converters/json-to-xml-converter\";\nimport { Configuration } from \"./core/types/config-types\";\nimport { DEFAULT_CONFIG } from \"./core/config/config\";\nimport { DOMAdapter } from \"./core/adapters/dom-adapter\";\nimport { XmlUtil } from \"./core/utils/xml-utils\";\nimport { JsonUtil } from \"./core/utils/json-utils\";\nimport { ValueTransformer } from \"./core/transformers\";\n\nexport class XJX {\n private config: Configuration;\n private xmlToJsonConverter: XmlToJsonConverter;\n private jsonToXmlConverter: JsonToXmlConverter;\n private jsonUtil: JsonUtil;\n private xmlUtil: XmlUtil;\n\n /**\n * Constructor for XJX utility\n * @param config Configuration options\n */\n constructor(config: Partial = {}) {\n // First create a jsonUtil instance with default config to use its methods\n this.jsonUtil = new JsonUtil(DEFAULT_CONFIG);\n\n // Create a deep clone of the default config\n const defaultClone = this.jsonUtil.deepClone(DEFAULT_CONFIG);\n\n // Deep merge with the provided config\n this.config = this.jsonUtil.deepMerge(defaultClone, config);\n\n // Re-initialize jsonUtil with the merged config\n this.jsonUtil = new JsonUtil(this.config);\n\n // Initialize other components\n this.xmlUtil = new XmlUtil(this.config);\n this.xmlToJsonConverter = new XmlToJsonConverter(this.config);\n this.jsonToXmlConverter = new JsonToXmlConverter(this.config);\n }\n\n /**\n * Convert XML string to JSON\n * @param xmlString XML content as string\n * @returns JSON object representing the XML content\n */\n public xmlToJson(xmlString: string): Record {\n return this.xmlToJsonConverter.convert(xmlString);\n }\n\n /**\n * Convert JSON object back to XML string\n * @param jsonObj JSON object to convert\n * @returns XML string\n */\n public jsonToXml(jsonObj: Record): string {\n return this.jsonToXmlConverter.convert(jsonObj);\n }\n\n /**\n * Pretty print an XML string\n * @param xmlString XML string to format\n * @returns Formatted XML string\n */\n public prettyPrintXml(xmlString: string): string {\n return this.xmlUtil.prettyPrintXml(xmlString);\n }\n\n /**\n * Safely retrieves a value from a JSON object using a dot-separated path.\n * @param obj The input JSON object\n * @param path The dot-separated path string (e.g., \"root.item.description.$val\")\n * @param fallback Value to return if the path does not resolve\n * @returns The value at the specified path or the fallback value\n */\n public getPath(\n obj: Record,\n path: string,\n fallback: any = undefined\n ): any {\n return this.jsonUtil.getPath(obj, path, fallback);\n }\n\n /**\n * Validate XML string\n * @param xmlString XML string to validate\n * @returns Validation result\n */\n public validateXML(xmlString: string): {\n isValid: boolean;\n message?: string;\n } {\n return this.xmlUtil.validateXML(xmlString);\n }\n\n /**\n * Generate a JSON schema based on the current configuration\n * @returns JSON schema object for validating XML-JSON documents\n */\n public generateJsonSchema(): Record {\n return this.jsonUtil.generateJsonSchema();\n }\n\n /**\n * Convert a standard JSON object to the XML-like JSON structure\n * @param obj Standard JSON object\n * @param root Optional root element configuration (string or object with properties)\n * @returns XML-like JSON object ready for conversion to XML\n */\n public objectToXJX(obj: any, root?: string | Record): Record {\n return this.jsonUtil.objectToXJX(obj, root);\n }\n\n /**\n * Generate an example JSON object that matches the current configuration\n * @param rootName Name of the root element\n * @returns Example JSON object\n */\n public generateJsonExample(rootName: string = \"root\"): Record {\n return this.jsonUtil.generateExample(rootName);\n }\n\n /**\n * Add a value transformer to the configuration\n * @param transformer Value transformer to add\n * @returns This XJX instance for chaining\n */\n public addTransformer(transformer: ValueTransformer): XJX {\n if (!this.config.valueTransforms) {\n this.config.valueTransforms = [];\n }\n this.config.valueTransforms.push(transformer);\n return this;\n }\n\n /**\n * Removes all value transformers from the configuration\n * @returns This XJX instance for chaining\n */\n public clearTransformers(): XJX {\n this.config.valueTransforms = [];\n return this;\n }\n\n /**\n * Clean up any resources\n */\n public cleanup(): void {\n DOMAdapter.cleanup();\n }\n}","/**\n * Value transformation types and base class for the XJX library\n */\nimport { Configuration } from '../types/config-types';\n\n/**\n * Direction of the transformation\n */\nexport type TransformDirection = 'xml-to-json' | 'json-to-xml';\n\n/**\n * Context provided to value transformers\n */\nexport interface TransformContext {\n // Core transformation info\n direction: TransformDirection; // Direction of the current transformation\n \n // Node information\n nodeName: string; // Name of the current node\n nodeType: number; // DOM node type (element, text, etc.)\n namespace?: string; // Namespace URI if available\n prefix?: string; // Namespace prefix if available\n \n // Structure information\n path: string; // Dot-notation path to current node\n isAttribute: boolean; // Whether the current value is from an attribute\n attributeName?: string; // Name of attribute if isAttribute is true\n \n // Parent context (creates a chain)\n parent?: TransformContext; // Reference to parent context for traversal\n \n // Configuration reference\n config: Configuration; // Reference to the current configuration\n}\n\n/**\n * Abstract base class for value transformers\n */\nexport abstract class ValueTransformer {\n /**\n * Process a value, transforming it if applicable\n * @param value Value to potentially transform\n * @param context Context including direction and other information\n * @returns Transformed value or original if not applicable\n */\n process(value: any, context: TransformContext): any {\n if (context.direction === 'xml-to-json') {\n return this.xmlToJson(value, context);\n } else {\n return this.jsonToXml(value, context);\n }\n }\n\n /**\n * Transform a value from XML to JSON representation\n * @param value Value from XML\n * @param context Transformation context\n * @returns Transformed value for JSON\n */\n protected xmlToJson(value: any, context: TransformContext): any {\n // Default implementation returns original value\n return value;\n }\n\n /**\n * Transform a value from JSON to XML representation\n * @param value Value from JSON\n * @param context Transformation context\n * @returns Transformed value for XML\n */\n protected jsonToXml(value: any, context: TransformContext): any {\n // Default implementation returns original value\n return value;\n }\n}","// Import locally so you can use it below\nimport { XJX } from './XJX';\n\n// Core components\nexport { XJX };\nexport { Configuration } from './core/types/config-types';\nexport { DEFAULT_CONFIG } from './core/config/config';\n\n// Error handling\nexport { XJXError } from './core/types/error-types';\n\n// Allow custom transformers\nexport { ValueTransformer } from './core/transformers/ValueTransformer';\n\n// Default export\nexport default XJX;"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/examples/browser-example.html b/examples/browser-example.html new file mode 100644 index 0000000..6284e43 --- /dev/null +++ b/examples/browser-example.html @@ -0,0 +1,545 @@ + + + + + + XJX Browser Example + + + +

XJX Browser Example

+ +
+

Configuration

+
+
+

Preservation Options

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+

Output Options

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+

Property Names

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+ + + +
+ +
+
+

XML

+ +
+ +
+

JSON

+ +
+
+ +
+

Path Navigation

+

Use dot notation to navigate the JSON structure and extract specific values

+ +
+
+ + + + +
+ +
+ + +
+
+
+ + + + + + + \ No newline at end of file diff --git a/examples/simple-example.js b/examples/simple-example.js new file mode 100644 index 0000000..2706965 --- /dev/null +++ b/examples/simple-example.js @@ -0,0 +1,63 @@ +// Simple example of using the XJX library +import { XJX } from '../dist/index.js'; + +// Sample XML string +const xmlString = ` + + + The Great Gatsby + F. Scott Fitzgerald + 1925 + + + + + To Kill a Mockingbird + Harper Lee + 1960 + + + +`; + +// Create an instance of XJX with default configuration +const xjx = new XJX(); + +// Convert XML to JSON +console.log('Converting XML to JSON...'); +const jsonObj = xjx.xmlToJson(xmlString); +console.log('JSON result:'); +console.log(JSON.stringify(jsonObj, null, 2)); + +// Using getPath to extract specific values +console.log('\nExtracting specific values using getPath:'); +const bookTitle = xjx.getPath(jsonObj, 'library.book.title.$val'); +console.log(`Book title: ${bookTitle}`); + +const bookYear = xjx.getPath(jsonObj, 'library.book.year.$val'); +console.log(`Book year: ${bookYear}`); + +const bookId = xjx.getPath(jsonObj, 'library.book.$attr.id.$val'); +console.log(`Book ID: ${bookId}`); + +// Convert JSON back to XML +console.log('\nConverting back to XML...'); +const newXml = xjx.jsonToXml(jsonObj); +console.log('XML result:'); +console.log(newXml); + +// Pretty print XML +console.log('\nPretty printing XML:'); +const prettyXml = xjx.prettyPrintXml(xmlString); +console.log(prettyXml); + +// Validate XML +console.log('\nValidating XML:'); +const validationResult = xjx.validateXML(xmlString); +console.log(`XML is valid: ${validationResult.isValid}`); +if (!validationResult.isValid) { + console.log(`Validation error: ${validationResult.message}`); +} + +// Clean up when done (important for Node.js environments) +xjx.cleanup(); \ No newline at end of file diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..a7f4e48 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,46 @@ +/** @type {import('ts-jest').JestConfigWithTsJest} */ +const config = { + preset: 'ts-jest/presets/default-esm', + testEnvironment: 'jsdom', // Use jsdom for browser-like environment + extensionsToTreatAsEsm: ['.ts'], + moduleNameMapper: { + '^(\\.{1,2}/.*)\\.js$': '$1', + }, + transform: { + '^.+\\.tsx?$': [ + 'ts-jest', + { + useESM: true, + }, + ], + }, + coverageDirectory: 'coverage', + collectCoverageFrom: [ + 'src/**/*.ts', + '!src/**/*.d.ts', + '!src/**/index.ts', + ], + testMatch: [ + '**/test/**/*.ts?(x)', // Look for tests in the test directory + '**/?(*.)+(spec|test).ts?(x)' + ], + testPathIgnorePatterns: [ + '/node_modules/', + '/dist/' + ], + setupFilesAfterEnv: [ + '/test/jest.setup.ts' + ], + reporters: [ + 'default', + ['jest-html-reporters', { + publicPath: 'reports/', + filename: 'test-report.html', + expand: false, // expands test case results + includeFailureMsg: true, + includeConsoleLog: true + }] + ] +}; + +export default config; \ No newline at end of file diff --git a/lib/xmlToJSON.js b/lib/xmlToJSON.js deleted file mode 100644 index 229ffca..0000000 --- a/lib/xmlToJSON.js +++ /dev/null @@ -1,242 +0,0 @@ -/* Copyright 2015 William Summers, MetaTribal LLC - * adapted from https://developer.mozilla.org/en-US/docs/JXON - * - * Licensed under the MIT License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://opensource.org/licenses/MIT - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/** - * @author William Summers - * - */ - -var xmlToJSON = (function () { - - this.version = "1.3.4"; - - var options = { // set up the default options - mergeCDATA: true, // extract cdata and merge with text - grokAttr: true, // convert truthy attributes to boolean, etc - grokText: true, // convert truthy text/attr to boolean, etc - normalize: true, // collapse multiple spaces to single space - xmlns: true, // include namespaces as attribute in output - namespaceKey: '_ns', // tag name for namespace objects - textKey: '_text', // tag name for text nodes - valueKey: '_value', // tag name for attribute values - attrKey: '_attr', // tag for attr groups - cdataKey: '_cdata', // tag for cdata nodes (ignored if mergeCDATA is true) - attrsAsObject: true, // if false, key is used as prefix to name, set prefix to '' to merge children and attrs. - stripAttrPrefix: true, // remove namespace prefixes from attributes - stripElemPrefix: true, // for elements of same name in diff namespaces, you can enable namespaces and access the nskey property - childrenAsArray: true // force children into arrays - }; - - var prefixMatch = new RegExp(/(?!xmlns)^.*:/); - var trimMatch = new RegExp(/^\s+|\s+$/g); - - this.grokType = function (sValue) { - if (/^\s*$/.test(sValue)) { - return null; - } - if (/^(?:true|false)$/i.test(sValue)) { - return sValue.toLowerCase() === "true"; - } - if (isFinite(sValue)) { - return parseFloat(sValue); - } - return sValue; - }; - - this.parseString = function (xmlString, opt) { - return this.parseXML(this.stringToXML(xmlString), opt); - } - - this.parseXML = function (oXMLParent, opt) { - - // initialize options - for (var key in opt) { - options[key] = opt[key]; - } - - var vResult = {}, - nLength = 0, - sCollectedTxt = ""; - - // parse namespace information - if (options.xmlns && oXMLParent.namespaceURI) { - vResult[options.namespaceKey] = oXMLParent.namespaceURI; - } - - // parse attributes - // using attributes property instead of hasAttributes method to support older browsers - if (oXMLParent.attributes && oXMLParent.attributes.length > 0) { - var vAttribs = {}; - - for (nLength; nLength < oXMLParent.attributes.length; nLength++) { - var oAttrib = oXMLParent.attributes.item(nLength); - vContent = {}; - var attribName = ''; - - if (options.stripAttrPrefix) { - attribName = oAttrib.name.replace(prefixMatch, ''); - - } else { - attribName = oAttrib.name; - } - - if (options.grokAttr) { - vContent[options.valueKey] = this.grokType(oAttrib.value.replace(trimMatch, '')); - } else { - vContent[options.valueKey] = oAttrib.value.replace(trimMatch, ''); - } - - if (options.xmlns && oAttrib.namespaceURI) { - vContent[options.namespaceKey] = oAttrib.namespaceURI; - } - - if (options.attrsAsObject) { // attributes with same local name must enable prefixes - vAttribs[attribName] = vContent; - } else { - vResult[options.attrKey + attribName] = vContent; - } - } - - if (options.attrsAsObject) { - vResult[options.attrKey] = vAttribs; - } else { } - } - - // iterate over the children - if (oXMLParent.hasChildNodes()) { - for (var oNode, sProp, vContent, nItem = 0; nItem < oXMLParent.childNodes.length; nItem++) { - oNode = oXMLParent.childNodes.item(nItem); - - if (oNode.nodeType === 4) { - if (options.mergeCDATA) { - sCollectedTxt += oNode.nodeValue; - } else { - if (vResult.hasOwnProperty(options.cdataKey)) { - if (vResult[options.cdataKey].constructor !== Array) { - vResult[options.cdataKey] = [vResult[options.cdataKey]]; - } - vResult[options.cdataKey].push(oNode.nodeValue); - - } else { - if (options.childrenAsArray) { - vResult[options.cdataKey] = []; - vResult[options.cdataKey].push(oNode.nodeValue); - } else { - vResult[options.cdataKey] = oNode.nodeValue; - } - } - } - } /* nodeType is "CDATASection" (4) */ - else if (oNode.nodeType === 3) { - sCollectedTxt += oNode.nodeValue; - } /* nodeType is "Text" (3) */ - else if (oNode.nodeType === 1) { /* nodeType is "Element" (1) */ - - if (nLength === 0) { - vResult = {}; - } - - // using nodeName to support browser (IE) implementation with no 'localName' property - if (options.stripElemPrefix) { - sProp = oNode.nodeName.replace(prefixMatch, ''); - } else { - sProp = oNode.nodeName; - } - - vContent = xmlToJSON.parseXML(oNode); - - if (vResult.hasOwnProperty(sProp)) { - if (vResult[sProp].constructor !== Array) { - vResult[sProp] = [vResult[sProp]]; - } - vResult[sProp].push(vContent); - - } else { - if (options.childrenAsArray) { - vResult[sProp] = []; - vResult[sProp].push(vContent); - } else { - vResult[sProp] = vContent; - } - nLength++; - } - } - } - } else if (!sCollectedTxt) { // no children and no text, return null - if (options.childrenAsArray) { - vResult[options.textKey] = []; - vResult[options.textKey].push(null); - } else { - vResult[options.textKey] = null; - } - } - - if (sCollectedTxt) { - if (options.grokText) { - var value = this.grokType(sCollectedTxt.replace(trimMatch, '')); - if (value !== null && value !== undefined) { - vResult[options.textKey] = value; - } - } else if (options.normalize) { - vResult[options.textKey] = sCollectedTxt.replace(trimMatch, '').replace(/\s+/g, " "); - } else { - vResult[options.textKey] = sCollectedTxt.replace(trimMatch, ''); - } - } - - return vResult; - } - - - // Convert xmlDocument to a string - // Returns null on failure - this.xmlToString = function (xmlDoc) { - try { - var xmlString = xmlDoc.xml ? xmlDoc.xml : (new XMLSerializer()).serializeToString(xmlDoc); - return xmlString; - } catch (err) { - return null; - } - } - - // Convert a string to XML Node Structure - // Returns null on failure - this.stringToXML = function (xmlString) { - try { - var xmlDoc = null; - - if (window.DOMParser) { - - var parser = new DOMParser(); - xmlDoc = parser.parseFromString(xmlString, "text/xml"); - - return xmlDoc; - } else { - xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = false; - xmlDoc.loadXML(xmlString); - - return xmlDoc; - } - } catch (e) { - return null; - } - } - - return this; -}).call({}); - -if (typeof module != "undefined" && module !== null && module.exports) module.exports = xmlToJSON; -else if (typeof define === "function" && define.amd) define(function () { return xmlToJSON }); diff --git a/lib/xmlToJSON.min.js b/lib/xmlToJSON.min.js deleted file mode 100644 index dd67b74..0000000 --- a/lib/xmlToJSON.min.js +++ /dev/null @@ -1 +0,0 @@ -var xmlToJSON = function () { this.version = "1.3.4"; var e = { mergeCDATA: !0, grokAttr: !0, grokText: !0, normalize: !0, xmlns: !0, namespaceKey: "_ns", textKey: "_text", valueKey: "_value", attrKey: "_attr", cdataKey: "_cdata", attrsAsObject: !0, stripAttrPrefix: !0, stripElemPrefix: !0, childrenAsArray: !0 }, t = new RegExp(/(?!xmlns)^.*:/), r = new RegExp(/^\s+|\s+$/g); return this.grokType = function (e) { return /^\s*$/.test(e) ? null : /^(?:true|false)$/i.test(e) ? "true" === e.toLowerCase() : isFinite(e) ? parseFloat(e) : e }, this.parseString = function (e, t) { return this.parseXML(this.stringToXML(e), t) }, this.parseXML = function (a, n) { for (var s in n) e[s] = n[s]; var l = {}, i = 0, o = ""; if (e.xmlns && a.namespaceURI && (l[e.namespaceKey] = a.namespaceURI), a.attributes && a.attributes.length > 0) { var c = {}; for (i; i < a.attributes.length; i++) { var u = a.attributes.item(i); m = {}; var p = ""; p = e.stripAttrPrefix ? u.name.replace(t, "") : u.name, e.grokAttr ? m[e.valueKey] = this.grokType(u.value.replace(r, "")) : m[e.valueKey] = u.value.replace(r, ""), e.xmlns && u.namespaceURI && (m[e.namespaceKey] = u.namespaceURI), e.attrsAsObject ? c[p] = m : l[e.attrKey + p] = m } e.attrsAsObject && (l[e.attrKey] = c) } if (a.hasChildNodes()) for (var y, d, m, h = 0; h < a.childNodes.length; h++)4 === (y = a.childNodes.item(h)).nodeType ? e.mergeCDATA ? o += y.nodeValue : l.hasOwnProperty(e.cdataKey) ? (l[e.cdataKey].constructor !== Array && (l[e.cdataKey] = [l[e.cdataKey]]), l[e.cdataKey].push(y.nodeValue)) : e.childrenAsArray ? (l[e.cdataKey] = [], l[e.cdataKey].push(y.nodeValue)) : l[e.cdataKey] = y.nodeValue : 3 === y.nodeType ? o += y.nodeValue : 1 === y.nodeType && (0 === i && (l = {}), d = e.stripElemPrefix ? y.nodeName.replace(t, "") : y.nodeName, m = xmlToJSON.parseXML(y), l.hasOwnProperty(d) ? (l[d].constructor !== Array && (l[d] = [l[d]]), l[d].push(m)) : (e.childrenAsArray ? (l[d] = [], l[d].push(m)) : l[d] = m, i++)); else o || (e.childrenAsArray ? (l[e.textKey] = [], l[e.textKey].push(null)) : l[e.textKey] = null); if (o) if (e.grokText) { var x = this.grokType(o.replace(r, "")); null !== x && void 0 !== x && (l[e.textKey] = x) } else e.normalize ? l[e.textKey] = o.replace(r, "").replace(/\s+/g, " ") : l[e.textKey] = o.replace(r, ""); return l }, this.xmlToString = function (e) { try { return e.xml ? e.xml : (new XMLSerializer).serializeToString(e) } catch (e) { return null } }, this.stringToXML = function (e) { try { var t = null; return window.DOMParser ? t = (new DOMParser).parseFromString(e, "text/xml") : (t = new ActiveXObject("Microsoft.XMLDOM"), t.async = !1, t.loadXML(e), t) } catch (e) { return null } }, this }.call({}); "undefined" != typeof module && null !== module && module.exports ? module.exports = xmlToJSON : "function" == typeof define && define.amd && define(function () { return xmlToJSON }); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..44ef8fb --- /dev/null +++ b/package-lock.json @@ -0,0 +1,9917 @@ +{ + "name": "xjx", + "version": "3.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "xjx", + "version": "3.0.0", + "license": "MIT", + "devDependencies": { + "@rollup/plugin-commonjs": "^25.0.8", + "@rollup/plugin-node-resolve": "^15.3.1", + "@rollup/plugin-terser": "^0.4.4", + "@rollup/plugin-typescript": "^11.1.6", + "@types/jest": "^29.5.0", + "@types/node": "^18.15.11", + "@typescript-eslint/eslint-plugin": "^5.57.1", + "@typescript-eslint/parser": "^5.57.1", + "eslint": "^8.37.0", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-prettier": "^4.2.1", + "jest": "^29.6.0", + "jest-environment-jsdom": "^29.6.0", + "jest-html-reporters": "^3.1.7", + "jsdom": "^26.1.0", + "prettier": "^2.8.7", + "rimraf": "^4.4.1", + "rollup": "^3.29.5", + "rollup-plugin-dts": "^5.3.1", + "rollup-plugin-filesize": "^10.0.0", + "rollup-plugin-gzip": "^4.0.1", + "rollup-plugin-visualizer": "^5.14.0", + "ts-jest": "^29.1.1", + "typedoc": "^0.24.1", + "typescript": "^5.1.6" + }, + "engines": { + "node": ">=14.16.0" + }, + "peerDependencies": { + "jsdom": "^21.1.1" + }, + "peerDependenciesMeta": { + "@xmldom/xmldom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@asamuzakjp/css-color": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.1.4.tgz", + "integrity": "sha512-SeuBV4rnjpFNjI8HSgKUwteuFdkHwkboq31HWzznuqgySQir+jSTczoWVVL4jvOjKjuH80fMDG0Fvg1Sb+OJsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", + "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", + "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", + "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@csstools/color-helpers": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", + "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.3.tgz", + "integrity": "sha512-XBG3talrhid44BY1x3MHzUx/aTG8+x/Zi57M4aTKK9RFB4aLlF3TTSzfzn8nWVHWL3FgAXAxmupmDd6VWww+pw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.9.tgz", + "integrity": "sha512-wILs5Zk7BU86UArYBJTPy/FMPPKVKHMj1ycCEyf3VUptol0JNRLFU/BZsJ4aiIHJEbSLiizzRrw8Pc1uAEDrXw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.0.2", + "@csstools/css-calc": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", + "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", + "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.6.1.tgz", + "integrity": "sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/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, + "license": "Python-2.0" + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/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, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/fs/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/git": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", + "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/@npmcli/git/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", + "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "dev": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/move-file/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", + "dev": true, + "license": "ISC", + "dependencies": { + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "25.0.8", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.8.tgz", + "integrity": "sha512-ZEZWTK5n6Qde0to4vS9Mr5x/0UZoqCxPVR9KRUjU4kA2sO7GEUn1fop0DAwpO6z0Nw/kJON9bDmSxdWxO/TT1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", + "integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-terser": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", + "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "serialize-javascript": "^6.0.1", + "smob": "^1.0.0", + "terser": "^5.17.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-typescript": { + "version": "11.1.6", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-11.1.6.tgz", + "integrity": "sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.14.0||^3.0.0||^4.0.0", + "tslib": "*", + "typescript": ">=3.7.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + }, + "tslib": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@sigstore/bundle": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", + "integrity": "sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.2.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", + "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz", + "integrity": "sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "make-fetch-happen": "^11.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/@sigstore/sign/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sigstore/sign/node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/@sigstore/sign/node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@sigstore/tuf": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", + "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.2.0", + "tuf-js": "^1.1.7" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jsdom": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", + "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "18.19.86", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.86.tgz", + "integrity": "sha512-fifKayi175wLyKyc5qUfyENhQ1dCNI1UNjp653d8kuYcPQN5JhX3dGuP/XmvPTg/xRBn1VTLpbmi+H/Mr7tLfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.0.tgz", + "integrity": "sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "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" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.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.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "license": "MIT", + "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.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.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/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.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/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true, + "license": "ISC" + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", + "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-sequence-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.3.tgz", + "integrity": "sha512-+fksAx9eG3Ab6LDnLs3ZqZa8KVJ/jYnX+D4Qe1azX+LFGFAXqynCQLOdLpNYN/l9e7l6hMWwZbrnctqr6eSQSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brotli-size": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/brotli-size/-/brotli-size-4.0.0.tgz", + "integrity": "sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "0.1.1" + }, + "engines": { + "node": ">= 10.16.0" + } + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cacache": { + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001715", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001715.tgz", + "integrity": "sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", + "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", + "dev": true, + "license": "MIT" + }, + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "license": "MIT", + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q==", + "dev": true + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.141", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.141.tgz", + "integrity": "sha512-qS+qH9oqVYc1ooubTiB9l904WVyM6qNYxtOEEGReoZXw3xlqeYdFr5GclNzbkAufWgwWLEPoDi3d9MoRwwIjGw==", + "dev": true, + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/entities": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", + "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/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, + "license": "Python-2.0" + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", + "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/filesize": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.4.0.tgz", + "integrity": "sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "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==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "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, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-extra/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "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/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gzip-size/node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.3.tgz", + "integrity": "sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-cache-semantics": { + "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, + "license": "BSD-2-Clause" + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", + "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true, + "license": "ISC" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", + "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0", + "jsdom": "^20.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jest-environment-jsdom/node_modules/jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-html-reporters": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/jest-html-reporters/-/jest-html-reporters-3.1.7.tgz", + "integrity": "sha512-GTmjqK6muQ0S0Mnksf9QkL9X9z2FGIpNSxC52E0PHDzjPQ1XDu2+XTI3B3FS43ZiUzD1f354/5FfwbNIBzT7ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "fs-extra": "^10.0.0", + "open": "^8.0.3" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsdom": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", + "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssstyle": "^4.2.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.5.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^5.1.1", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.1.1", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/jsdom/node_modules/cssstyle": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.3.1.tgz", + "integrity": "sha512-ZgW+Jgdd7i52AaLYCriF8Mxqft0gD/R9i9wi6RWBhs1pqdPEzPjym7rvRKi397WmQFf3SlyUsszhw+VVCbx79Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^3.1.2", + "rrweb-cssom": "^0.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/jsdom/node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/jsdom/node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/jsdom/node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/jsdom/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/jsdom/node_modules/tough-cookie": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/jsdom/node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/jsdom/node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/jsdom/node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/jsdom/node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/jsdom/node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/jsdom/node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "node_modules/make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/make-fetch-happen/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/make-fetch-happen/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/make-fetch-happen/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "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/make-fetch-happen/node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/make-fetch-happen/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/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, + "license": "ISC" + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect/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, + "license": "ISC" + }, + "node_modules/minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-fetch/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-fetch/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, + "license": "ISC" + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/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, + "license": "ISC" + }, + "node_modules/minipass-json-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.2.tgz", + "integrity": "sha512-myxeeTm57lYs8pH2nxPzmEEg8DGIgW+9mv6D4JZD2pa81I/OBjeU7PtICXV6c9eRGTA5JMDsuIPUZRCyBMYNhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-json-stream/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, + "license": "ISC" + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/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, + "license": "ISC" + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/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, + "license": "ISC" + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-gyp": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", + "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", + "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-packlist": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^6.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz", + "integrity": "sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-registry-fetch": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/nwsapi": { + "version": "2.2.20", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz", + "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==", + "dev": true, + "license": "MIT" + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/pacote": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", + "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^5.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.3.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/read-package-json": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", + "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", + "deprecated": "This package is no longer supported. Please use @npmcli/package-json instead.", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/read-package-json/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true, + "license": "MIT" + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^9.2.0" + }, + "bin": { + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.29.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", + "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-dts": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-5.3.1.tgz", + "integrity": "sha512-gusMi+Z4gY/JaEQeXnB0RUdU82h1kF0WYzCWgVmV4p3hWXqelaKuCvcJawfeg+EKn2T1Ie+YWF2OiN1/L8bTVg==", + "dev": true, + "license": "LGPL-3.0", + "dependencies": { + "magic-string": "^0.30.2" + }, + "engines": { + "node": ">=v14.21.3" + }, + "funding": { + "url": "https://github.com/sponsors/Swatinem" + }, + "optionalDependencies": { + "@babel/code-frame": "^7.22.5" + }, + "peerDependencies": { + "rollup": "^3.0", + "typescript": "^4.1 || ^5.0" + } + }, + "node_modules/rollup-plugin-filesize": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-filesize/-/rollup-plugin-filesize-10.0.0.tgz", + "integrity": "sha512-JAYYhzCcmGjmCzo3LEHSDE3RAPHKIeBdpqRhiyZSv5o/3wFhktUOzYAWg/uUKyEu5dEaVaql6UOmaqHx1qKrZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.8", + "boxen": "^5.0.0", + "brotli-size": "4.0.0", + "colors": "1.4.0", + "filesize": "^6.1.0", + "gzip-size": "^6.0.0", + "pacote": "^15.1.1", + "terser": "^5.6.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/rollup-plugin-gzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-gzip/-/rollup-plugin-gzip-4.0.1.tgz", + "integrity": "sha512-HVukJ5vwTxgzKaNeKCNEqFRQ+/T/j/3zqoUaCN3VGTt8/Mn7Wu2nMCE8VBIDubjM5U+QGgiWs6fYysn63JZY1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "rollup": ">=2.0.0" + } + }, + "node_modules/rollup-plugin-visualizer": { + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.14.0.tgz", + "integrity": "sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==", + "dev": true, + "license": "MIT", + "dependencies": { + "open": "^8.4.0", + "picomatch": "^4.0.2", + "source-map": "^0.7.4", + "yargs": "^17.5.1" + }, + "bin": { + "rollup-plugin-visualizer": "dist/bin/cli.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "rolldown": "1.x", + "rollup": "2.x || 3.x || 4.x" + }, + "peerDependenciesMeta": { + "rolldown": { + "optional": true + }, + "rollup": { + "optional": true + } + } + }, + "node_modules/rollup-plugin-visualizer/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/rollup-plugin-visualizer/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true, + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shiki": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.7.tgz", + "integrity": "sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/sigstore": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.9.0.tgz", + "integrity": "sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "@sigstore/sign": "^1.0.0", + "@sigstore/tuf": "^1.0.3", + "make-fetch-happen": "^11.0.1" + }, + "bin": { + "sigstore": "bin/sigstore.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/sigstore/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/sigstore/node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/sigstore/node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/smob": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz", + "integrity": "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==", + "dev": true, + "license": "MIT" + }, + "node_modules/socks": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", + "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", + "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ssri/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/terser": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", + "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/ts-jest": { + "version": "29.3.2", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.2.tgz", + "integrity": "sha512-bJJkrWc6PjFVz5g2DGCNUo8z7oFEYaz1xP1NpeDU7KNLMWPpEyV8Chbpkn8xjzgRDpQhnGMyvyldoL7h8JXyug==", + "dev": true, + "license": "MIT", + "dependencies": { + "bs-logger": "^0.2.6", + "ejs": "^3.1.10", + "fast-json-stable-stringify": "^2.1.0", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.7.1", + "type-fest": "^4.39.1", + "yargs-parser": "^21.1.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.40.0.tgz", + "integrity": "sha512-ABHZ2/tS2JkvH1PEjxFDTUWC8dB5OsIGZP4IFLhR293GqT5Y5qB1WwL2kMPYhQW9DVgVD8Hd7I8gjwPIf5GFkw==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tuf-js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", + "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/tuf-js/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/tuf-js/node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/tuf-js/node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedoc": { + "version": "0.24.8", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.24.8.tgz", + "integrity": "sha512-ahJ6Cpcvxwaxfu4KtjA8qZNqS43wYt6JL27wYiIgl1vd38WW/KWX11YuAeZhuz9v+ttrutSsgK+XO1CjL1kA3w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "lunr": "^2.3.9", + "marked": "^4.3.0", + "minimatch": "^9.0.0", + "shiki": "^0.14.1" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 14.14" + }, + "peerDependencies": { + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x" + } + }, + "node_modules/typedoc/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/typedoc/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typescript": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true, + "license": "MIT" + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vscode-oniguruma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-textmate": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", + "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json index 47251d5..ccbac3b 100644 --- a/package.json +++ b/package.json @@ -1,28 +1,114 @@ { - "name": "xmltojson", - "version": "1.3.4", - "description": "Configurable, lightweight XML to JSON converter.", - "main": "./lib/xmlToJSON.js", - "directories": { - "test": "test" + "name": "xjx", + "version": "1.0.0", + "description": "A modern, confgurable ESM library for converting XML to JSON and back again! (support for namespaces, attributes, processing instructions, comments, mixed-content, and more!)", + "type": "module", + "main": "./dist/index.js", + "module": "./dist/index.js", + "browser": "./dist/xjx.umd.js", + "unpkg": "./dist/xjx.min.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "import": "./dist/index.js", + "require": "./dist/xjx.umd.js", + "types": "./dist/index.d.ts" + } }, + "files": [ + "dist", + "LICENSE", + "README.md", + "package.json" + ], "scripts": { - "test": "open test/SpecRunner.html" - }, - "repository": { - "type": "git", - "url": "https://github.com/metatribal/xmlToJSON.git" + "clean": "rimraf dist", + "build": "npm run clean && npm run build:types && npm run build:js", + "build:types": "tsc --emitDeclarationOnly --outDir dist/dts", + "build:js": "rollup -c", + "build:prod": "NODE_ENV=production npm run build:js", + "test": "jest", + "test:watch": "jest --watch", + "test:coverage": "jest --coverage", + "test:ci": "jest --ci --coverage --reporters=default --reporters=jest-junit", + "lint": "eslint ./src --ext .ts", + "lint:fix": "eslint ./src --ext .ts --fix", + "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", + "docs": "typedoc --out docs src/index.ts", + "prepublishOnly": "npm run build:prod && npm run test", + "preversion": "npm run lint", + "version": "npm run format && git add -A src", + "postversion": "git push && git push --tags" }, "keywords": [ "xml", + "json", "convert", "transform", - "json" + "parser", + "serializer", + "namespace", + "cdata", + "comment", + "processing-instruction", + "esm", + "browser", + "node" ], - "author": "metatribal", + "author": { + "name": "Your Name", + "email": "your.email@example.com", + "url": "https://your-website.com" + }, "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/yourusername/xjx.git" + }, "bugs": { - "url": "https://github.com/metatribal/xmlToJSON/issues" + "url": "https://github.com/yourusername/xjx/issues" + }, + "homepage": "https://github.com/yourusername/xjx#readme", + "devDependencies": { + "@rollup/plugin-commonjs": "^25.0.8", + "@rollup/plugin-node-resolve": "^15.3.1", + "@rollup/plugin-terser": "^0.4.4", + "@rollup/plugin-typescript": "^11.1.6", + "@types/jest": "^29.5.0", + "@types/node": "^18.15.11", + "@typescript-eslint/eslint-plugin": "^5.57.1", + "@typescript-eslint/parser": "^5.57.1", + "eslint": "^8.37.0", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-prettier": "^4.2.1", + "jest": "^29.6.0", + "jest-environment-jsdom": "^29.6.0", + "jest-html-reporters": "^3.1.7", + "jsdom": "^26.1.0", + "prettier": "^2.8.7", + "rimraf": "^4.4.1", + "rollup": "^3.29.5", + "rollup-plugin-dts": "^5.3.1", + "rollup-plugin-filesize": "^10.0.0", + "rollup-plugin-gzip": "^4.0.1", + "rollup-plugin-visualizer": "^5.14.0", + "ts-jest": "^29.1.1", + "typedoc": "^0.24.1", + "typescript": "^5.1.6" + }, + "peerDependencies": { + "jsdom": "^21.1.1" + }, + "peerDependenciesMeta": { + "jsdom": { + "optional": true + }, + "@xmldom/xmldom": { + "optional": true + } + }, + "engines": { + "node": ">=14.16.0" }, - "homepage": "https://github.com/metatribal/xmlToJSON" -} \ No newline at end of file + "sideEffects": false +} diff --git a/reports/jest-html-reporters-attach/test-report/index.js b/reports/jest-html-reporters-attach/test-report/index.js new file mode 100644 index 0000000..84233b1 --- /dev/null +++ b/reports/jest-html-reporters-attach/test-report/index.js @@ -0,0 +1,3 @@ +/*! For license information please see index.js.LICENSE.txt */ +!function(){var e={9899:function(e){e.exports="./jest-html-reporters-attach/test-report"},5304:function(e,t,n){"use strict";function r(e,t){for(var n=0;n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,c=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return c=e.done,e},e:function(e){l=!0,i=e},f:function(){try{c||null==n.return||n.return()}finally{if(l)throw i}}}}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0?40*e+55:0,c=t>0?40*t+55:0,s=n>0?40*n+55:0;r[a]=function(e){var t,n=[],r=o(e);try{for(r.s();!(t=r.n()).done;){var a=t.value;n.push(l(a))}}catch(i){r.e(i)}finally{r.f()}return"#"+n.join("")}([i,c,s])}(t,n,r,e)}))}))})),d(0,23).forEach((function(t){var n=t+232,r=l(10*t+8);e[n]="#"+r+r+r})),e}()};function l(e){for(var t=e.toString(16);t.length<2;)t="0"+t;return t}function s(e,t,n,r){var o;return"text"===t?o=function(e,t){if(t.escapeXML)return i.encodeXML(e);return e}(n,r):"display"===t?o=function(e,t,n){t=parseInt(t,10);var r,o={"-1":function(){return"
"},0:function(){return e.length&&u(e)},1:function(){return p(e,"b")},3:function(){return p(e,"i")},4:function(){return p(e,"u")},8:function(){return h(e,"display:none")},9:function(){return p(e,"strike")},22:function(){return h(e,"font-weight:normal;text-decoration:none;font-style:normal")},23:function(){return g(e,"i")},24:function(){return g(e,"u")},39:function(){return m(e,n.fg)},49:function(){return v(e,n.bg)},53:function(){return h(e,"text-decoration:overline")}};o[t]?r=o[t]():4"})).join("")}function d(e,t){for(var n=[],r=e;r<=t;r++)n.push(r);return n}function f(e){var t=null;return 0===(e=parseInt(e,10))?t="all":1===e?t="bold":2")}function h(e,t){return p(e,"span",t)}function m(e,t){return p(e,"span","color:"+t)}function v(e,t){return p(e,"span","background-color:"+t)}function g(e,t){var n;if(e.slice(-1)[0]===t&&(n=e.pop()),n)return""}var b=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),(t=t||{}).colors&&(t.colors=Object.assign({},c.colors,t.colors)),this.options=Object.assign({},c,t),this.stack=[],this.stickyStack=[]}var t,n,a;return t=e,(n=[{key:"toHtml",value:function(e){var t=this;e="string"===typeof e?[e]:e;var n=this.stack,r=this.options,a=[];return this.stickyStack.forEach((function(e){var t=s(n,e.token,e.data,r);t&&a.push(t)})),function(e,t,n){var r=!1;function a(){return""}function i(e){return t.newline?n("display",-1):n("text",e),""}var c=[{pattern:/^\x08+/,sub:a},{pattern:/^\x1b\[[012]?K/,sub:a},{pattern:/^\x1b\[\(B/,sub:a},{pattern:/^\x1b\[[34]8;2;\d+;\d+;\d+m/,sub:function(e){return n("rgb",e),""}},{pattern:/^\x1b\[38;5;(\d+)m/,sub:function(e,t){return n("xterm256Foreground",t),""}},{pattern:/^\x1b\[48;5;(\d+)m/,sub:function(e,t){return n("xterm256Background",t),""}},{pattern:/^\n/,sub:i},{pattern:/^\r+\n/,sub:i},{pattern:/^\r/,sub:i},{pattern:/^\x1b\[((?:\d{1,3};?)+|)m/,sub:function(e,t){r=!0,0===t.trim().length&&(t="0");var a,i=o(t=t.trimRight(";").split(";"));try{for(i.s();!(a=i.n()).done;){var c=a.value;n("display",c)}}catch(l){i.e(l)}finally{i.f()}return""}},{pattern:/^\x1b\[\d?J/,sub:a},{pattern:/^\x1b\[\d{0,3};\d{0,3}f/,sub:a},{pattern:/^\x1b\[?[\d;]{0,3}/,sub:a},{pattern:/^(([^\x1b\x08\r\n])+)/,sub:function(e){return n("text",e),""}}];function l(t,n){n>3&&r||(r=!1,e=e.replace(t.pattern,t.sub))}var s=[],u=e.length;e:for(;u>0;){for(var d=0,f=0,p=c.length;f0?" ".concat(t[5]):""," {")),n+=e(t),r&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,r,o,a){"string"===typeof e&&(e=[[null,e,void 0]]);var i={};if(r)for(var c=0;c0?" ".concat(u[5]):""," {").concat(u[1],"}")),u[5]=a),n&&(u[2]?(u[1]="@media ".concat(u[2]," {").concat(u[1],"}"),u[2]=n):u[2]=n),o&&(u[4]?(u[1]="@supports (".concat(u[4],") {").concat(u[1],"}"),u[4]=o):u[4]="".concat(o)),t.push(u))}},t}},6657:function(e){"use strict";e.exports=function(e){var t=e[1],n=e[3];if(!n)return t;if("function"===typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),o="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),a="/*# ".concat(o," */");return[t].concat([a]).join("\n")}return[t].join("\n")}},4890:function(e){var t={px:{px:1,cm:96/2.54,mm:96/25.4,in:96,pt:96/72,pc:16},cm:{px:2.54/96,cm:1,mm:.1,in:2.54,pt:2.54/72,pc:2.54/6},mm:{px:25.4/96,cm:10,mm:1,in:25.4,pt:25.4/72,pc:25.4/6},in:{px:1/96,cm:1/2.54,mm:1/25.4,in:1,pt:1/72,pc:1/6},pt:{px:.75,cm:72/2.54,mm:72/25.4,in:72,pt:1,pc:12},pc:{px:6/96,cm:6/2.54,mm:6/25.4,in:6,pt:6/72,pc:1},deg:{deg:1,grad:.9,rad:180/Math.PI,turn:360},grad:{deg:400/360,grad:1,rad:200/Math.PI,turn:400},rad:{deg:Math.PI/180,grad:Math.PI/200,rad:1,turn:2*Math.PI},turn:{deg:1/360,grad:1/400,rad:.5/Math.PI,turn:1},s:{s:1,ms:.001},ms:{s:1e3,ms:1},Hz:{Hz:1,kHz:1e3},kHz:{Hz:.001,kHz:1},dpi:{dpi:1,dpcm:1/2.54,dppx:1/96},dpcm:{dpi:2.54,dpcm:1,dppx:2.54/96},dppx:{dpi:96,dpcm:96/2.54,dppx:1}};e.exports=function(e,n,r,o){if(!t.hasOwnProperty(r))throw new Error("Cannot convert to "+r);if(!t[r].hasOwnProperty(n))throw new Error("Cannot convert from "+n+" to "+r);var a=t[r][n]*e;return!1!==o?(o=Math.pow(10,parseInt(o)||5),Math.round(a*o)/o):a}},7892:function(e){e.exports=function(){"use strict";var e=1e3,t=6e4,n=36e5,r="millisecond",o="second",a="minute",i="hour",c="day",l="week",s="month",u="quarter",d="year",f="date",p="Invalid Date",h=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,m=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,v={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var t=["th","st","nd","rd"],n=e%100;return"["+e+(t[(n-20)%10]||t[n]||t[0])+"]"}},g=function(e,t,n){var r=String(e);return!r||r.length>=t?e:""+Array(t+1-r.length).join(n)+e},b={s:g,z:function(e){var t=-e.utcOffset(),n=Math.abs(t),r=Math.floor(n/60),o=n%60;return(t<=0?"+":"-")+g(r,2,"0")+":"+g(o,2,"0")},m:function e(t,n){if(t.date()1)return e(i[0])}else{var c=t.name;x[c]=t,o=c}return!r&&o&&(y=o),o||!r&&y},E=function(e,t){if(w(e))return e.clone();var n="object"==typeof t?t:{};return n.date=e,n.args=arguments,new k(n)},C=b;C.l=S,C.i=w,C.w=function(e,t){return E(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var k=function(){function v(e){this.$L=S(e.locale,null,!0),this.parse(e)}var g=v.prototype;return g.parse=function(e){this.$d=function(e){var t=e.date,n=e.utc;if(null===t)return new Date(NaN);if(C.u(t))return new Date;if(t instanceof Date)return new Date(t);if("string"==typeof t&&!/Z$/i.test(t)){var r=t.match(h);if(r){var o=r[2]-1||0,a=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],o,r[3]||1,r[4]||0,r[5]||0,r[6]||0,a)):new Date(r[1],o,r[3]||1,r[4]||0,r[5]||0,r[6]||0,a)}}return new Date(t)}(e),this.$x=e.x||{},this.init()},g.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},g.$utils=function(){return C},g.isValid=function(){return!(this.$d.toString()===p)},g.isSame=function(e,t){var n=E(e);return this.startOf(t)<=n&&n<=this.endOf(t)},g.isAfter=function(e,t){return E(e)(c=(i=Math.ceil(f/7))>c?i+1:c+1)&&(a=c,r.length=1),r.reverse();a--;)r.push(0);r.reverse()}for((c=s.length)-(a=u.length)<0&&(a=c,r=u,u=s,s=r),n=0;a;)n=(s[--a]=s[a]+u[a]+n)/m|0,s[a]%=m;for(n&&(s.unshift(n),++o),c=s.length;0==s[--c];)s.pop();return t.d=s,t.e=o,l?P(t,f):t}function x(e,t,n){if(e!==~~e||en)throw Error(u+e)}function w(e){var t,n,r,o=e.length-1,a="",i=e[0];if(o>0){for(a+=i,t=1;te.e^a.s<0?1:-1;for(t=0,n=(r=a.d.length)<(o=e.d.length)?r:o;te.d[t]^a.s<0?1:-1;return r===o?0:r>o^a.s<0?1:-1},b.decimalPlaces=b.dp=function(){var e=this,t=e.d.length-1,n=7*(t-e.e);if(t=e.d[t])for(;t%10==0;t/=10)n--;return n<0?0:n},b.dividedBy=b.div=function(e){return S(this,new this.constructor(e))},b.dividedToIntegerBy=b.idiv=function(e){var t=this.constructor;return P(S(this,new t(e),0,1),t.precision)},b.equals=b.eq=function(e){return!this.cmp(e)},b.exponent=function(){return C(this)},b.greaterThan=b.gt=function(e){return this.cmp(e)>0},b.greaterThanOrEqualTo=b.gte=function(e){return this.cmp(e)>=0},b.isInteger=b.isint=function(){return this.e>this.d.length-2},b.isNegative=b.isneg=function(){return this.s<0},b.isPositive=b.ispos=function(){return this.s>0},b.isZero=function(){return 0===this.s},b.lessThan=b.lt=function(e){return this.cmp(e)<0},b.lessThanOrEqualTo=b.lte=function(e){return this.cmp(e)<1},b.logarithm=b.log=function(e){var t,n=this,r=n.constructor,o=r.precision,i=o+5;if(void 0===e)e=new r(10);else if((e=new r(e)).s<1||e.eq(a))throw Error(s+"NaN");if(n.s<1)throw Error(s+(n.s?"NaN":"-Infinity"));return n.eq(a)?new r(0):(l=!1,t=S(A(n,i),A(e,i),i),l=!0,P(t,o))},b.minus=b.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?T(t,e):y(t,(e.s=-e.s,e))},b.modulo=b.mod=function(e){var t,n=this,r=n.constructor,o=r.precision;if(!(e=new r(e)).s)throw Error(s+"NaN");return n.s?(l=!1,t=S(n,e,0,1).times(e),l=!0,n.minus(t)):P(new r(n),o)},b.naturalExponential=b.exp=function(){return E(this)},b.naturalLogarithm=b.ln=function(){return A(this)},b.negated=b.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e},b.plus=b.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?y(t,e):T(t,(e.s=-e.s,e))},b.precision=b.sd=function(e){var t,n,r,o=this;if(void 0!==e&&e!==!!e&&1!==e&&0!==e)throw Error(u+e);if(t=C(o)+1,n=7*(r=o.d.length-1)+1,r=o.d[r]){for(;r%10==0;r/=10)n--;for(r=o.d[0];r>=10;r/=10)n++}return e&&t>n?t:n},b.squareRoot=b.sqrt=function(){var e,t,n,r,o,a,i,c=this,u=c.constructor;if(c.s<1){if(!c.s)return new u(0);throw Error(s+"NaN")}for(e=C(c),l=!1,0==(o=Math.sqrt(+c))||o==1/0?(((t=w(c.d)).length+e)%2==0&&(t+="0"),o=Math.sqrt(t),e=f((e+1)/2)-(e<0||e%2),r=new u(t=o==1/0?"5e"+e:(t=o.toExponential()).slice(0,t.indexOf("e")+1)+e)):r=new u(o.toString()),o=i=(n=u.precision)+3;;)if(r=(a=r).plus(S(c,a,i+2)).times(.5),w(a.d).slice(0,i)===(t=w(r.d)).slice(0,i)){if(t=t.slice(i-3,i+1),o==i&&"4999"==t){if(P(a,n+1,0),a.times(a).eq(c)){r=a;break}}else if("9999"!=t)break;i+=4}return l=!0,P(r,n)},b.times=b.mul=function(e){var t,n,r,o,a,i,c,s,u,d=this,f=d.constructor,p=d.d,h=(e=new f(e)).d;if(!d.s||!e.s)return new f(0);for(e.s*=d.s,n=d.e+e.e,(s=p.length)<(u=h.length)&&(a=p,p=h,h=a,i=s,s=u,u=i),a=[],r=i=s+u;r--;)a.push(0);for(r=u;--r>=0;){for(t=0,o=s+r;o>r;)c=a[o]+h[r]*p[o-r-1]+t,a[o--]=c%m|0,t=c/m|0;a[o]=(a[o]+t)%m|0}for(;!a[--i];)a.pop();return t?++n:a.shift(),e.d=a,e.e=n,l?P(e,f.precision):e},b.toDecimalPlaces=b.todp=function(e,t){var n=this,r=n.constructor;return n=new r(n),void 0===e?n:(x(e,0,i),void 0===t?t=r.rounding:x(t,0,8),P(n,e+C(n)+1,t))},b.toExponential=function(e,t){var n,r=this,o=r.constructor;return void 0===e?n=M(r,!0):(x(e,0,i),void 0===t?t=o.rounding:x(t,0,8),n=M(r=P(new o(r),e+1,t),!0,e+1)),n},b.toFixed=function(e,t){var n,r,o=this,a=o.constructor;return void 0===e?M(o):(x(e,0,i),void 0===t?t=a.rounding:x(t,0,8),n=M((r=P(new a(o),e+C(o)+1,t)).abs(),!1,e+C(r)+1),o.isneg()&&!o.isZero()?"-"+n:n)},b.toInteger=b.toint=function(){var e=this,t=e.constructor;return P(new t(e),C(e)+1,t.rounding)},b.toNumber=function(){return+this},b.toPower=b.pow=function(e){var t,n,r,o,i,c,u=this,d=u.constructor,p=+(e=new d(e));if(!e.s)return new d(a);if(!(u=new d(u)).s){if(e.s<1)throw Error(s+"Infinity");return u}if(u.eq(a))return u;if(r=d.precision,e.eq(a))return P(u,r);if(c=(t=e.e)>=(n=e.d.length-1),i=u.s,c){if((n=p<0?-p:p)<=v){for(o=new d(a),t=Math.ceil(r/7+4),l=!1;n%2&&N((o=o.times(u)).d,t),0!==(n=f(n/2));)N((u=u.times(u)).d,t);return l=!0,e.s<0?new d(a).div(o):P(o,r)}}else if(i<0)throw Error(s+"NaN");return i=i<0&&1&e.d[Math.max(t,n)]?-1:1,u.s=1,l=!1,o=e.times(A(u,r+12)),l=!0,(o=E(o)).s=i,o},b.toPrecision=function(e,t){var n,r,o=this,a=o.constructor;return void 0===e?r=M(o,(n=C(o))<=a.toExpNeg||n>=a.toExpPos):(x(e,1,i),void 0===t?t=a.rounding:x(t,0,8),r=M(o=P(new a(o),e,t),e<=(n=C(o))||n<=a.toExpNeg,e)),r},b.toSignificantDigits=b.tosd=function(e,t){var n=this.constructor;return void 0===e?(e=n.precision,t=n.rounding):(x(e,1,i),void 0===t?t=n.rounding:x(t,0,8)),P(new n(this),e,t)},b.toString=b.valueOf=b.val=b.toJSON=function(){var e=this,t=C(e),n=e.constructor;return M(e,t<=n.toExpNeg||t>=n.toExpPos)};var S=function(){function e(e,t){var n,r=0,o=e.length;for(e=e.slice();o--;)n=e[o]*t+r,e[o]=n%m|0,r=n/m|0;return r&&e.unshift(r),e}function t(e,t,n,r){var o,a;if(n!=r)a=n>r?1:-1;else for(o=a=0;ot[o]?1:-1;break}return a}function n(e,t,n){for(var r=0;n--;)e[n]-=r,r=e[n]1;)e.shift()}return function(r,o,a,i){var c,l,u,d,f,p,h,v,g,b,y,x,w,S,E,k,O,A,j=r.constructor,T=r.s==o.s?1:-1,M=r.d,N=o.d;if(!r.s)return new j(r);if(!o.s)throw Error(s+"Division by zero");for(l=r.e-o.e,O=N.length,E=M.length,v=(h=new j(T)).d=[],u=0;N[u]==(M[u]||0);)++u;if(N[u]>(M[u]||0)&&--l,(x=null==a?a=j.precision:i?a+(C(r)-C(o))+1:a)<0)return new j(0);if(x=x/7+2|0,u=0,1==O)for(d=0,N=N[0],x++;(u1&&(N=e(N,d),M=e(M,d),O=N.length,E=M.length),S=O,b=(g=M.slice(0,O)).length;b=m/2&&++k;do{d=0,(c=t(N,g,O,b))<0?(y=g[0],O!=b&&(y=y*m+(g[1]||0)),(d=y/k|0)>1?(d>=m&&(d=m-1),1==(c=t(f=e(N,d),g,p=f.length,b=g.length))&&(d--,n(f,O16)throw Error(d+C(e));if(!e.s)return new f(a);for(null==t?(l=!1,c=h):c=t,i=new f(.03125);e.abs().gte(.1);)e=e.times(i),u+=5;for(c+=Math.log(p(2,u))/Math.LN10*2+5|0,n=r=o=new f(a),f.precision=c;;){if(r=P(r.times(e),c),n=n.times(++s),w((i=o.plus(S(r,n,c))).d).slice(0,c)===w(o.d).slice(0,c)){for(;u--;)o=P(o.times(o),c);return f.precision=h,null==t?(l=!0,P(o,h)):o}o=i}}function C(e){for(var t=7*e.e,n=e.d[0];n>=10;n/=10)t++;return t}function k(e,t,n){if(t>e.LN10.sd())throw l=!0,n&&(e.precision=n),Error(s+"LN10 precision limit exceeded");return P(new e(e.LN10),t)}function O(e){for(var t="";e--;)t+="0";return t}function A(e,t){var n,r,o,i,c,u,d,f,p,h=1,m=e,v=m.d,g=m.constructor,b=g.precision;if(m.s<1)throw Error(s+(m.s?"NaN":"-Infinity"));if(m.eq(a))return new g(0);if(null==t?(l=!1,f=b):f=t,m.eq(10))return null==t&&(l=!0),k(g,f);if(f+=10,g.precision=f,r=(n=w(v)).charAt(0),i=C(m),!(Math.abs(i)<15e14))return d=k(g,f+2,b).times(i+""),m=A(new g(r+"."+n.slice(1)),f-10).plus(d),g.precision=b,null==t?(l=!0,P(m,b)):m;for(;r<7&&1!=r||1==r&&n.charAt(1)>3;)r=(n=w((m=m.times(e)).d)).charAt(0),h++;for(i=C(m),r>1?(m=new g("0."+n),i++):m=new g(r+"."+n.slice(1)),u=c=m=S(m.minus(a),m.plus(a),f),p=P(m.times(m),f),o=3;;){if(c=P(c.times(p),f),w((d=u.plus(S(c,new g(o),f))).d).slice(0,f)===w(u.d).slice(0,f))return u=u.times(2),0!==i&&(u=u.plus(k(g,f+2,b).times(i+""))),u=S(u,new g(h),f),g.precision=b,null==t?(l=!0,P(u,b)):u;u=d,o+=2}}function j(e,t){var n,r,o;for((n=t.indexOf("."))>-1&&(t=t.replace(".","")),(r=t.search(/e/i))>0?(n<0&&(n=r),n+=+t.slice(r+1),t=t.substring(0,r)):n<0&&(n=t.length),r=0;48===t.charCodeAt(r);)++r;for(o=t.length;48===t.charCodeAt(o-1);)--o;if(t=t.slice(r,o)){if(o-=r,n=n-r-1,e.e=f(n/7),e.d=[],r=(n+1)%7,n<0&&(r+=7),rg||e.e<-g))throw Error(d+n)}else e.s=0,e.e=0,e.d=[0];return e}function P(e,t,n){var r,o,a,i,c,s,u,h,v=e.d;for(i=1,a=v[0];a>=10;a/=10)i++;if((r=t-i)<0)r+=7,o=t,u=v[h=0];else{if((h=Math.ceil((r+1)/7))>=(a=v.length))return e;for(u=a=v[h],i=1;a>=10;a/=10)i++;o=(r%=7)-7+i}if(void 0!==n&&(c=u/(a=p(10,i-o-1))%10|0,s=t<0||void 0!==v[h+1]||u%a,s=n<4?(c||s)&&(0==n||n==(e.s<0?3:2)):c>5||5==c&&(4==n||s||6==n&&(r>0?o>0?u/p(10,i-o):0:v[h-1])%10&1||n==(e.s<0?8:7))),t<1||!v[0])return s?(a=C(e),v.length=1,t=t-a-1,v[0]=p(10,(7-t%7)%7),e.e=f(-t/7)||0):(v.length=1,v[0]=e.e=e.s=0),e;if(0==r?(v.length=h,a=1,h--):(v.length=h+1,a=p(10,7-r),v[h]=o>0?(u/p(10,i-o)%p(10,o)|0)*a:0),s)for(;;){if(0==h){(v[0]+=a)==m&&(v[0]=1,++e.e);break}if(v[h]+=a,v[h]!=m)break;v[h--]=0,a=1}for(r=v.length;0===v[--r];)v.pop();if(l&&(e.e>g||e.e<-g))throw Error(d+C(e));return e}function T(e,t){var n,r,o,a,i,c,s,u,d,f,p=e.constructor,h=p.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new p(e),l?P(t,h):t;if(s=e.d,f=t.d,r=t.e,u=e.e,s=s.slice(),i=u-r){for((d=i<0)?(n=s,i=-i,c=f.length):(n=f,r=u,c=s.length),i>(o=Math.max(Math.ceil(h/7),c)+2)&&(i=o,n.length=1),n.reverse(),o=i;o--;)n.push(0);n.reverse()}else{for((d=(o=s.length)<(c=f.length))&&(c=o),o=0;o0;--o)s[c++]=0;for(o=f.length;o>i;){if(s[--o]0?a=a.charAt(0)+"."+a.slice(1)+O(r):i>1&&(a=a.charAt(0)+"."+a.slice(1)),a=a+(o<0?"e":"e+")+o):o<0?(a="0."+O(-o-1)+a,n&&(r=n-i)>0&&(a+=O(r))):o>=i?(a+=O(o+1-i),n&&(r=n-o-1)>0&&(a=a+"."+O(r))):((r=o+1)0&&(o+1===i&&(a+="."),a+=O(r))),e.s<0?"-"+a:a}function N(e,t){if(e.length>t)return e.length=t,!0}function _(e){if(!e||"object"!==typeof e)throw Error(s+"Object expected");var t,n,r,o=["precision",1,i,"rounding",0,8,"toExpNeg",-1/0,0,"toExpPos",0,1/0];for(t=0;t=o[t+1]&&r<=o[t+2]))throw Error(u+n+": "+r);this[n]=r}if(void 0!==(r=e[n="LN10"])){if(r!=Math.LN10)throw Error(u+n+": "+r);this[n]=new this(r)}return this}c=function e(t){var n,r,o;function a(e){var t=this;if(!(t instanceof a))return new a(e);if(t.constructor=a,e instanceof a)return t.s=e.s,t.e=e.e,void(t.d=(e=e.d)?e.slice():e);if("number"===typeof e){if(0*e!==0)throw Error(u+e);if(e>0)t.s=1;else{if(!(e<0))return t.s=0,t.e=0,void(t.d=[0]);e=-e,t.s=-1}return e===~~e&&e<1e7?(t.e=0,void(t.d=[e])):j(t,e.toString())}if("string"!==typeof e)throw Error(u+e);if(45===e.charCodeAt(0)?(e=e.slice(1),t.s=-1):t.s=1,!h.test(e))throw Error(u+e);j(t,e)}if(a.prototype=b,a.ROUND_UP=0,a.ROUND_DOWN=1,a.ROUND_CEIL=2,a.ROUND_FLOOR=3,a.ROUND_HALF_UP=4,a.ROUND_HALF_DOWN=5,a.ROUND_HALF_EVEN=6,a.ROUND_HALF_CEIL=7,a.ROUND_HALF_FLOOR=8,a.clone=e,a.config=a.set=_,void 0===t&&(t={}),t)for(o=["precision","rounding","toExpNeg","toExpPos","LN10"],n=0;n65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|1023&e),t+=String.fromCharCode(e)};t.default=function(e){return e>=55296&&e<=57343||e>1114111?"\ufffd":(e in o.default&&(e=o.default[e]),a(e))}},2056:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.escapeUTF8=t.escape=t.encodeNonAsciiHTML=t.encodeHTML=t.encodeXML=void 0;var o=u(r(n(2586)).default),a=d(o);t.encodeXML=v(o);var i,c,l=u(r(n(9323)).default),s=d(l);function u(e){return Object.keys(e).sort().reduce((function(t,n){return t[e[n]]="&"+n+";",t}),{})}function d(e){for(var t=[],n=[],r=0,o=Object.keys(e);r1?p(e):e.charCodeAt(0)).toString(16).toUpperCase()+";"}var m=new RegExp(a.source+"|"+f.source,"g");function v(e){return function(t){return t.replace(m,(function(t){return e[t]||h(t)}))}}t.escape=function(e){return e.replace(m,h)},t.escapeUTF8=function(e){return e.replace(a,h)}},4191:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.decodeXMLStrict=t.decodeHTML5Strict=t.decodeHTML4Strict=t.decodeHTML5=t.decodeHTML4=t.decodeHTMLStrict=t.decodeHTML=t.decodeXML=t.encodeHTML5=t.encodeHTML4=t.escapeUTF8=t.escape=t.encodeNonAsciiHTML=t.encodeHTML=t.encodeXML=t.encode=t.decodeStrict=t.decode=void 0;var r=n(1298),o=n(2056);t.decode=function(e,t){return(!t||t<=0?r.decodeXML:r.decodeHTML)(e)},t.decodeStrict=function(e,t){return(!t||t<=0?r.decodeXML:r.decodeHTMLStrict)(e)},t.encode=function(e,t){return(!t||t<=0?o.encodeXML:o.encodeHTML)(e)};var a=n(2056);Object.defineProperty(t,"encodeXML",{enumerable:!0,get:function(){return a.encodeXML}}),Object.defineProperty(t,"encodeHTML",{enumerable:!0,get:function(){return a.encodeHTML}}),Object.defineProperty(t,"encodeNonAsciiHTML",{enumerable:!0,get:function(){return a.encodeNonAsciiHTML}}),Object.defineProperty(t,"escape",{enumerable:!0,get:function(){return a.escape}}),Object.defineProperty(t,"escapeUTF8",{enumerable:!0,get:function(){return a.escapeUTF8}}),Object.defineProperty(t,"encodeHTML4",{enumerable:!0,get:function(){return a.encodeHTML}}),Object.defineProperty(t,"encodeHTML5",{enumerable:!0,get:function(){return a.encodeHTML}});var i=n(1298);Object.defineProperty(t,"decodeXML",{enumerable:!0,get:function(){return i.decodeXML}}),Object.defineProperty(t,"decodeHTML",{enumerable:!0,get:function(){return i.decodeHTML}}),Object.defineProperty(t,"decodeHTMLStrict",{enumerable:!0,get:function(){return i.decodeHTMLStrict}}),Object.defineProperty(t,"decodeHTML4",{enumerable:!0,get:function(){return i.decodeHTML}}),Object.defineProperty(t,"decodeHTML5",{enumerable:!0,get:function(){return i.decodeHTML}}),Object.defineProperty(t,"decodeHTML4Strict",{enumerable:!0,get:function(){return i.decodeHTMLStrict}}),Object.defineProperty(t,"decodeHTML5Strict",{enumerable:!0,get:function(){return i.decodeHTMLStrict}}),Object.defineProperty(t,"decodeXMLStrict",{enumerable:!0,get:function(){return i.decodeXML}})},1584:function(e){"use strict";var t=/["'&<>]/;e.exports=function(e){var n,r=""+e,o=t.exec(r);if(!o)return r;var a="",i=0,c=0;for(i=o.index;i0;)if(!n(e[o],t[o],r))return!1;return!0}function d(e,t,n,r){var o=e.size===t.size;if(o&&e.size){var a={};e.forEach((function(e,i){if(o){var c=!1,l=0;t.forEach((function(t,o){c||a[l]||(c=n(i,o,r)&&n(e,t,r))&&(a[l]=!0),l++})),o=c}}))}return o}var f="_owner",p=Function.prototype.bind.call(Function.prototype.call,Object.prototype.hasOwnProperty);function h(e,t,r,o){var a=n(e),c=a.length;if(n(t).length!==c)return!1;if(c)for(var l=void 0;c-- >0;){if((l=a[c])===f){var s=i(e),u=i(t);if((s||u)&&s!==u)return!1}if(!p(t,l)||!r(e[l],t[l],o))return!1}return!0}function m(e,t){return e.source===t.source&&e.global===t.global&&e.ignoreCase===t.ignoreCase&&e.multiline===t.multiline&&e.unicode===t.unicode&&e.sticky===t.sticky&&e.lastIndex===t.lastIndex}function v(e,t,n,r){var o=e.size===t.size;if(o&&e.size){var a={};e.forEach((function(e){if(o){var i=!1,c=0;t.forEach((function(t){i||a[c]||(i=n(e,t,r))&&(a[c]=!0),c++})),o=i}}))}return o}var g="function"===typeof Map,b="function"===typeof Set;function y(e){var t="function"===typeof e?e(n):n;function n(e,n,i){if(e===n)return!0;if(e&&n&&"object"===typeof e&&"object"===typeof n){if(o(e)&&o(n))return h(e,n,t,i);var c=Array.isArray(e),l=Array.isArray(n);return c||l?c===l&&u(e,n,t,i):(c=e instanceof Date,l=n instanceof Date,c||l?c===l&&r(e.getTime(),n.getTime()):(c=e instanceof RegExp,l=n instanceof RegExp,c||l?c===l&&m(e,n):a(e)||a(n)?e===n:g&&(c=e instanceof Map,l=n instanceof Map,c||l)?c===l&&d(e,n,t,i):b&&(c=e instanceof Set,l=n instanceof Set,c||l)?c===l&&v(e,n,t,i):h(e,n,t,i)))}return e!==e&&n!==n}return n}var x=y(),w=y((function(){return r})),S=y(s()),E=y(s(r));e.circularDeepEqual=S,e.circularShallowEqual=E,e.createCustomEqual=y,e.deepEqual=x,e.sameValueZeroEqual=r,e.shallowEqual=w,Object.defineProperty(e,"__esModule",{value:!0})}(t)},908:function(e,t,n){var r=n(8136)(n(7009),"DataView");e.exports=r},9676:function(e,t,n){var r=n(5403),o=n(2747),a=n(6037),i=n(4154),c=n(7728);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t-1}},2683:function(e){e.exports=function(e,t,n){for(var r=-1,o=null==e?0:e.length;++r0&&a(u)?n>1?e(u,n-1,a,i,c):r(c,u):i||(c[c.length]=u)}return c}},5099:function(e,t,n){var r=n(372)();e.exports=r},5358:function(e,t,n){var r=n(5099),o=n(2742);e.exports=function(e,t){return e&&r(e,t,o)}},8667:function(e,t,n){var r=n(3082),o=n(9793);e.exports=function(e,t){for(var n=0,a=(t=r(t,e)).length;null!=e&&nt}},529:function(e){e.exports=function(e,t){return null!=e&&t in Object(e)}},4842:function(e,t,n){var r=n(2045),o=n(505),a=n(7167);e.exports=function(e,t,n){return t===t?a(e,t,n):r(e,o,n)}},4906:function(e,t,n){var r=n(9066),o=n(3141);e.exports=function(e){return o(e)&&"[object Arguments]"==r(e)}},1848:function(e,t,n){var r=n(3355),o=n(3141);e.exports=function e(t,n,a,i,c){return t===n||(null==t||null==n||!o(t)&&!o(n)?t!==t&&n!==n:r(t,n,a,i,e,c))}},3355:function(e,t,n){var r=n(2854),o=n(5305),a=n(2206),i=n(8078),c=n(8383),l=n(3629),s=n(5174),u=n(9102),d="[object Arguments]",f="[object Array]",p="[object Object]",h=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,m,v,g){var b=l(e),y=l(t),x=b?f:c(e),w=y?f:c(t),S=(x=x==d?p:x)==p,E=(w=w==d?p:w)==p,C=x==w;if(C&&s(e)){if(!s(t))return!1;b=!0,S=!1}if(C&&!S)return g||(g=new r),b||u(e)?o(e,t,n,m,v,g):a(e,t,x,n,m,v,g);if(!(1&n)){var k=S&&h.call(e,"__wrapped__"),O=E&&h.call(t,"__wrapped__");if(k||O){var A=k?e.value():e,j=O?t.value():t;return g||(g=new r),v(A,j,n,m,g)}}return!!C&&(g||(g=new r),i(e,t,n,m,v,g))}},8856:function(e,t,n){var r=n(2854),o=n(1848);e.exports=function(e,t,n,a){var i=n.length,c=i,l=!a;if(null==e)return!c;for(e=Object(e);i--;){var s=n[i];if(l&&s[2]?s[1]!==e[s[0]]:!(s[0]in e))return!1}for(;++io?0:o+t),(n=n>o?o:n)<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var a=Array(o);++r=200){var m=t?null:c(e);if(m)return l(m);f=!1,u=i,h=new r}else h=t?[]:p;e:for(;++s=o?e:r(e,t,n)}},8558:function(e,t,n){var r=n(152);e.exports=function(e,t){if(e!==t){var n=void 0!==e,o=null===e,a=e===e,i=r(e),c=void 0!==t,l=null===t,s=t===t,u=r(t);if(!l&&!u&&!i&&e>t||i&&c&&s&&!l&&!u||o&&c&&s||!n&&s||!a)return 1;if(!o&&!i&&!u&&e=l?s:s*("desc"==n[o]?-1:1)}return e.index-t.index}},5525:function(e,t,n){var r=n(7009)["__core-js_shared__"];e.exports=r},7056:function(e,t,n){var r=n(1473);e.exports=function(e,t){return function(n,o){if(null==n)return n;if(!r(n))return e(n,o);for(var a=n.length,i=t?a:-1,c=Object(n);(t?i--:++i-1?c[l?t[s]:s]:void 0}}},6381:function(e,t,n){var r=n(7255),o=n(3195),a=n(1495);e.exports=function(e){return function(t,n,i){return i&&"number"!=typeof i&&o(t,n,i)&&(n=i=void 0),t=a(t),void 0===n?(n=t,t=0):n=a(n),i=void 0===i?tu))return!1;var f=l.get(e),p=l.get(t);if(f&&p)return f==t&&p==e;var h=-1,m=!0,v=2&n?new r:void 0;for(l.set(e,t),l.set(t,e);++h-1&&e%1==0&&e-1}},7109:function(e,t,n){var r=n(7112);e.exports=function(e,t){var n=this.__data__,o=r(n,e);return o<0?(++this.size,n.push([e,t])):n[o][1]=t,this}},4086:function(e,t,n){var r=n(9676),o=n(8384),a=n(5797);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(a||o),string:new r}}},9255:function(e,t,n){var r=n(2799);e.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},9186:function(e,t,n){var r=n(2799);e.exports=function(e){return r(this,e).get(e)}},3423:function(e,t,n){var r=n(2799);e.exports=function(e){return r(this,e).has(e)}},3739:function(e,t,n){var r=n(2799);e.exports=function(e,t){var n=r(this,e),o=n.size;return n.set(e,t),this.size+=n.size==o?0:1,this}},234:function(e){e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}},284:function(e){e.exports=function(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in Object(n)))}}},4634:function(e,t,n){var r=n(9151);e.exports=function(e){var t=r(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}},9620:function(e,t,n){var r=n(8136)(Object,"create");e.exports=r},8836:function(e,t,n){var r=n(2709)(Object.keys,Object);e.exports=r},9494:function(e,t,n){e=n.nmd(e);var r=n(1032),o=t&&!t.nodeType&&t,a=o&&e&&!e.nodeType&&e,i=a&&a.exports===o&&r.process,c=function(){try{var e=a&&a.require&&a.require("util").types;return e||i&&i.binding&&i.binding("util")}catch(t){}}();e.exports=c},3581:function(e){var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},2709:function(e){e.exports=function(e,t){return function(n){return e(t(n))}}},4262:function(e,t,n){var r=n(3665),o=Math.max;e.exports=function(e,t,n){return t=o(void 0===t?e.length-1:t,0),function(){for(var a=arguments,i=-1,c=o(a.length-t,0),l=Array(c);++i0){if(++n>=800)return arguments[0]}else n=0;return e.apply(void 0,arguments)}}},511:function(e,t,n){var r=n(8384);e.exports=function(){this.__data__=new r,this.size=0}},835:function(e){e.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},707:function(e){e.exports=function(e){return this.__data__.get(e)}},8832:function(e){e.exports=function(e){return this.__data__.has(e)}},5077:function(e,t,n){var r=n(8384),o=n(5797),a=n(8059);e.exports=function(e,t){var n=this.__data__;if(n instanceof r){var i=n.__data__;if(!o||i.length<199)return i.push([e,t]),this.size=++n.size,this;n=this.__data__=new a(i)}return n.set(e,t),this.size=n.size,this}},7167:function(e){e.exports=function(e,t,n){for(var r=n-1,o=e.length;++r=t||n<0||v&&e-h>=u}function w(){var e=o();if(x(e))return S(e);f=setTimeout(w,function(e){var n=t-(e-p);return v?c(n,u-(e-h)):n}(e))}function S(e){return f=void 0,g&&l?b(e):(l=s=void 0,d)}function E(){var e=o(),n=x(e);if(l=arguments,s=this,p=e,n){if(void 0===f)return y(p);if(v)return clearTimeout(f),f=setTimeout(w,t),b(p)}return void 0===f&&(f=setTimeout(w,t)),d}return t=a(t)||0,r(n)&&(m=!!n.leading,u=(v="maxWait"in n)?i(a(n.maxWait)||0,t):u,g="trailing"in n?!!n.trailing:g),E.cancel=function(){void 0!==f&&clearTimeout(f),h=0,l=p=s=f=void 0},E.flush=function(){return void 0===f?d:S(o())},E}},9231:function(e){e.exports=function(e,t){return e===t||e!==e&&t!==t}},2730:function(e,t,n){var r=n(4277),o=n(9863),a=n(6025),i=n(3629),c=n(3195);e.exports=function(e,t,n){var l=i(e)?r:o;return n&&c(e,t,n)&&(t=void 0),l(e,a(t,3))}},1211:function(e,t,n){var r=n(5481)(n(1475));e.exports=r},1475:function(e,t,n){var r=n(2045),o=n(6025),a=n(9753),i=Math.max;e.exports=function(e,t,n){var c=null==e?0:e.length;if(!c)return-1;var l=null==n?0:a(n);return l<0&&(l=i(c+l,0)),r(e,o(t,3),l)}},5008:function(e,t,n){var r=n(5182),o=n(2034);e.exports=function(e,t){return r(o(e,t),1)}},6181:function(e,t,n){var r=n(8667);e.exports=function(e,t,n){var o=null==e?void 0:r(e,t);return void 0===o?n:o}},5658:function(e,t,n){var r=n(529),o=n(6417);e.exports=function(e,t){return null!=e&&o(e,t,r)}},2100:function(e){e.exports=function(e){return e}},4963:function(e,t,n){var r=n(4906),o=n(3141),a=Object.prototype,i=a.hasOwnProperty,c=a.propertyIsEnumerable,l=r(function(){return arguments}())?r:function(e){return o(e)&&i.call(e,"callee")&&!c.call(e,"callee")};e.exports=l},3629:function(e){var t=Array.isArray;e.exports=t},1473:function(e,t,n){var r=n(4786),o=n(4635);e.exports=function(e){return null!=e&&o(e.length)&&!r(e)}},5127:function(e,t,n){var r=n(9066),o=n(3141);e.exports=function(e){return!0===e||!1===e||o(e)&&"[object Boolean]"==r(e)}},5174:function(e,t,n){e=n.nmd(e);var r=n(7009),o=n(9488),a=t&&!t.nodeType&&t,i=a&&e&&!e.nodeType&&e,c=i&&i.exports===a?r.Buffer:void 0,l=(c?c.isBuffer:void 0)||o;e.exports=l},8111:function(e,t,n){var r=n(1848);e.exports=function(e,t){return r(e,t)}},4786:function(e,t,n){var r=n(9066),o=n(8092);e.exports=function(e){if(!o(e))return!1;var t=r(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},4635:function(e){e.exports=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},2066:function(e,t,n){var r=n(298);e.exports=function(e){return r(e)&&e!=+e}},5633:function(e){e.exports=function(e){return null==e}},298:function(e,t,n){var r=n(9066),o=n(3141);e.exports=function(e){return"number"==typeof e||o(e)&&"[object Number]"==r(e)}},8092:function(e){e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},3141:function(e){e.exports=function(e){return null!=e&&"object"==typeof e}},3977:function(e,t,n){var r=n(9066),o=n(1137),a=n(3141),i=Function.prototype,c=Object.prototype,l=i.toString,s=c.hasOwnProperty,u=l.call(Object);e.exports=function(e){if(!a(e)||"[object Object]"!=r(e))return!1;var t=o(e);if(null===t)return!0;var n=s.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&l.call(n)==u}},6769:function(e,t,n){var r=n(9066),o=n(3629),a=n(3141);e.exports=function(e){return"string"==typeof e||!o(e)&&a(e)&&"[object String]"==r(e)}},152:function(e,t,n){var r=n(9066),o=n(3141);e.exports=function(e){return"symbol"==typeof e||o(e)&&"[object Symbol]"==r(e)}},9102:function(e,t,n){var r=n(8150),o=n(6194),a=n(9494),i=a&&a.isTypedArray,c=i?o(i):r;e.exports=c},2742:function(e,t,n){var r=n(7538),o=n(3654),a=n(1473);e.exports=function(e){return a(e)?r(e):o(e)}},5727:function(e){e.exports=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}},2034:function(e,t,n){var r=n(8950),o=n(6025),a=n(3849),i=n(3629);e.exports=function(e,t){return(i(e)?r:a)(e,o(t,3))}},7702:function(e,t,n){var r=n(2526),o=n(5358),a=n(6025);e.exports=function(e,t){var n={};return t=a(t,3),o(e,(function(e,o,a){r(n,o,t(e,o,a))})),n}},9627:function(e,t,n){var r=n(3079),o=n(1954),a=n(2100);e.exports=function(e){return e&&e.length?r(e,a,o):void 0}},8559:function(e,t,n){var r=n(3079),o=n(1954),a=n(6025);e.exports=function(e,t){return e&&e.length?r(e,a(t,2),o):void 0}},9151:function(e,t,n){var r=n(8059);function o(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function n(){var r=arguments,o=t?t.apply(this,r):r[0],a=n.cache;if(a.has(o))return a.get(o);var i=e.apply(this,r);return n.cache=a.set(o,i)||a,i};return n.cache=new(o.Cache||r),n}o.Cache=r,e.exports=o},6452:function(e,t,n){var r=n(3079),o=n(2580),a=n(2100);e.exports=function(e){return e&&e.length?r(e,a,o):void 0}},3638:function(e,t,n){var r=n(3079),o=n(6025),a=n(2580);e.exports=function(e,t){return e&&e.length?r(e,o(t,2),a):void 0}},9694:function(e){e.exports=function(){}},72:function(e,t,n){var r=n(7009);e.exports=function(){return r.Date.now()}},38:function(e,t,n){var r=n(9586),o=n(4084),a=n(5823),i=n(9793);e.exports=function(e){return a(e)?r(i(e)):o(e)}},6222:function(e,t,n){var r=n(6381)();e.exports=r},4064:function(e,t,n){var r=n(7897),o=n(6025),a=n(9204),i=n(3629),c=n(3195);e.exports=function(e,t,n){var l=i(e)?r:a;return n&&c(e,t,n)&&(t=void 0),l(e,o(t,3))}},4286:function(e,t,n){var r=n(5182),o=n(3226),a=n(8794),i=n(3195),c=a((function(e,t){if(null==e)return[];var n=t.length;return n>1&&i(e,t[0],t[1])?t=[]:n>2&&i(t[0],t[1],t[2])&&(t=[t[0]]),o(e,r(t,1),[])}));e.exports=c},8174:function(e){e.exports=function(){return[]}},9488:function(e){e.exports=function(){return!1}},3038:function(e,t,n){var r=n(8573),o=n(8092);e.exports=function(e,t,n){var a=!0,i=!0;if("function"!=typeof e)throw new TypeError("Expected a function");return o(n)&&(a="leading"in n?!!n.leading:a,i="trailing"in n?!!n.trailing:i),r(e,t,{leading:a,maxWait:t,trailing:i})}},1495:function(e,t,n){var r=n(2582),o=1/0;e.exports=function(e){return e?(e=r(e))===o||e===-1/0?17976931348623157e292*(e<0?-1:1):e===e?e:0:0===e?e:0}},9753:function(e,t,n){var r=n(1495);e.exports=function(e){var t=r(e),n=t%1;return t===t?n?t-n:t:0}},2582:function(e,t,n){var r=n(821),o=n(8092),a=n(152),i=/^[-+]0x[0-9a-f]+$/i,c=/^0b[01]+$/i,l=/^0o[0-7]+$/i,s=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(a(e))return NaN;if(o(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=r(e);var n=c.test(e);return n||l.test(e)?s(e.slice(2),n?2:8):i.test(e)?NaN:+e}},3518:function(e,t,n){var r=n(2446);e.exports=function(e){return null==e?"":r(e)}},6339:function(e,t,n){var r=n(6025),o=n(9602);e.exports=function(e,t){return e&&e.length?o(e,r(t,2)):[]}},2085:function(e,t,n){var r=n(322)("toUpperCase");e.exports=r},888:function(e,t,n){"use strict";var r=n(9047);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var c=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw c.name="Invariant Violation",c}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},2007:function(e,t,n){e.exports=n(888)()},9047:function(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},3841:function(e,t,n){e=n.nmd(e),function(n,r){var o=function(){var e=null,t={};m();var n=[],r=function t(r){if(void 0!==(r=r||{}).seed&&null!==r.seed&&r.seed===parseInt(r.seed,10))e=r.seed;else if("string"===typeof r.seed)e=y(r.seed);else{if(void 0!==r.seed&&null!==r.seed)throw new TypeError("The seed value must be an integer or string");e=null}var l,s;if(null!==r.count&&void 0!==r.count){for(var u=r.count,d=[],f=0;fd.length;){var p=t(r);null!==e&&(r.seed=e),d.push(p)}return r.count=u,d}return c([l=o(r),s=a(l,r),i(l,s,r)],r)};function o(e){if(n.length>0){var t=f(a=x(e.hue)),r=(a[1]-a[0])/n.length,o=parseInt((t-a[0])/r);return!0===n[o]?o=(o+2)%n.length:n[o]=!0,(t=f(a=[(a[0]+o*r)%359,(a[0]+(o+1)*r)%359]))<0&&(t=360+t),t}var a;return(t=f(a=s(e.hue)))<0&&(t=360+t),t}function a(e,t){if("monochrome"===t.hue)return 0;if("random"===t.luminosity)return f([0,100]);var n=u(e),r=n[0],o=n[1];switch(t.luminosity){case"bright":r=55;break;case"dark":r=o-10;break;case"light":o=55}return f([r,o])}function i(e,t,n){var r=l(e,t),o=100;switch(n.luminosity){case"dark":o=r+20;break;case"light":r=(o+r)/2;break;case"random":r=0,o=100}return f([r,o])}function c(e,t){switch(t.format){case"hsvArray":return e;case"hslArray":return b(e);case"hsl":var n=b(e);return"hsl("+n[0]+", "+n[1]+"%, "+n[2]+"%)";case"hsla":var r=b(e),o=t.alpha||Math.random();return"hsla("+r[0]+", "+r[1]+"%, "+r[2]+"%, "+o+")";case"rgbArray":return v(e);case"rgb":return"rgb("+v(e).join(", ")+")";case"rgba":var a=v(e);o=t.alpha||Math.random();return"rgba("+a.join(", ")+", "+o+")";default:return p(e)}}function l(e,t){for(var n=d(e).lowerBounds,r=0;r=o&&t<=i){var l=(c-a)/(i-o);return l*t+(a-l*o)}}return 0}function s(e){if("number"===typeof parseInt(e)){var n=parseInt(e);if(n<360&&n>0)return[n,n]}if("string"===typeof e)if(t[e]){var r=t[e];if(r.hueRange)return r.hueRange}else if(e.match(/^#?([0-9A-F]{3}|[0-9A-F]{6})$/i)){var o=g(e)[0];return[o,o]}return[0,360]}function u(e){return d(e).saturationRange}function d(e){for(var n in e>=334&&e<=360&&(e-=360),t){var r=t[n];if(r.hueRange&&e>=r.hueRange[0]&&e<=r.hueRange[1])return t[n]}return"Color not found"}function f(t){if(null===e){var n=.618033988749895,r=Math.random();return r+=n,r%=1,Math.floor(t[0]+r*(t[1]+1-t[0]))}var o=t[1]||1,a=t[0]||0,i=(e=(9301*e+49297)%233280)/233280;return Math.floor(a+i*(o-a))}function p(e){var t=v(e);function n(e){var t=e.toString(16);return 1==t.length?"0"+t:t}return"#"+n(t[0])+n(t[1])+n(t[2])}function h(e,n,r){var o=r[0][0],a=r[r.length-1][0],i=r[r.length-1][1],c=r[0][1];t[e]={hueRange:n,lowerBounds:r,saturationRange:[o,a],brightnessRange:[i,c]}}function m(){h("monochrome",null,[[0,0],[100,0]]),h("red",[-26,18],[[20,100],[30,92],[40,89],[50,85],[60,78],[70,70],[80,60],[90,55],[100,50]]),h("orange",[18,46],[[20,100],[30,93],[40,88],[50,86],[60,85],[70,70],[100,70]]),h("yellow",[46,62],[[25,100],[40,94],[50,89],[60,86],[70,84],[80,82],[90,80],[100,75]]),h("green",[62,178],[[30,100],[40,90],[50,85],[60,81],[70,74],[80,64],[90,50],[100,40]]),h("blue",[178,257],[[20,100],[30,86],[40,80],[50,74],[60,60],[70,52],[80,44],[90,39],[100,35]]),h("purple",[257,282],[[20,100],[30,87],[40,79],[50,70],[60,65],[70,59],[80,52],[90,45],[100,42]]),h("pink",[282,334],[[20,100],[30,90],[40,86],[60,84],[80,80],[90,75],[100,73]])}function v(e){var t=e[0];0===t&&(t=1),360===t&&(t=359),t/=360;var n=e[1]/100,r=e[2]/100,o=Math.floor(6*t),a=6*t-o,i=r*(1-n),c=r*(1-a*n),l=r*(1-(1-a)*n),s=256,u=256,d=256;switch(o){case 0:s=r,u=l,d=i;break;case 1:s=c,u=r,d=i;break;case 2:s=i,u=r,d=l;break;case 3:s=i,u=c,d=r;break;case 4:s=l,u=i,d=r;break;case 5:s=r,u=i,d=c}return[Math.floor(255*s),Math.floor(255*u),Math.floor(255*d)]}function g(e){e=3===(e=e.replace(/^#/,"")).length?e.replace(/(.)/g,"$1$1"):e;var t=parseInt(e.substr(0,2),16)/255,n=parseInt(e.substr(2,2),16)/255,r=parseInt(e.substr(4,2),16)/255,o=Math.max(t,n,r),a=o-Math.min(t,n,r),i=o?a/o:0;switch(o){case t:return[(n-r)/a%6*60||0,i,o];case n:return[60*((r-t)/a+2)||0,i,o];case r:return[60*((t-n)/a+4)||0,i,o]}}function b(e){var t=e[0],n=e[1]/100,r=e[2]/100,o=(2-n)*r;return[t,Math.round(n*r/(o<1?o:2-o)*1e4)/100,o/2*100]}function y(e){for(var t=0,n=0;n!==e.length&&!(t>=Number.MAX_SAFE_INTEGER);n++)t+=e.charCodeAt(n);return t}function x(e){if(isNaN(e)){if("string"===typeof e)if(t[e]){var n=t[e];if(n.hueRange)return n.hueRange}else if(e.match(/^#?([0-9A-F]{3}|[0-9A-F]{6})$/i)){return d(g(e)[0]).hueRange}}else{var r=parseInt(e);if(r<360&&r>0)return d(e).hueRange}return[0,360]}return r}();e&&e.exports&&(t=e.exports=o),t.randomColor=o}()},4463:function(e,t,n){"use strict";var r=n(2791),o=n(5296);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n