diff --git a/codegen.ts b/codegen.ts
index e534331..65d5cda 100644
--- a/codegen.ts
+++ b/codegen.ts
@@ -1,7 +1,7 @@
import type { CodegenConfig } from "@graphql-codegen/cli";
const config: CodegenConfig = {
- schema: "schema.graphql",
+ schema: ["services/auth/schema/schema.graphql"],
generates: {
"./resolvers-types.ts": {
config: {
diff --git a/local_packages/.codecov.yml b/local_packages/.codecov.yml
new file mode 100644
index 0000000..3f58de5
--- /dev/null
+++ b/local_packages/.codecov.yml
@@ -0,0 +1,6 @@
+coverage:
+ round: up
+ precision: 2
+ parsers:
+ javascript:
+ enable_partials: yes
diff --git a/local_packages/.github/PULL_REQUEST_TEMPLATE.md b/local_packages/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 0000000..ea09a23
--- /dev/null
+++ b/local_packages/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,23 @@
+
+
+## The purpose of this PR is:
+...
+
+## This is what had to change:
+...
+
+## This is what like reviewers to know:
+...
+
+
+-------------------------------------------------------------------------------------------------
+
+
+- [ ] I prefixed the PR-title with `docs: `, `fix(area): `, `feat(area): ` or `breaking(area): `
+- [ ] I updated the README.md
+- [ ] I Added unit test(s)
+
+-------------------------------------------------------------------------------------------------
+
+
+- fix #000
diff --git a/local_packages/.github/dependabot.yml b/local_packages/.github/dependabot.yml
new file mode 100644
index 0000000..0b256c4
--- /dev/null
+++ b/local_packages/.github/dependabot.yml
@@ -0,0 +1,25 @@
+version: 2
+updates:
+- package-ecosystem: npm
+ directory: "/"
+ schedule:
+ interval: daily
+ open-pull-requests-limit: 10
+ ignore:
+ - dependency-name: get-stream
+ versions:
+ - 6.0.0
+ - 6.0.1
+ - dependency-name: typescript
+ versions:
+ - 4.1.3
+ - 4.1.4
+ - 4.1.5
+ - 4.2.2
+ - 4.2.3
+ - 4.2.4
+ - dependency-name: xo
+ versions:
+ - 0.37.1
+ - 0.38.1
+ - 0.38.2
diff --git a/local_packages/.github/workflows/ci.yml b/local_packages/.github/workflows/ci.yml
new file mode 100644
index 0000000..a6669c1
--- /dev/null
+++ b/local_packages/.github/workflows/ci.yml
@@ -0,0 +1,32 @@
+name: CI
+
+on:
+ push:
+ branches: [master]
+ pull_request:
+ paths:
+ - "**.js"
+ - "package.json"
+ - ".github/workflows/ci.yml"
+
+jobs:
+ test:
+ strategy:
+ matrix:
+ os: [ubuntu-latest, macos-latest, windows-latest]
+ node: ["18", "20", "22"]
+
+ runs-on: ${{ matrix.os }}
+
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v2
+ with:
+ node-version: ${{ matrix.node }}
+ - run: pnpm install
+ - run: pnpm test
+ - run: pnpm run report -- --colors
+ - name: Upload coverage to Codecov
+ uses: codecov/codecov-action@v1
+ with:
+ file: ./coverage/coverage-final.json
diff --git a/local_packages/.gitignore b/local_packages/.gitignore
new file mode 100644
index 0000000..4d8cac9
--- /dev/null
+++ b/local_packages/.gitignore
@@ -0,0 +1,69 @@
+# Lock files
+
+package-lock.json
+yarn.lock
+
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (https://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# TypeScript v1 declaration files
+typings/
+
+# Optional npm cache directory
+.npm
+
+# Optional cache
+.cache
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+
+*.d.ts
+*.d.cts
+.DS_Store
\ No newline at end of file
diff --git a/local_packages/LICENSE b/local_packages/LICENSE
new file mode 100644
index 0000000..0d31723
--- /dev/null
+++ b/local_packages/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2019 David Frank
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/local_packages/README.md b/local_packages/README.md
new file mode 100644
index 0000000..20d212a
--- /dev/null
+++ b/local_packages/README.md
@@ -0,0 +1,133 @@
+# fetch-blob
+
+[![npm version][npm-image]][npm-url]
+[![build status][ci-image]][ci-url]
+[![coverage status][codecov-image]][codecov-url]
+[![install size][install-size-image]][install-size-url]
+
+A Blob implementation in Node.js, originally from [node-fetch](https://github.com/node-fetch/node-fetch).
+
+Use the built-in [`Blob`](https://nodejs.org/docs/latest-v18.x/api/buffer.html#class-blob) in Node.js 18 and later.
+
+## Installation
+
+```sh
+pnpm install fetch-blob
+```
+
+
+ Upgrading from 2x to 3x
+
+ Updating from 2 to 3 should be a breeze since there is not many changes to the blob specification.
+ The major cause of a major release is coding standards.
+ - internal WeakMaps was replaced with private fields
+ - internal Buffer.from was replaced with TextEncoder/Decoder
+ - internal buffers was replaced with Uint8Arrays
+ - CommonJS was replaced with ESM
+ - The node stream returned by calling `blob.stream()` was replaced with whatwg streams
+ - (Read "Differences from other blobs" for more info.)
+
+
+
+ Differences from other Blobs
+
+ - Unlike NodeJS `buffer.Blob` (Added in: v15.7.0) and browser native Blob this polyfilled version can't be sent via PostMessage
+ - This blob version is more arbitrary, it can be constructed with blob parts that isn't a instance of itself
+ it has to look and behave as a blob to be accepted as a blob part.
+ - The benefit of this is that you can create other types of blobs that don't contain any internal data that has to be read in other ways, such as the `BlobDataItem` created in `from.js` that wraps a file path into a blob-like item and read lazily (nodejs plans to [implement this][fs-blobs] as well)
+ - The `blob.stream()` is the most noticeable differences. It returns a WHATWG stream now. to keep it as a node stream you would have to do:
+
+ ```js
+ import {Readable} from 'stream'
+ const stream = Readable.from(blob.stream())
+ ```
+
+
+## Usage
+
+```js
+// Ways to import
+import { Blob } from 'fetch-blob'
+import { File } from 'fetch-blob/file.js'
+
+const { Blob } = await import('fetch-blob')
+
+
+// Ways to read the blob:
+const blob = new Blob(['hello, world'])
+
+await blob.text()
+await blob.arrayBuffer()
+for await (let chunk of blob.stream()) { ... }
+blob.stream().getReader().read()
+blob.stream().getReader({mode: 'byob'}).read(view)
+```
+
+### Blob part backed up by filesystem
+
+`fetch-blob/from.js` comes packed with tools to convert any filepath into either a Blob or a File
+It will not read the content into memory. It will only stat the file for last modified date and file size.
+
+```js
+// The default export is sync and use fs.stat to retrieve size & last modified as a blob
+import {File, Blob, blobFrom, blobFromSync, fileFrom, fileFromSync} from 'fetch-blob/from.js'
+
+const fsFile = fileFromSync('./2-GiB-file.bin', 'application/octet-stream')
+const fsBlob = await blobFrom('./2-GiB-file.mp4')
+
+// Not a 4 GiB memory snapshot, just holds references
+// points to where data is located on the disk
+const blob = new Blob([fsFile, fsBlob, 'memory', new Uint8Array(10)])
+console.log(blob.size) // ~4 GiB
+```
+
+`blobFrom|blobFromSync|fileFrom|fileFromSync(path, [mimetype])`
+
+### Creating a temporary file on the disk
+(requires [FinalizationRegistry] - node v14.6)
+
+When using both `createTemporaryBlob` and `createTemporaryFile`
+then you will write data to the temporary folder in their respective OS.
+The arguments can be anything that [fsPromises.writeFile] supports. NodeJS
+v14.17.0+ also supports writing (async)Iterable streams and passing in a
+AbortSignal, so both NodeJS stream and whatwg streams are supported. When the
+file have been written it will return a Blob/File handle with a references to
+this temporary location on the disk. When you no longer have a references to
+this Blob/File anymore and it have been GC then it will automatically be deleted.
+
+This files are also unlinked upon exiting the process.
+```js
+import { createTemporaryBlob, createTemporaryFile } from 'fetch-blob/from.js'
+
+const req = new Request('https://httpbin.org/image/png')
+const res = await fetch(req)
+const type = res.headers.get('content-type')
+const signal = req.signal
+let blob = await createTemporaryBlob(res.body, { type, signal })
+// const file = createTemporaryBlob(res.body, 'img.png', { type, signal })
+blob = undefined // loosing references will delete the file from disk
+```
+
+- `createTemporaryBlob(data, { type, signal })`
+- `createTemporaryFile(data, FileName, { type, signal, lastModified })`
+
+### Creating Blobs backed up by other async sources
+Our Blob & File class are more generic then any other polyfills in the way that it can accept any blob look-a-like item
+An example of this is that our blob implementation can be constructed with parts coming from [BlobDataItem](https://github.com/node-fetch/fetch-blob/blob/8ef89adad40d255a3bbd55cf38b88597c1cd5480/from.js#L32) (aka a filepath) or from [buffer.Blob](https://nodejs.org/api/buffer.html#buffer_new_buffer_blob_sources_options), It dose not have to implement all the methods - just enough that it can be read/understood by our Blob implementation. The minium requirements is that it has `Symbol.toStringTag`, `size`, `slice()`, `stream()` methods (the stream method
+can be as simple as being a sync or async iterator that yields Uint8Arrays. If you then wrap it in our Blob or File `new Blob([blobDataItem])` then you get all of the other methods that should be implemented in a blob or file (aka: text(), arrayBuffer() and type and a ReadableStream)
+
+An example of this could be to create a file or blob like item coming from a remote HTTP request. Or from a DataBase
+
+See the [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/API/Blob) and [tests](https://github.com/node-fetch/fetch-blob/blob/master/test.js) for more details of how to use the Blob.
+
+[npm-image]: https://flat.badgen.net/npm/v/fetch-blob
+[npm-url]: https://www.npmjs.com/package/fetch-blob
+[ci-image]: https://github.com/node-fetch/fetch-blob/workflows/CI/badge.svg
+[ci-url]: https://github.com/node-fetch/fetch-blob/actions
+[codecov-image]: https://flat.badgen.net/codecov/c/github/node-fetch/fetch-blob/master
+[codecov-url]: https://codecov.io/gh/node-fetch/fetch-blob
+[install-size-image]: https://flat.badgen.net/packagephobia/install/fetch-blob
+[install-size-url]: https://packagephobia.now.sh/result?p=fetch-blob
+[fs-blobs]: https://github.com/nodejs/node/issues/37340
+[fsPromises.writeFile]: https://nodejs.org/dist/latest-v18.x/docs/api/fs.html#fspromiseswritefilefile-data-options
+[FinalizationRegistry]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry
diff --git a/local_packages/file.js b/local_packages/file.js
new file mode 100644
index 0000000..b2739c9
--- /dev/null
+++ b/local_packages/file.js
@@ -0,0 +1,48 @@
+import { Blob } from './index.js'
+
+const _File = class File extends Blob {
+ #lastModified = 0
+ #name = ''
+
+ /**
+ * @param {*[]} fileBits
+ * @param {string} fileName
+ * @param {{lastModified?: number, type?: string}} options
+ */// @ts-ignore
+ constructor (fileBits, fileName, options = {}) {
+ if (arguments.length < 2) {
+ throw new TypeError(`Failed to construct 'File': 2 arguments required, but only ${arguments.length} present.`)
+ }
+ super(fileBits, options)
+
+ if (options === null) options = {}
+
+ // Simulate WebIDL type casting for NaN value in lastModified option.
+ const lastModified = options.lastModified === undefined ? Date.now() : Number(options.lastModified)
+ if (!Number.isNaN(lastModified)) {
+ this.#lastModified = lastModified
+ }
+
+ this.#name = String(fileName)
+ }
+
+ get name () {
+ return this.#name
+ }
+
+ get lastModified () {
+ return this.#lastModified
+ }
+
+ get [Symbol.toStringTag] () {
+ return 'File'
+ }
+
+ static [Symbol.hasInstance] (object) {
+ return !!object && object instanceof Blob &&
+ /^(File)$/.test(object[Symbol.toStringTag])
+ }
+}
+
+/** @type {typeof globalThis.File} */// @ts-ignore
+export const File = _File
diff --git a/local_packages/from.js b/local_packages/from.js
new file mode 100644
index 0000000..325a757
--- /dev/null
+++ b/local_packages/from.js
@@ -0,0 +1,165 @@
+import {
+ realpathSync,
+ statSync,
+ rmdirSync,
+ createReadStream,
+ promises as fs
+} from 'node:fs'
+import { basename, sep, join } from 'node:path'
+import { tmpdir } from 'node:os'
+import process from 'node:process'
+
+import { File } from './file.js'
+import { Blob } from './index.js'
+
+const { stat, mkdtemp } = fs
+let i = 0, tempDir, registry
+
+
+
+/**
+ * @param {string} path filepath on the disk
+ * @param {string} [type] mimetype to use
+ */
+const blobFromSync = (path, type) => fromBlob(statSync(path), path, type)
+
+/**
+ * @param {string} path filepath on the disk
+ * @param {string} [type] mimetype to use
+ * @returns {Promise}
+ */
+const blobFrom = (path, type) => stat(path).then(stat => fromBlob(stat, path, type))
+
+/**
+ * @param {string} path filepath on the disk
+ * @param {string} [type] mimetype to use
+ * @returns {Promise}
+ */
+const fileFrom = (path, type) => stat(path).then(stat => fromFile(stat, path, type))
+
+/**
+ * @param {string} path filepath on the disk
+ * @param {string} [type] mimetype to use
+ */
+const fileFromSync = (path, type) => fromFile(statSync(path), path, type)
+
+// @ts-ignore
+const fromBlob = (stat, path, type = '') => new Blob([new BlobDataItem({
+ path,
+ size: stat.size,
+ lastModified: stat.mtimeMs,
+ start: 0
+})], { type })
+
+// @ts-ignore
+const fromFile = (stat, path, type = '') => new File([new BlobDataItem({
+ path,
+ size: stat.size,
+ lastModified: stat.mtimeMs,
+ start: 0
+})], basename(path), { type, lastModified: stat.mtimeMs })
+
+/**
+ * Creates a temporary blob backed by the filesystem.
+ * NOTE: requires node.js v14 or higher to use FinalizationRegistry
+ *
+ * @param {*} data Same as fs.writeFile data
+ * @param {BlobPropertyBag & {signal?: AbortSignal}} options
+ * @param {AbortSignal} [signal] in case you wish to cancel the write operation
+ * @returns {Promise}
+ */
+const createTemporaryBlob = async (data, {signal, type} = {}) => {
+ registry = registry || new FinalizationRegistry(fs.unlink)
+ tempDir = tempDir || await mkdtemp(realpathSync(tmpdir()) + sep)
+ const id = `${i++}`
+ const destination = join(tempDir, id)
+ if (data instanceof ArrayBuffer) data = new Uint8Array(data)
+ await fs.writeFile(destination, data, { signal })
+ const blob = await blobFrom(destination, type)
+ registry.register(blob, destination)
+ return blob
+}
+
+/**
+ * Creates a temporary File backed by the filesystem.
+ * Pretty much the same as constructing a new File(data, name, options)
+ *
+ * NOTE: requires node.js v14 or higher to use FinalizationRegistry
+ * @param {*} data
+ * @param {string} name
+ * @param {FilePropertyBag & {signal?: AbortSignal}} opts
+ * @returns {Promise}
+ */
+const createTemporaryFile = async (data, name, opts) => {
+ const blob = await createTemporaryBlob(data)
+ return new File([blob], name, opts)
+}
+
+/**
+ * This is a blob backed up by a file on the disk
+ * with minium requirement. Its wrapped around a Blob as a blobPart
+ * so you have no direct access to this.
+ *
+ * @private
+ */
+class BlobDataItem {
+ #path
+ #start
+
+ constructor (options) {
+ this.#path = options.path
+ this.#start = options.start
+ this.size = options.size
+ this.lastModified = options.lastModified
+ this.originalSize = options.originalSize === undefined
+ ? options.size
+ : options.originalSize
+ }
+
+ /**
+ * Slicing arguments is first validated and formatted
+ * to not be out of range by Blob.prototype.slice
+ */
+ slice (start, end) {
+ return new BlobDataItem({
+ path: this.#path,
+ lastModified: this.lastModified,
+ originalSize: this.originalSize,
+ size: end - start,
+ start: this.#start + start
+ })
+ }
+
+ async * stream () {
+ const { mtimeMs, size } = await stat(this.#path)
+
+ if (mtimeMs > this.lastModified || this.originalSize !== size) {
+ throw new DOMException('The requested file could not be read, typically due to permission problems that have occurred after a reference to a file was acquired.', 'NotReadableError')
+ }
+
+ yield * createReadStream(this.#path, {
+ start: this.#start,
+ end: this.#start + this.size - 1
+ })
+ }
+
+ get [Symbol.toStringTag] () {
+ return 'Blob'
+ }
+}
+
+process.once('exit', () => {
+ tempDir && rmdirSync(tempDir, { recursive: true })
+})
+
+export default blobFromSync
+export {
+ Blob,
+ blobFrom,
+ blobFromSync,
+ createTemporaryBlob,
+ File,
+ fileFrom,
+ fileFromSync,
+ createTemporaryFile
+}
\ No newline at end of file
diff --git a/local_packages/index.js b/local_packages/index.js
new file mode 100644
index 0000000..0683fa5
--- /dev/null
+++ b/local_packages/index.js
@@ -0,0 +1,254 @@
+/*! fetch-blob. MIT License. Jimmy Wärting */
+
+if (!globalThis.ReadableStream) {
+ try {
+ const process = await import('node:process').then(m => m.default)
+ const { emitWarning } = process
+ try {
+ process.emitWarning = () => {}
+ const streams = await import('node:stream/web').then(m => m.default)
+ Object.assign(globalThis, streams)
+ process.emitWarning = emitWarning
+ } catch (error) {
+ process.emitWarning = emitWarning
+ throw error
+ }
+ } catch (error) {}
+}
+
+// 64 KiB (same size chrome slice theirs blob into Uint8array's)
+const POOL_SIZE = 65536
+
+/**
+ * @param {(Blob | Uint8Array)[]} parts
+ * @param {boolean} clone
+ * @returns {AsyncIterableIterator}
+ */
+async function * toIterator (parts, clone) {
+ for (const part of parts) {
+ if (ArrayBuffer.isView(part)) {
+ if (clone) {
+ let position = part.byteOffset
+ const end = part.byteOffset + part.byteLength
+ while (position !== end) {
+ const size = Math.min(end - position, POOL_SIZE)
+ const chunk = part.buffer.slice(position, position + size)
+ position += chunk.byteLength
+ yield new Uint8Array(chunk)
+ }
+ } else {
+ yield part
+ }
+ } else {
+ // @ts-ignore TS Think blob.stream() returns a node:stream
+ yield * part.stream()
+ }
+ }
+}
+
+const _Blob = class Blob {
+ /** @type {Array.<(Blob|Uint8Array)>} */
+ #parts = []
+ #type = ''
+ #size = 0
+ #endings = 'transparent'
+
+ /**
+ * The Blob() constructor returns a new Blob object. The content
+ * of the blob consists of the concatenation of the values given
+ * in the parameter array.
+ *
+ * @param {*} blobParts
+ * @param {{ type?: string, endings?: string }} [options]
+ */
+ constructor (blobParts = [], options = {}) {
+ if (typeof blobParts !== 'object' || blobParts === null) {
+ throw new TypeError('Failed to construct \'Blob\': The provided value cannot be converted to a sequence.')
+ }
+
+ if (typeof blobParts[Symbol.iterator] !== 'function') {
+ throw new TypeError('Failed to construct \'Blob\': The object must have a callable @@iterator property.')
+ }
+
+ if (typeof options !== 'object' && typeof options !== 'function') {
+ throw new TypeError('Failed to construct \'Blob\': parameter 2 cannot convert to dictionary.')
+ }
+
+ if (options === null) options = {}
+
+ const encoder = new TextEncoder()
+ for (const element of blobParts) {
+ let part
+ if (ArrayBuffer.isView(element)) {
+ part = new Uint8Array(element.buffer.slice(element.byteOffset, element.byteOffset + element.byteLength))
+ } else if (element instanceof ArrayBuffer) {
+ part = new Uint8Array(element.slice(0))
+ } else if (element instanceof Blob) {
+ part = element
+ } else {
+ part = encoder.encode(`${element}`)
+ }
+
+ const size = ArrayBuffer.isView(part) ? part.byteLength : part.size
+ // Avoid pushing empty parts into the array to better GC them
+ if (size) {
+ this.#size += size
+ this.#parts.push(part)
+ }
+ }
+
+ this.#endings = `${options.endings === undefined ? 'transparent' : options.endings}`
+ const type = options.type === undefined ? '' : String(options.type)
+ this.#type = /^[\x20-\x7E]*$/.test(type) ? type : ''
+ }
+
+ /**
+ * The Blob interface's size property returns the
+ * size of the Blob in bytes.
+ */
+ get size () {
+ return this.#size
+ }
+
+ /**
+ * The type property of a Blob object returns the MIME type of the file.
+ */
+ get type () {
+ return this.#type
+ }
+
+ /**
+ * The text() method in the Blob interface returns a Promise
+ * that resolves with a string containing the contents of
+ * the blob, interpreted as UTF-8.
+ *
+ * @return {Promise}
+ */
+ async text () {
+ // More optimized than using this.arrayBuffer()
+ // that requires twice as much ram
+ const decoder = new TextDecoder()
+ let str = ''
+ for await (const part of toIterator(this.#parts, false)) {
+ str += decoder.decode(part, { stream: true })
+ }
+ // Remaining
+ str += decoder.decode()
+ return str
+ }
+
+ /**
+ * The arrayBuffer() method in the Blob interface returns a
+ * Promise that resolves with the contents of the blob as
+ * binary data contained in an ArrayBuffer.
+ *
+ * @return {Promise}
+ */
+ async arrayBuffer () {
+ const data = new Uint8Array(this.size)
+ let offset = 0
+ for await (const chunk of toIterator(this.#parts, false)) {
+ data.set(chunk, offset)
+ offset += chunk.length
+ }
+
+ return data.buffer
+ }
+
+ stream () {
+ const it = toIterator(this.#parts, true)
+
+ return new globalThis.ReadableStream({
+ // @ts-ignore
+ type: 'bytes',
+ async pull (ctrl) {
+ const chunk = await it.next()
+ chunk.done ? ctrl.close() : ctrl.enqueue(chunk.value)
+ },
+
+ async cancel () {
+ await it.return()
+ }
+ })
+ }
+
+ /**
+ * The Blob interface's slice() method creates and returns a
+ * new Blob object which contains data from a subset of the
+ * blob on which it's called.
+ *
+ * @param {number} [start]
+ * @param {number} [end]
+ * @param {string} [type]
+ */
+ slice (start = 0, end = this.size, type = '') {
+ const { size } = this
+
+ let relativeStart = start < 0 ? Math.max(size + start, 0) : Math.min(start, size)
+ let relativeEnd = end < 0 ? Math.max(size + end, 0) : Math.min(end, size)
+
+ const span = Math.max(relativeEnd - relativeStart, 0)
+ const parts = this.#parts
+ const blobParts = []
+ let added = 0
+
+ for (const part of parts) {
+ // don't add the overflow to new blobParts
+ if (added >= span) {
+ break
+ }
+
+ const size = ArrayBuffer.isView(part) ? part.byteLength : part.size
+ if (relativeStart && size <= relativeStart) {
+ // Skip the beginning and change the relative
+ // start & end position as we skip the unwanted parts
+ relativeStart -= size
+ relativeEnd -= size
+ } else {
+ let chunk
+ if (ArrayBuffer.isView(part)) {
+ chunk = part.subarray(relativeStart, Math.min(size, relativeEnd))
+ added += chunk.byteLength
+ } else {
+ chunk = part.slice(relativeStart, Math.min(size, relativeEnd))
+ added += chunk.size
+ }
+ relativeEnd -= size
+ blobParts.push(chunk)
+ relativeStart = 0 // All next sequential parts should start at 0
+ }
+ }
+
+ const blob = new Blob([], { type: `${type}` })
+ blob.#size = span
+ blob.#parts = blobParts
+
+ return blob
+ }
+
+ get [Symbol.toStringTag] () {
+ return 'Blob'
+ }
+
+ static [Symbol.hasInstance] (object) {
+ return (
+ object &&
+ typeof object === 'object' &&
+ typeof object.constructor === 'function' &&
+ (
+ typeof object.stream === 'function' ||
+ typeof object.arrayBuffer === 'function'
+ ) &&
+ /^(Blob|File)$/.test(object[Symbol.toStringTag])
+ )
+ }
+}
+
+Object.defineProperties(_Blob.prototype, {
+ size: { enumerable: true },
+ type: { enumerable: true },
+ slice: { enumerable: true }
+})
+
+/** @type {typeof globalThis.Blob} */
+export const Blob = _Blob
diff --git a/local_packages/package.json b/local_packages/package.json
new file mode 100644
index 0000000..f073185
--- /dev/null
+++ b/local_packages/package.json
@@ -0,0 +1,52 @@
+{
+ "name": "fetch-blob",
+ "version": "4.1.0",
+ "description": "Blob & File implementation in Node.js, originally from node-fetch.",
+ "main": "index.js",
+ "type": "module",
+ "files": [
+ "from.js",
+ "file.js",
+ "file.d.ts",
+ "index.js",
+ "index.d.ts",
+ "from.d.ts"
+ ],
+ "scripts": {
+ "test": "node --experimental-loader ./test/http-loader.js ./test/test-wpt-in-node.js",
+ "report": "c8 --reporter json --reporter text npm run test",
+ "coverage": "pnpm run report && codecov -f coverage/coverage-final.json",
+ "prepublishOnly": "tsc --declaration --emitDeclarationOnly --allowJs index.js from.js"
+ },
+ "repository": "https://github.com/node-fetch/fetch-blob.git",
+ "keywords": [
+ "blob",
+ "file",
+ "node-fetch"
+ ],
+ "engines": {
+ "node": ">=18"
+ },
+ "author": "Jimmy Wärting (https://jimmy.warting.se)",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/node-fetch/fetch-blob/issues"
+ },
+ "homepage": "https://github.com/node-fetch/fetch-blob#readme",
+ "devDependencies": {
+ "@types/node": "^24.1.0",
+ "c8": "^10.1.3",
+ "typescript": "^5.8.3"
+ },
+ "packageManager": "pnpm@10.13.1",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/jimmywarting"
+ },
+ {
+ "type": "paypal",
+ "url": "https://paypal.me/jimmywarting"
+ }
+ ]
+}
diff --git a/local_packages/pnpm-lock.yaml b/local_packages/pnpm-lock.yaml
new file mode 100644
index 0000000..42585f2
--- /dev/null
+++ b/local_packages/pnpm-lock.yaml
@@ -0,0 +1,547 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ devDependencies:
+ '@types/node':
+ specifier: ^24.1.0
+ version: 24.1.0
+ c8:
+ specifier: ^10.1.3
+ version: 10.1.3
+ typescript:
+ specifier: ^5.8.3
+ version: 5.8.3
+
+packages:
+
+ '@bcoe/v8-coverage@1.0.2':
+ resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==}
+ engines: {node: '>=18'}
+
+ '@isaacs/cliui@8.0.2':
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+ engines: {node: '>=12'}
+
+ '@istanbuljs/schema@0.1.3':
+ resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
+ engines: {node: '>=8'}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.5.4':
+ resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==}
+
+ '@jridgewell/trace-mapping@0.3.29':
+ resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==}
+
+ '@pkgjs/parseargs@0.11.0':
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+ engines: {node: '>=14'}
+
+ '@types/istanbul-lib-coverage@2.0.6':
+ resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
+
+ '@types/node@24.1.0':
+ resolution: {integrity: sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-regex@6.1.0:
+ resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
+ engines: {node: '>=12'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansi-styles@6.2.1:
+ resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+ engines: {node: '>=12'}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ brace-expansion@2.0.2:
+ resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+
+ c8@10.1.3:
+ resolution: {integrity: sha512-LvcyrOAaOnrrlMpW22n690PUvxiq4Uf9WMhQwNJ9vgagkL/ph1+D4uvjvDA5XCbykrc0sx+ay6pVi9YZ1GnhyA==}
+ engines: {node: '>=18'}
+ hasBin: true
+ peerDependencies:
+ monocart-coverage-reports: ^2
+ peerDependenciesMeta:
+ monocart-coverage-reports:
+ optional: true
+
+ cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+ cross-spawn@7.0.6:
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+ engines: {node: '>= 8'}
+
+ eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ foreground-child@3.3.1:
+ resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
+ engines: {node: '>=14'}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ glob@10.4.5:
+ resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
+ hasBin: true
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ html-escaper@2.0.2:
+ resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ istanbul-lib-coverage@3.2.2:
+ resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
+ engines: {node: '>=8'}
+
+ istanbul-lib-report@3.0.1:
+ resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
+ engines: {node: '>=10'}
+
+ istanbul-reports@3.1.7:
+ resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==}
+ engines: {node: '>=8'}
+
+ jackspeak@3.4.3:
+ resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ lru-cache@10.4.3:
+ resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+
+ make-dir@4.0.0:
+ resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
+ engines: {node: '>=10'}
+
+ minimatch@9.0.5:
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minipass@7.1.2:
+ resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ package-json-from-dist@1.0.1:
+ resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ path-scurry@1.11.1:
+ resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+ engines: {node: '>=16 || 14 >=14.18'}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ semver@7.7.2:
+ resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-ansi@7.1.0:
+ resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+ engines: {node: '>=12'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ test-exclude@7.0.1:
+ resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==}
+ engines: {node: '>=18'}
+
+ typescript@5.8.3:
+ resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ undici-types@7.8.0:
+ resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==}
+
+ v8-to-istanbul@9.3.0:
+ resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==}
+ engines: {node: '>=10.12.0'}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+
+ yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@bcoe/v8-coverage@1.0.2': {}
+
+ '@isaacs/cliui@8.0.2':
+ dependencies:
+ string-width: 5.1.2
+ string-width-cjs: string-width@4.2.3
+ strip-ansi: 7.1.0
+ strip-ansi-cjs: strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: wrap-ansi@7.0.0
+
+ '@istanbuljs/schema@0.1.3': {}
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/sourcemap-codec@1.5.4': {}
+
+ '@jridgewell/trace-mapping@0.3.29':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.4
+
+ '@pkgjs/parseargs@0.11.0':
+ optional: true
+
+ '@types/istanbul-lib-coverage@2.0.6': {}
+
+ '@types/node@24.1.0':
+ dependencies:
+ undici-types: 7.8.0
+
+ ansi-regex@5.0.1: {}
+
+ ansi-regex@6.1.0: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansi-styles@6.2.1: {}
+
+ balanced-match@1.0.2: {}
+
+ brace-expansion@2.0.2:
+ dependencies:
+ balanced-match: 1.0.2
+
+ c8@10.1.3:
+ dependencies:
+ '@bcoe/v8-coverage': 1.0.2
+ '@istanbuljs/schema': 0.1.3
+ find-up: 5.0.0
+ foreground-child: 3.3.1
+ istanbul-lib-coverage: 3.2.2
+ istanbul-lib-report: 3.0.1
+ istanbul-reports: 3.1.7
+ test-exclude: 7.0.1
+ v8-to-istanbul: 9.3.0
+ yargs: 17.7.2
+ yargs-parser: 21.1.1
+
+ cliui@8.0.1:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ convert-source-map@2.0.0: {}
+
+ cross-spawn@7.0.6:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ eastasianwidth@0.2.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ emoji-regex@9.2.2: {}
+
+ escalade@3.2.0: {}
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ foreground-child@3.3.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ signal-exit: 4.1.0
+
+ get-caller-file@2.0.5: {}
+
+ glob@10.4.5:
+ dependencies:
+ foreground-child: 3.3.1
+ jackspeak: 3.4.3
+ minimatch: 9.0.5
+ minipass: 7.1.2
+ package-json-from-dist: 1.0.1
+ path-scurry: 1.11.1
+
+ has-flag@4.0.0: {}
+
+ html-escaper@2.0.2: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ isexe@2.0.0: {}
+
+ istanbul-lib-coverage@3.2.2: {}
+
+ istanbul-lib-report@3.0.1:
+ dependencies:
+ istanbul-lib-coverage: 3.2.2
+ make-dir: 4.0.0
+ supports-color: 7.2.0
+
+ istanbul-reports@3.1.7:
+ dependencies:
+ html-escaper: 2.0.2
+ istanbul-lib-report: 3.0.1
+
+ jackspeak@3.4.3:
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ lru-cache@10.4.3: {}
+
+ make-dir@4.0.0:
+ dependencies:
+ semver: 7.7.2
+
+ minimatch@9.0.5:
+ dependencies:
+ brace-expansion: 2.0.2
+
+ minipass@7.1.2: {}
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ package-json-from-dist@1.0.1: {}
+
+ path-exists@4.0.0: {}
+
+ path-key@3.1.1: {}
+
+ path-scurry@1.11.1:
+ dependencies:
+ lru-cache: 10.4.3
+ minipass: 7.1.2
+
+ require-directory@2.1.1: {}
+
+ semver@7.7.2: {}
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@3.0.0: {}
+
+ signal-exit@4.1.0: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ string-width@5.1.2:
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.1.0
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-ansi@7.1.0:
+ dependencies:
+ ansi-regex: 6.1.0
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ test-exclude@7.0.1:
+ dependencies:
+ '@istanbuljs/schema': 0.1.3
+ glob: 10.4.5
+ minimatch: 9.0.5
+
+ typescript@5.8.3: {}
+
+ undici-types@7.8.0: {}
+
+ v8-to-istanbul@9.3.0:
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.29
+ '@types/istanbul-lib-coverage': 2.0.6
+ convert-source-map: 2.0.0
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@8.1.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 5.1.2
+ strip-ansi: 7.1.0
+
+ y18n@5.0.8: {}
+
+ yargs-parser@21.1.1: {}
+
+ yargs@17.7.2:
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+
+ yocto-queue@0.1.0: {}
diff --git a/local_packages/test/http-loader.js b/local_packages/test/http-loader.js
new file mode 100644
index 0000000..5910a7a
--- /dev/null
+++ b/local_packages/test/http-loader.js
@@ -0,0 +1,59 @@
+import { Buffer } from 'node:buffer'
+import fs from 'node:fs'
+import { get } from 'node:https'
+
+const fetch = url => new Promise(rs => get(url, rs))
+const cache = new URL('./.cache/', import.meta.url)
+
+export function resolve(specifier, context, nextResolve) {
+ const { parentURL = null } = context;
+
+ // Normally Node.js would error on specifiers starting with 'https://', so
+ // this hook intercepts them and converts them into absolute URLs to be
+ // passed along to the later hooks below.
+ if (specifier.startsWith('https://')) {
+ return {
+ shortCircuit: true,
+ url: specifier,
+ };
+ } else if (parentURL && parentURL.startsWith('https://')) {
+ return {
+ shortCircuit: true,
+ url: new URL(specifier, parentURL).href,
+ };
+ }
+
+ // Let Node.js handle all other specifiers.
+ return nextResolve(specifier);
+}
+
+export async function load(url, context, nextLoad) {
+ // For JavaScript to be loaded over the network, we need to fetch and
+ // return it.
+ if (url.startsWith('https://')) {
+ const uuid = Buffer.from(url).toString('hex')
+ const cachedFile = new URL(uuid, cache)
+ let data = ''
+
+ // cache remote files for 1h
+ if (fs.existsSync(cachedFile) && fs.statSync(cachedFile).mtimeMs > Date.now() - 1000 * 60 * 60) {
+ data = fs.readFileSync(cachedFile, 'utf8')
+ } else {
+ const res = await fetch(url).catch(err => err)
+ for await (const chunk of res) data += chunk
+ fs.mkdirSync(cache, { recursive: true })
+ fs.writeFileSync(cachedFile, data)
+ }
+
+ // This example assumes all network-provided JavaScript is ES module
+ // code.
+ return {
+ format: 'module',
+ shortCircuit: true,
+ source: data,
+ }
+ }
+
+ // Let Node.js handle all other URLs.
+ return nextLoad(url);
+}
\ No newline at end of file
diff --git a/local_packages/test/own-misc-test.js b/local_packages/test/own-misc-test.js
new file mode 100644
index 0000000..c0fb425
--- /dev/null
+++ b/local_packages/test/own-misc-test.js
@@ -0,0 +1,257 @@
+// @ts-nocheck
+// @ts-ignore
+
+import fs from 'node:fs'
+import buffer from 'node:buffer'
+import syncBlob, {
+ blobFromSync,
+ blobFrom,
+ fileFromSync,
+ fileFrom,
+ createTemporaryBlob,
+ createTemporaryFile
+} from '../from.js'
+
+const license = fs.readFileSync('./LICENSE')
+
+test_blob(() => new Blob([
+ 'a',
+ new Uint8Array([98]),
+ new Uint16Array([25699]),
+ new Uint8Array([101]).buffer,
+ Buffer.from('f'),
+ new Blob(['g']),
+ {},
+ new URLSearchParams('foo')
+]), {
+ desc: 'Blob ctor parts',
+ expected: 'abcdefg[object Object]foo=',
+ type: '',
+ length: 26
+})
+
+promise_test(async () => {
+ assert_equals(fileFromSync('./LICENSE').name, 'LICENSE')
+ assert_equals((await fileFrom('./LICENSE')).name, 'LICENSE')
+}, 'file from returns the same name')
+
+// Could not find similar test on WPT
+test(() => {
+ const now = new Date()
+ assert_equals(new File([], '', { lastModified: now }).lastModified, +now)
+ assert_equals(new File([], '', { lastModified: +now }).lastModified, +now)
+ assert_equals(new File([], '', { lastModified: 100 }).lastModified, 100)
+ assert_equals(new File([], '', { lastModified: '200' }).lastModified, 200)
+ assert_equals(new File([], '', { lastModified: true }).lastModified, 1)
+ assert_equals(new File([], '', { lastModified: false }).lastModified, 0)
+ assert_approx_equals(new File([], '').lastModified, Date.now(), 0.020)
+ assert_approx_equals(new File([], '', { lastModified: undefined }).lastModified, Date.now(), 0.020)
+}, 'File sets current time')
+
+// Could not find similar test on WPT
+test(() => {
+ const values = ['Not a Number', [], {}, null]
+ // I can't really see anything about this in the spec,
+ // but this is how browsers handle type casting for this option...
+ for (const lastModified of values) {
+ const file = new File([], '', { lastModified })
+ assert_equals(file.lastModified, 0)
+ }
+}, 'Interprets NaN value in lastModified option as 0')
+
+test(() => {
+ assert_equals(blobFromSync, syncBlob)
+}, 'default export is named exported blobFromSync')
+
+// This was necessary to avoid large ArrayBuffer clones (slice)
+promise_test(async t => {
+ const buf = new Uint8Array(65590)
+ const blob = new Blob([buf])
+ let i = 0
+ // eslint-disable-next-line no-unused-vars
+ for await (const chunk of blob.stream()) {
+ i++
+ }
+
+ assert_equals(i, 2)
+}, 'Large chunks are divided into smaller chunks')
+
+// Couldn't find a test for this on WPT
+promise_test(async () => {
+ const buf = new Uint8Array([97])
+ const blob = new Blob([buf])
+ const chunk = await blob.stream().getReader().read()
+ assert_equals(chunk.value[0], 97)
+ chunk.value[0] = 98
+ assert_equals(await blob.text(), 'a')
+}, 'Blobs are immutable')
+
+/**
+ * Deviation from WPT: it's important to keep boundary value
+ * so we don't lowercase the type
+ * @see https://github.com/w3c/FileAPI/issues/43
+ */
+test(() => {
+ const type = 'multipart/form-data; boundary=----WebKitFormBoundaryTKqdrVt01qOBltBd'
+ assert_equals(new Blob([], { type }).type, type)
+ assert_equals(new File([], '', { type }).type, type)
+}, 'Dose not lowercase the type')
+
+
+test( // Because we have symbol.hasInstance it's best to test it...
+ () => (assert_false(null instanceof Blob), assert_false(null instanceof File)),
+ 'Instanceof check returns false for nullish values'
+)
+
+test( // Because browser normally never tries things taken for granted
+ () => assert_equals(new Blob().toString(), '[object Blob]'),
+ 'blob.toString() returns [object Blob]'
+)
+
+test( // Because browser normally never tries things taken for granted
+ () => assert_equals(new File([], '').toString(), '[object File]'),
+ 'file.toString() returns [object File]'
+)
+
+// fetch-blob uniques is that it supports arbitrary blobs too
+test(() => {
+ class File {
+ stream () {}
+ get [Symbol.toStringTag] () { return 'File' }
+ }
+ assert_true(new File() instanceof Blob)
+}, 'Blob-ish class is an instance of Blob')
+
+// fetch-blob uniques is that it supports arbitrary blobs too
+if (buffer.Blob) {
+ test_blob(() => new Blob([new buffer.Blob(['blob part'])]), {
+ desc: 'Can wrap buffer.Blob to a fetch-blob',
+ expected: 'blob part',
+ type: '',
+ })
+}
+
+/**
+ * Test if Blob can be constructed with BOM and keep it when casted to string
+ * Test if blob.text() can correctly remove BOM - `buffer.toString()` is bad
+ */
+promise_test(async () => {
+ const text = '{"foo": "bar"}'
+ const blob = new Blob([`\uFEFF${text}`])
+ assert_equals(blob.size, 17)
+ assert_equals(await blob.text(), text)
+ const ab = await blob.slice(0, 3).arrayBuffer()
+ assert_equals_typed_array(new Uint8Array(ab), new Uint8Array([0xEF, 0xBB, 0xBF]))
+}, 'Can wrap buffer.Blob to a fetch-blob')
+
+// Here to make sure our `toIterator` is working as intended
+promise_test(async () => {
+ const stream = new Blob(['Some content']).stream()
+
+ // Cancel the stream before start reading, or this will throw an error
+ await stream.cancel()
+ const reader = stream.getReader()
+ const { done, value: chunk } = await reader.read()
+
+ assert_true(done)
+ assert_equals(chunk, undefined)
+}, 'Blob stream() can be cancelled')
+
+/******************************************************************************/
+/* */
+/* Test Blobs backed up by the filesystem */
+/* */
+/******************************************************************************/
+
+promise_test(async () => {
+ assert_equals(fileFromSync('./LICENSE', 'text/plain').type, 'text/plain')
+ assert_equals(fileFromSync('./LICENSE').type, '')
+
+ assert_equals(blobFromSync('./LICENSE', 'text/plain').type, 'text/plain')
+ assert_equals(blobFromSync('./LICENSE').type, '')
+
+ assert_equals((await fileFrom('./LICENSE', 'text/plain')).type, 'text/plain')
+ assert_equals((await fileFrom('./LICENSE')).type, '')
+
+ assert_equals((await blobFrom('./LICENSE', 'text/plain')).type, 'text/plain')
+ assert_equals((await blobFrom('./LICENSE')).type, '')
+}, 'from utilities sets correct type')
+
+promise_test(async () => {
+ assert_equals(await blobFromSync('./LICENSE').text(), license.toString())
+ assert_equals(await fileFromSync('./LICENSE').text(), license.toString())
+ assert_equals(await (await blobFrom('./LICENSE')).text(), license.toString())
+ assert_equals(await (await fileFrom('./LICENSE')).text(), license.toString())
+}, 'blob part backed up by filesystem can be read')
+
+promise_test(async () => {
+ assert_equals(await blobFromSync('./LICENSE').text(), license.toString())
+ assert_equals(await fileFromSync('./LICENSE').text(), license.toString())
+ assert_equals(await (await blobFrom('./LICENSE')).text(), license.toString())
+ assert_equals(await (await fileFrom('./LICENSE')).text(), license.toString())
+}, 'blob part backed up by filesystem slice correctly')
+
+promise_test(async () => {
+ let blob
+ // Can construct a temporary blob from a string
+ blob = await createTemporaryBlob(license.toString())
+ assert_equals(await blob.text(), license.toString())
+
+ // Can construct a temporary blob from a async iterator
+ blob = await createTemporaryBlob(blob.stream())
+ assert_equals(await blob.text(), license.toString())
+
+ // Can construct a temporary file from a arrayBuffer
+ blob = await createTemporaryBlob(await blob.arrayBuffer())
+ assert_equals(await blob.text(), license.toString())
+
+ // Can construct a temporary file from a arrayBufferView
+ blob = await createTemporaryBlob(await blob.arrayBuffer().then(ab => new Uint8Array(ab)))
+ assert_equals(await blob.text(), license.toString())
+
+ // Can specify a mime type
+ blob = await createTemporaryBlob('abc', { type: 'text/plain' })
+ assert_equals(blob.type, 'text/plain')
+
+ // Can create files too
+ let file = await createTemporaryFile('abc', 'abc.txt', {
+ type: 'text/plain',
+ lastModified: 123
+ })
+ assert_equals(file.name, 'abc.txt')
+ assert_equals(file.size, 3)
+ assert_equals(file.lastModified, 123)
+}, 'creating temporary blob/file backed up by filesystem')
+
+promise_test(async () => {
+ fs.writeFileSync('temp', '')
+ await blobFromSync('./temp').text()
+ fs.unlinkSync('./temp')
+}, 'can read empty files')
+
+test(async () => {
+ const blob = blobFromSync('./LICENSE')
+ await new Promise(resolve => setTimeout(resolve, 2000))
+ const now = new Date()
+ // Change modified time
+ fs.utimesSync('./LICENSE', now, now)
+ const error = await blob.text().then(assert_unreached, e => e)
+ assert_equals(error.constructor.name, 'DOMException')
+ assert_equals(error instanceof Error, true)
+ assert_equals(error.name, 'NotReadableError')
+
+ const file = fileFromSync('./LICENSE')
+ // Above test updates the last modified date to now
+ assert_equals(typeof file.lastModified, 'number')
+ // The lastModifiedDate is deprecated and removed from spec
+ assert_false('lastModifiedDate' in file)
+ assert_approx_equals(file.lastModified, +now, 1000)
+}, 'Reading after modified should fail')
+
+promise_test(async () => {
+ assert_equals(await blobFromSync('./LICENSE').slice(0, 0).text(), '')
+ assert_equals(await blobFromSync('./LICENSE').slice(0, 3).text(), license.slice(0, 3).toString())
+ assert_equals(await blobFromSync('./LICENSE').slice(4, 11).text(), license.slice(4, 11).toString())
+ assert_equals(await blobFromSync('./LICENSE').slice(-11).text(), license.slice(-11).toString())
+ assert_equals(await blobFromSync('./LICENSE').slice(4, 11).slice(2, 5).text(), license.slice(4, 11).slice(2, 5).toString())
+}, 'slicing blobs backed up by filesystem returns correct string')
diff --git a/local_packages/test/test-wpt-in-node.js b/local_packages/test/test-wpt-in-node.js
new file mode 100644
index 0000000..a58a690
--- /dev/null
+++ b/local_packages/test/test-wpt-in-node.js
@@ -0,0 +1,146 @@
+// Don't want to use the FileReader, don't want to lowerCase the type either
+// import from 'https://wpt.live/resources/testharnessreport.js'
+import('https://wpt.live/FileAPI/file/File-constructor.any.js')
+import('https://wpt.live/FileAPI/blob/Blob-constructor.any.js')
+import('https://wpt.live/FileAPI/blob/Blob-array-buffer.any.js')
+import('https://wpt.live/FileAPI/blob/Blob-slice-overflow.any.js')
+import('https://wpt.live/FileAPI/blob/Blob-slice.any.js')
+import('https://wpt.live/FileAPI/blob/Blob-stream.any.js')
+import('https://wpt.live/FileAPI/blob/Blob-text.any.js')
+import('./own-misc-test.js')
+import { File, Blob } from '../from.js'
+
+let hasFailed
+globalThis.self = globalThis
+await import('https://wpt.live/resources/testharness.js')
+
+setup({
+ explicit_timeout: true,
+ explicit_done: true
+})
+
+function test_blob (fn, expectations) {
+ const expected = expectations.expected
+ const type = expectations.type
+ const desc = expectations.desc
+ const length = expectations.length
+
+ const t = async_test(desc)
+ t.step(async function () {
+ const blob = fn()
+ assert_true(blob instanceof Blob)
+ assert_false(blob instanceof File)
+ assert_equals(blob.type.toLowerCase(), type.toLowerCase())
+ assert_equals(await blob.text(), expected)
+ t.done()
+ })
+}
+
+function test_blob_binary (fn, expectations) {
+ const expected = expectations.expected
+ const type = expectations.type
+ const desc = expectations.desc
+
+ const t = async_test(desc)
+ t.step(async function () {
+ const blob = fn()
+ assert_true(blob instanceof Blob)
+ assert_false(blob instanceof File)
+ assert_equals(blob.type.toLowerCase(), type)
+ const result = await blob.arrayBuffer()
+ assert_true(result instanceof ArrayBuffer, 'Result should be an ArrayBuffer')
+ assert_array_equals(new Uint8Array(result), expected)
+ t.done()
+ })
+}
+
+// Assert that two TypedArray objects have the same byte values
+globalThis.assert_equals_typed_array = (array1, array2) => {
+ const [view1, view2] = [array1, array2].map((array) => {
+ assert_true(array.buffer instanceof ArrayBuffer,
+ 'Expect input ArrayBuffers to contain field `buffer`')
+ return new DataView(array.buffer, array.byteOffset, array.byteLength)
+ })
+
+ assert_equals(view1.byteLength, view2.byteLength,
+ 'Expect both arrays to be of the same byte length')
+
+ const byteLength = view1.byteLength
+
+ for (let i = 0; i < byteLength; ++i) {
+ assert_equals(view1.getUint8(i), view2.getUint8(i),
+ `Expect byte at buffer position ${i} to be equal`)
+ }
+}
+
+globalThis.add_result_callback((test, ...args) => {
+ if ([
+ 'Blob with type "A"',
+ 'Blob with type "TEXT/HTML"',
+ 'Getters and value conversions should happen in order until an exception is thrown.',
+ 'Using type in File constructor: TEXT/PLAIN',
+ 'Using type in File constructor: text/plain;charset=UTF-8'
+ ].includes(test.name)) return
+
+ const INDENT_SIZE = 2
+ const reporter = {}
+
+ reporter.startSuite = name => console.log(`\n ${(name)}\n`)
+
+ reporter.pass = message => console.log((indent(('√ ') + message, INDENT_SIZE)))
+
+ reporter.fail = message => console.log((indent('\u00D7 ' + message, INDENT_SIZE)))
+
+ reporter.reportStack = stack => console.log((indent(stack, INDENT_SIZE * 2)))
+
+ function indent (string, times) {
+ const prefix = ' '.repeat(times)
+ return string.split('\n').map(l => prefix + l).join('\n')
+ }
+
+ if (test.status === 0) {
+ reporter.pass(test.name)
+ } else if (test.status === 1) {
+ reporter.fail(`${test.name}\n`)
+ reporter.reportStack(`${test.message}\n${test.stack}`)
+ hasFailed = true
+ } else if (test.status === 2) {
+ reporter.fail(`${test.name} (timeout)\n`)
+ reporter.reportStack(`${test.message}\n${test.stack}`)
+ hasFailed = true
+ } else if (test.status === 3) {
+ reporter.fail(`${test.name} (incomplete)\n`)
+ reporter.reportStack(`${test.message}\n${test.stack}`)
+ hasFailed = true
+ } else if (test.status === 4) {
+ reporter.fail(`${test.name} (precondition failed)\n`)
+ reporter.reportStack(`${test.message}\n${test.stack}`)
+ hasFailed = true
+ } else {
+ reporter.fail(`unknown test status: ${test.status}`)
+ hasFailed = true
+ }
+})
+
+globalThis.File = File
+globalThis.Blob = Blob
+globalThis.garbageCollect = () => {}
+globalThis.test_blob = test_blob
+globalThis.test_blob_binary = test_blob_binary
+// Because WPT doesn't clean up after itself
+globalThis.MessageChannel = class extends MessageChannel {
+ constructor () {
+ super()
+ setTimeout(() => {
+ this.port1.close()
+ this.port2.close()
+ this.port1.onmessage = this.port2.onmessage = null
+ }, 100)
+ }
+}
+
+
+if (hasFailed) {
+ console.log('Tests failed')
+ process.exit(1)
+}
\ No newline at end of file
diff --git a/package.json b/package.json
index a9456a4..f59cbc2 100644
--- a/package.json
+++ b/package.json
@@ -31,12 +31,18 @@
"@parcel/watcher": "^2.5.1",
"pnpm": "^10.13.1",
"turbo": "^2.5.5",
- "typescript": "^5.8.3"
+ "typescript": "^5.8.3"
},
"pnpm": {
"overrides": {
"fetch-blob": "file:./local_packages/fetch-blob"
- }
+ },
+ "onlyBuiltDependencies": [
+ "@apollo/protobufjs",
+ "@parcel/watcher",
+ "@tailwindcss/oxide",
+ "sharp",
+ "unrs-resolver"
+ ]
}
}
-
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a7ee910..95ae4be 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -92,6 +92,34 @@ importers:
specifier: ^5
version: 5.8.3
+ services/auth:
+ dependencies:
+ apollo-server-express:
+ specifier: ^3.13.0
+ version: 3.13.0(express@5.1.0)(graphql@16.11.0)
+ express:
+ specifier: ^5.1.0
+ version: 5.1.0
+ graphql:
+ specifier: ^16.11.0
+ version: 16.11.0
+ devDependencies:
+ '@types/express':
+ specifier: ^5.0.3
+ version: 5.0.3
+ '@types/node':
+ specifier: ^20.19.7
+ version: 20.19.7
+ nodemon:
+ specifier: ^3.1.10
+ version: 3.1.10
+ ts-node:
+ specifier: ^10.9.2
+ version: 10.9.2(@types/node@20.19.7)(typescript@5.8.3)
+ typescript:
+ specifier: ^5.8.3
+ version: 5.8.3
+
packages:
'@alloc/quick-lru@5.2.0':
@@ -120,6 +148,68 @@ packages:
subscriptions-transport-ws:
optional: true
+ '@apollo/protobufjs@1.2.6':
+ resolution: {integrity: sha512-Wqo1oSHNUj/jxmsVp4iR3I480p6qdqHikn38lKrFhfzcDJ7lwd7Ck7cHRl4JE81tWNArl77xhnG/OkZhxKBYOw==}
+ hasBin: true
+
+ '@apollo/protobufjs@1.2.7':
+ resolution: {integrity: sha512-Lahx5zntHPZia35myYDBRuF58tlwPskwHc5CWBZC/4bMKB6siTBWwtMrkqXcsNwQiFSzSx5hKdRPUmemrEp3Gg==}
+ hasBin: true
+
+ '@apollo/usage-reporting-protobuf@4.1.1':
+ resolution: {integrity: sha512-u40dIUePHaSKVshcedO7Wp+mPiZsaU6xjv9J+VyxpoU/zL6Jle+9zWeG98tr/+SZ0nZ4OXhrbb8SNr0rAPpIDA==}
+
+ '@apollo/utils.dropunuseddefinitions@1.1.0':
+ resolution: {integrity: sha512-jU1XjMr6ec9pPoL+BFWzEPW7VHHulVdGKMkPAMiCigpVIT11VmCbnij0bWob8uS3ODJ65tZLYKAh/55vLw2rbg==}
+ engines: {node: '>=12.13.0'}
+ peerDependencies:
+ graphql: 14.x || 15.x || 16.x
+
+ '@apollo/utils.keyvaluecache@1.0.2':
+ resolution: {integrity: sha512-p7PVdLPMnPzmXSQVEsy27cYEjVON+SH/Wb7COyW3rQN8+wJgT1nv9jZouYtztWW8ZgTkii5T6tC9qfoDREd4mg==}
+
+ '@apollo/utils.logger@1.0.1':
+ resolution: {integrity: sha512-XdlzoY7fYNK4OIcvMD2G94RoFZbzTQaNP0jozmqqMudmaGo2I/2Jx71xlDJ801mWA/mbYRihyaw6KJii7k5RVA==}
+
+ '@apollo/utils.printwithreducedwhitespace@1.1.0':
+ resolution: {integrity: sha512-GfFSkAv3n1toDZ4V6u2d7L4xMwLA+lv+6hqXicMN9KELSJ9yy9RzuEXaX73c/Ry+GzRsBy/fdSUGayGqdHfT2Q==}
+ engines: {node: '>=12.13.0'}
+ peerDependencies:
+ graphql: 14.x || 15.x || 16.x
+
+ '@apollo/utils.removealiases@1.0.0':
+ resolution: {integrity: sha512-6cM8sEOJW2LaGjL/0vHV0GtRaSekrPQR4DiywaApQlL9EdROASZU5PsQibe2MWeZCOhNrPRuHh4wDMwPsWTn8A==}
+ engines: {node: '>=12.13.0'}
+ peerDependencies:
+ graphql: 14.x || 15.x || 16.x
+
+ '@apollo/utils.sortast@1.1.0':
+ resolution: {integrity: sha512-VPlTsmUnOwzPK5yGZENN069y6uUHgeiSlpEhRnLFYwYNoJHsuJq2vXVwIaSmts015WTPa2fpz1inkLYByeuRQA==}
+ engines: {node: '>=12.13.0'}
+ peerDependencies:
+ graphql: 14.x || 15.x || 16.x
+
+ '@apollo/utils.stripsensitiveliterals@1.2.0':
+ resolution: {integrity: sha512-E41rDUzkz/cdikM5147d8nfCFVKovXxKBcjvLEQ7bjZm/cg9zEcXvS6vFY8ugTubI3fn6zoqo0CyU8zT+BGP9w==}
+ engines: {node: '>=12.13.0'}
+ peerDependencies:
+ graphql: 14.x || 15.x || 16.x
+
+ '@apollo/utils.usagereporting@1.0.1':
+ resolution: {integrity: sha512-6dk+0hZlnDbahDBB2mP/PZ5ybrtCJdLMbeNJD+TJpKyZmSY6bA3SjI8Cr2EM9QA+AdziywuWg+SgbWUF3/zQqQ==}
+ engines: {node: '>=12.13.0'}
+ peerDependencies:
+ graphql: 14.x || 15.x || 16.x
+
+ '@apollographql/apollo-tools@0.5.4':
+ resolution: {integrity: sha512-shM3q7rUbNyXVVRkQJQseXv6bnYM3BUma/eZhwXR4xsuM+bqWnJKvW7SAfRjP7LuSCocrexa5AXhjjawNHrIlw==}
+ engines: {node: '>=8', npm: '>=6'}
+ peerDependencies:
+ graphql: ^14.2.1 || ^15.0.0 || ^16.0.0
+
+ '@apollographql/graphql-playground-html@1.6.29':
+ resolution: {integrity: sha512-xCcXpoz52rI4ksJSdOCxeOCn2DLocxwHf9dVT/Q90Pte1LX+LY+91SFtJF3KXVHH8kEin+g1KKCQPKBjZJfWNA==}
+
'@ardatan/relay-compiler@12.0.3':
resolution: {integrity: sha512-mBDFOGvAoVlWaWqs3hm1AciGHSQE1rqFc/liZTyYz/Oek9yZdT5H26pH2zAFuEiTiBVPPyMuqf5VjOFPI2DGsQ==}
hasBin: true
@@ -211,6 +301,10 @@ packages:
resolution: {integrity: sha512-42XNjtcJTg7mKtMVNx3mdvF/RiPKAkKBRGRy+NvjZnbbkqomiWSF1mT2nwDrmIt8MUralFjlOxG4XPoWtlk2Wg==}
engines: {node: '>=16.0.0'}
+ '@cspotcode/source-map-support@0.8.1':
+ resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
+ engines: {node: '>=12'}
+
'@emnapi/core@1.4.4':
resolution: {integrity: sha512-A9CnAbC6ARNMKcIcrQwq6HeHCjpcBZ5wSx4U01WXCqEKlrzB9F9315WDNHkrs2xbx7YjjSxbUYxuN6EQzpcY2g==}
@@ -471,12 +565,27 @@ packages:
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
+ '@graphql-tools/merge@8.3.1':
+ resolution: {integrity: sha512-BMm99mqdNZbEYeTPK3it9r9S6rsZsQKtlqJsSBknAclXq2pGEfOxjcIZi+kBSkHZKPKCRrYDd5vY0+rUmIHVLg==}
+ peerDependencies:
+ graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
+
+ '@graphql-tools/merge@8.4.2':
+ resolution: {integrity: sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==}
+ peerDependencies:
+ graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
+
'@graphql-tools/merge@9.1.1':
resolution: {integrity: sha512-BJ5/7Y7GOhTuvzzO5tSBFL4NGr7PVqTJY3KeIDlVTT8YLcTXtBR+hlrC3uyEym7Ragn+zyWdHeJ9ev+nRX1X2w==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
+ '@graphql-tools/mock@8.7.20':
+ resolution: {integrity: sha512-ljcHSJWjC/ZyzpXd5cfNhPI7YljRVvabKHPzKjEs5ElxWu2cdlLGvyNYepApXDsM/OJG/2xuhGM+9GWu5gEAPQ==}
+ peerDependencies:
+ graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
+
'@graphql-tools/optimize@2.0.0':
resolution: {integrity: sha512-nhdT+CRGDZ+bk68ic+Jw1OZ99YCDIKYA5AlVAnBHJvMawSx9YQqQAIj4refNc1/LRieGiuWvhbG3jvPVYho0Dg==}
engines: {node: '>=16.0.0'}
@@ -501,6 +610,16 @@ packages:
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
+ '@graphql-tools/schema@8.5.1':
+ resolution: {integrity: sha512-0Esilsh0P/qYcB5DKQpiKeQs/jevzIadNTaT0jeWklPMwNbT7yMX4EqZany7mbeRRlSRwMzNzL5olyFdffHBZg==}
+ peerDependencies:
+ graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
+
+ '@graphql-tools/schema@9.0.19':
+ resolution: {integrity: sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==}
+ peerDependencies:
+ graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
+
'@graphql-tools/url-loader@8.0.33':
resolution: {integrity: sha512-Fu626qcNHcqAj8uYd7QRarcJn5XZ863kmxsg1sm0fyjyfBJnsvC7ddFt6Hayz5kxVKfsnjxiDfPMXanvsQVBKw==}
engines: {node: '>=16.0.0'}
@@ -513,6 +632,16 @@ packages:
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
+ '@graphql-tools/utils@8.9.0':
+ resolution: {integrity: sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg==}
+ peerDependencies:
+ graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
+
+ '@graphql-tools/utils@9.2.1':
+ resolution: {integrity: sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==}
+ peerDependencies:
+ graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
+
'@graphql-tools/wrap@10.1.3':
resolution: {integrity: sha512-YIcw7oZPlmlZKRBOQGNqKNY4lehB+U4NOP0BSuOd+23EZb8X7JjkruYUOjYsQ7GxS7aKmQpFbuqrfsLp9TRZnA==}
engines: {node: '>=18.0.0'}
@@ -670,6 +799,9 @@ packages:
resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
engines: {node: '>=18.0.0'}
+ '@josephg/resolvable@1.0.1':
+ resolution: {integrity: sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg==}
+
'@jridgewell/gen-mapping@0.3.12':
resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==}
@@ -683,6 +815,9 @@ packages:
'@jridgewell/trace-mapping@0.3.29':
resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==}
+ '@jridgewell/trace-mapping@0.3.9':
+ resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
+
'@napi-rs/wasm-runtime@0.2.12':
resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
@@ -838,6 +973,36 @@ packages:
resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==}
engines: {node: '>= 10.0.0'}
+ '@protobufjs/aspromise@1.1.2':
+ resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==}
+
+ '@protobufjs/base64@1.1.2':
+ resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==}
+
+ '@protobufjs/codegen@2.0.4':
+ resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==}
+
+ '@protobufjs/eventemitter@1.1.0':
+ resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==}
+
+ '@protobufjs/fetch@1.1.0':
+ resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==}
+
+ '@protobufjs/float@1.0.2':
+ resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==}
+
+ '@protobufjs/inquire@1.1.0':
+ resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==}
+
+ '@protobufjs/path@1.1.2':
+ resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==}
+
+ '@protobufjs/pool@1.1.0':
+ resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==}
+
+ '@protobufjs/utf8@1.1.0':
+ resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==}
+
'@repeaterjs/repeater@3.0.6':
resolution: {integrity: sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==}
@@ -947,12 +1112,54 @@ packages:
peerDependencies:
graphql: ^16.0.0
+ '@tsconfig/node10@1.0.11':
+ resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
+
+ '@tsconfig/node12@1.0.11':
+ resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
+
+ '@tsconfig/node14@1.0.3':
+ resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
+
+ '@tsconfig/node16@1.0.4':
+ resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
+
'@tybys/wasm-util@0.10.0':
resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==}
+ '@types/accepts@1.3.7':
+ resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==}
+
+ '@types/body-parser@1.19.2':
+ resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==}
+
+ '@types/body-parser@1.19.6':
+ resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
+ '@types/cors@2.8.12':
+ resolution: {integrity: sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==}
+
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+ '@types/express-serve-static-core@4.17.31':
+ resolution: {integrity: sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==}
+
+ '@types/express-serve-static-core@5.0.7':
+ resolution: {integrity: sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==}
+
+ '@types/express@4.17.14':
+ resolution: {integrity: sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==}
+
+ '@types/express@5.0.3':
+ resolution: {integrity: sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==}
+
+ '@types/http-errors@2.0.5':
+ resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==}
+
'@types/js-yaml@4.0.9':
resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==}
@@ -962,12 +1169,27 @@ packages:
'@types/json5@0.0.29':
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+ '@types/long@4.0.2':
+ resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==}
+
+ '@types/mime@1.3.5':
+ resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==}
+
+ '@types/node@10.17.60':
+ resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==}
+
'@types/node@20.19.7':
resolution: {integrity: sha512-1GM9z6BJOv86qkPvzh2i6VW5+VVrXxCLknfmTkWEqz+6DqosiY28XUWCTmBcJ0ACzKqx/iwdIREfo1fwExIlkA==}
'@types/node@24.1.0':
resolution: {integrity: sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==}
+ '@types/qs@6.14.0':
+ resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==}
+
+ '@types/range-parser@1.2.7':
+ resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}
+
'@types/react-dom@19.1.6':
resolution: {integrity: sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==}
peerDependencies:
@@ -976,6 +1198,12 @@ packages:
'@types/react@19.1.8':
resolution: {integrity: sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==}
+ '@types/send@0.17.5':
+ resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==}
+
+ '@types/serve-static@1.15.8':
+ resolution: {integrity: sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==}
+
'@types/ws@8.18.1':
resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
@@ -1165,11 +1393,23 @@ packages:
resolution: {integrity: sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA==}
engines: {node: '>=8'}
+ accepts@1.3.8:
+ resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
+ engines: {node: '>= 0.6'}
+
+ accepts@2.0.0:
+ resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
+ engines: {node: '>= 0.6'}
+
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+ acorn-walk@8.3.4:
+ resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
+ engines: {node: '>=0.4.0'}
+
acorn@8.15.0:
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
engines: {node: '>=0.4.0'}
@@ -1198,6 +1438,63 @@ packages:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ apollo-datasource@3.3.2:
+ resolution: {integrity: sha512-L5TiS8E2Hn/Yz7SSnWIVbZw0ZfEIXZCa5VUiVxD9P53JvSrf4aStvsFDlGWPvpIdCR+aly2CfoB79B9/JjKFqg==}
+ engines: {node: '>=12.0'}
+ deprecated: The `apollo-datasource` package is part of Apollo Server v2 and v3, which are now end-of-life (as of October 22nd 2023 and October 22nd 2024, respectively). See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.
+
+ apollo-reporting-protobuf@3.4.0:
+ resolution: {integrity: sha512-h0u3EbC/9RpihWOmcSsvTW2O6RXVaD/mPEjfrPkxRPTEPWqncsgOoRJw+wih4OqfH3PvTJvoEIf4LwKrUaqWog==}
+ deprecated: The `apollo-reporting-protobuf` package is part of Apollo Server v2 and v3, which are now end-of-life (as of October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/usage-reporting-protobuf` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.
+
+ apollo-server-core@3.13.0:
+ resolution: {integrity: sha512-v/g6DR6KuHn9DYSdtQijz8dLOkP78I5JSVJzPkARhDbhpH74QNwrQ2PP2URAPPEDJ2EeZNQDX8PvbYkAKqg+kg==}
+ engines: {node: '>=12.0'}
+ deprecated: The `apollo-server-core` package is part of Apollo Server v2 and v3, which are now end-of-life (as of October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.
+ peerDependencies:
+ graphql: ^15.3.0 || ^16.0.0
+
+ apollo-server-env@4.2.1:
+ resolution: {integrity: sha512-vm/7c7ld+zFMxibzqZ7SSa5tBENc4B0uye9LTfjJwGoQFY5xsUPH5FpO5j0bMUDZ8YYNbrF9SNtzc5Cngcr90g==}
+ engines: {node: '>=12.0'}
+ deprecated: The `apollo-server-env` package is part of Apollo Server v2 and v3, which are now end-of-life (as of October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/utils.fetcher` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.
+
+ apollo-server-errors@3.3.1:
+ resolution: {integrity: sha512-xnZJ5QWs6FixHICXHxUfm+ZWqqxrNuPlQ+kj5m6RtEgIpekOPssH/SD9gf2B4HuWV0QozorrygwZnux8POvyPA==}
+ engines: {node: '>=12.0'}
+ deprecated: The `apollo-server-errors` package is part of Apollo Server v2 and v3, which are now end-of-life (as of October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.
+ peerDependencies:
+ graphql: ^15.3.0 || ^16.0.0
+
+ apollo-server-express@3.13.0:
+ resolution: {integrity: sha512-iSxICNbDUyebOuM8EKb3xOrpIwOQgKxGbR2diSr4HP3IW8T3njKFOoMce50vr+moOCe1ev8BnLcw9SNbuUtf7g==}
+ engines: {node: '>=12.0'}
+ deprecated: The `apollo-server-express` package is part of Apollo Server v2 and v3, which are now end-of-life (as of October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.
+ peerDependencies:
+ express: ^4.17.1
+ graphql: ^15.3.0 || ^16.0.0
+
+ apollo-server-plugin-base@3.7.2:
+ resolution: {integrity: sha512-wE8dwGDvBOGehSsPTRZ8P/33Jan6/PmL0y0aN/1Z5a5GcbFhDaaJCjK5cav6npbbGL2DPKK0r6MPXi3k3N45aw==}
+ engines: {node: '>=12.0'}
+ deprecated: The `apollo-server-plugin-base` package is part of Apollo Server v2 and v3, which are now end-of-life (as of October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.
+ peerDependencies:
+ graphql: ^15.3.0 || ^16.0.0
+
+ apollo-server-types@3.8.0:
+ resolution: {integrity: sha512-ZI/8rTE4ww8BHktsVpb91Sdq7Cb71rdSkXELSwdSR0eXu600/sY+1UXhTWdiJvk+Eq5ljqoHLwLbY2+Clq2b9A==}
+ engines: {node: '>=12.0'}
+ deprecated: The `apollo-server-types` package is part of Apollo Server v2 and v3, which are now end-of-life (as of October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details.
+ peerDependencies:
+ graphql: ^15.3.0 || ^16.0.0
+
+ arg@4.1.3:
+ resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
+
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
@@ -1255,6 +1552,9 @@ packages:
resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
engines: {node: '>= 0.4'}
+ async-retry@1.3.3:
+ resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==}
+
auto-bind@4.0.0:
resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==}
engines: {node: '>=8'}
@@ -1277,9 +1577,21 @@ packages:
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
bl@4.1.0:
resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
+ body-parser@1.20.3:
+ resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+
+ body-parser@2.2.0:
+ resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==}
+ engines: {node: '>=18'}
+
brace-expansion@1.1.12:
resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
@@ -1305,6 +1617,10 @@ packages:
resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
engines: {node: '>=10.16.0'}
+ bytes@3.1.2:
+ resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
+ engines: {node: '>= 0.8'}
+
call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
@@ -1343,6 +1659,10 @@ packages:
chardet@0.7.0:
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
chownr@3.0.0:
resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
engines: {node: '>=18'}
@@ -1395,6 +1715,9 @@ packages:
colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
common-tags@1.8.2:
resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==}
engines: {node: '>=4.0.0'}
@@ -1405,9 +1728,29 @@ packages:
constant-case@3.0.4:
resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==}
+ content-disposition@1.0.0:
+ resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==}
+ engines: {node: '>= 0.6'}
+
+ content-type@1.0.5:
+ resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
+ engines: {node: '>= 0.6'}
+
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+ cookie-signature@1.2.2:
+ resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==}
+ engines: {node: '>=6.6.0'}
+
+ cookie@0.7.2:
+ resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
+ engines: {node: '>= 0.6'}
+
+ cors@2.8.5:
+ resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
+ engines: {node: '>= 0.10'}
+
cosmiconfig@8.3.6:
resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==}
engines: {node: '>=14'}
@@ -1417,6 +1760,9 @@ packages:
typescript:
optional: true
+ create-require@1.1.1:
+ resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
+
cross-fetch@3.2.0:
resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==}
@@ -1428,6 +1774,9 @@ packages:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
+ cssfilter@0.0.10:
+ resolution: {integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==}
+
csstype@3.1.3:
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
@@ -1456,6 +1805,14 @@ packages:
debounce@1.2.1:
resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==}
+ debug@2.6.9:
+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
debug@3.2.7:
resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
peerDependencies:
@@ -1487,10 +1844,18 @@ packages:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
+ depd@2.0.0:
+ resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
+ engines: {node: '>= 0.8'}
+
dependency-graph@0.11.0:
resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==}
engines: {node: '>= 0.6.0'}
+ destroy@1.2.0:
+ resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+
detect-indent@6.1.0:
resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
engines: {node: '>=8'}
@@ -1504,6 +1869,10 @@ packages:
resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==}
engines: {node: '>=8'}
+ diff@4.0.2:
+ resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
+ engines: {node: '>=0.3.1'}
+
dir-glob@3.0.1:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'}
@@ -1527,6 +1896,9 @@ packages:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
+ ee-first@1.1.1:
+ resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+
electron-to-chromium@1.5.190:
resolution: {integrity: sha512-k4McmnB2091YIsdCgkS0fMVMPOJgxl93ltFzaryXqwip1AaxeDqKCGLxkXODDA5Ab/D+tV5EL5+aTx76RvLRxw==}
@@ -1536,6 +1908,10 @@ packages:
emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+ encodeurl@2.0.0:
+ resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
+ engines: {node: '>= 0.8'}
+
enhanced-resolve@5.18.2:
resolution: {integrity: sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==}
engines: {node: '>=10.13.0'}
@@ -1579,6 +1955,9 @@ packages:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
+ escape-html@1.0.3:
+ resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+
escape-string-regexp@1.0.5:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
@@ -1703,6 +2082,14 @@ packages:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
+ etag@1.8.1:
+ resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
+ engines: {node: '>= 0.6'}
+
+ express@5.1.0:
+ resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==}
+ engines: {node: '>= 18'}
+
external-editor@3.1.0:
resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
engines: {node: '>=4'}
@@ -1760,6 +2147,10 @@ packages:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
+ finalhandler@2.1.0:
+ resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==}
+ engines: {node: '>= 0.8'}
+
find-up@5.0.0:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
@@ -1779,6 +2170,19 @@ packages:
resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
engines: {node: '>=12.20.0'}
+ forwarded@0.2.0:
+ resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
+ engines: {node: '>= 0.6'}
+
+ fresh@2.0.0:
+ resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
+ engines: {node: '>= 0.8'}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
@@ -1890,6 +2294,10 @@ packages:
resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
engines: {node: '>= 0.4'}
+ has-flag@3.0.0:
+ resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
+ engines: {node: '>=4'}
+
has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
@@ -1919,6 +2327,10 @@ packages:
hoist-non-react-statics@3.3.2:
resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
+ http-errors@2.0.0:
+ resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
+ engines: {node: '>= 0.8'}
+
http-proxy-agent@7.0.2:
resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
engines: {node: '>= 14'}
@@ -1931,9 +2343,16 @@ packages:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'}
+ iconv-lite@0.6.3:
+ resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
+ engines: {node: '>=0.10.0'}
+
ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+ ignore-by-default@1.0.1:
+ resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==}
+
ignore@5.3.2:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
@@ -1976,6 +2395,10 @@ packages:
invariant@2.2.4:
resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
+ ipaddr.js@1.9.1:
+ resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
+ engines: {node: '>= 0.10'}
+
is-absolute@1.0.0:
resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==}
engines: {node: '>=0.10.0'}
@@ -1998,6 +2421,10 @@ packages:
resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
engines: {node: '>= 0.4'}
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
is-boolean-object@1.2.2:
resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
engines: {node: '>= 0.4'}
@@ -2064,6 +2491,9 @@ packages:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
+ is-promise@4.0.0:
+ resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==}
+
is-regex@1.2.1:
resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
engines: {node: '>= 0.4'}
@@ -2301,6 +2731,13 @@ packages:
resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==}
engines: {node: '>=10'}
+ loglevel@1.9.2:
+ resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==}
+ engines: {node: '>= 0.6.0'}
+
+ long@4.0.0:
+ resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==}
+
loose-envify@1.4.0:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
@@ -2314,9 +2751,20 @@ packages:
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+ lru-cache@6.0.0:
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+ engines: {node: '>=10'}
+
+ lru-cache@7.13.1:
+ resolution: {integrity: sha512-CHqbAq7NFlW3RSnoWXLJBxCWaZVBrfa9UEHId2M3AW8iEBurbqduNexEUCGc3SHc6iCYXNJCDi903LajSVAEPQ==}
+ engines: {node: '>=12'}
+
magic-string@0.30.17:
resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
map-cache@0.2.2:
resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==}
engines: {node: '>=0.10.0'}
@@ -2325,6 +2773,18 @@ packages:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
+ media-typer@0.3.0:
+ resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
+ engines: {node: '>= 0.6'}
+
+ media-typer@1.1.0:
+ resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==}
+ engines: {node: '>= 0.8'}
+
+ merge-descriptors@2.0.0:
+ resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==}
+ engines: {node: '>=18'}
+
merge2@1.4.1:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
@@ -2342,6 +2802,22 @@ packages:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'}
+ mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ mime-db@1.54.0:
+ resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@3.0.1:
+ resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==}
+ engines: {node: '>= 0.6'}
+
mimic-fn@2.1.0:
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
engines: {node: '>=6'}
@@ -2369,6 +2845,9 @@ packages:
engines: {node: '>=10'}
hasBin: true
+ ms@2.0.0:
+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
@@ -2388,6 +2867,14 @@ packages:
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+ negotiator@0.6.3:
+ resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
+ engines: {node: '>= 0.6'}
+
+ negotiator@1.0.0:
+ resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
+ engines: {node: '>= 0.6'}
+
next@15.3.5:
resolution: {integrity: sha512-RkazLBMMDJSJ4XZQ81kolSpwiCt907l0xcgcpF4xC2Vml6QVcPNXW0NQRwQ80FFtSn7UM52XN0anaw8TEJXaiw==}
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
@@ -2412,6 +2899,9 @@ packages:
no-case@3.0.4:
resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
+ node-abort-controller@3.1.1:
+ resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==}
+
node-addon-api@7.1.1:
resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
@@ -2434,10 +2924,19 @@ packages:
node-releases@2.0.19:
resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
+ nodemon@3.1.10:
+ resolution: {integrity: sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw==}
+ engines: {node: '>=10'}
+ hasBin: true
+
normalize-path@2.1.1:
resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==}
engines: {node: '>=0.10.0'}
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
nullthrows@1.1.1:
resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==}
@@ -2473,6 +2972,13 @@ packages:
resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
engines: {node: '>= 0.4'}
+ on-finished@2.4.1:
+ resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+ engines: {node: '>= 0.8'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
onetime@5.1.2:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'}
@@ -2523,6 +3029,10 @@ packages:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'}
+ parseurl@1.3.3:
+ resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
+ engines: {node: '>= 0.8'}
+
pascal-case@3.1.2:
resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
@@ -2548,6 +3058,10 @@ packages:
resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==}
engines: {node: '>=0.10.0'}
+ path-to-regexp@8.2.0:
+ resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==}
+ engines: {node: '>=16'}
+
path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
@@ -2590,13 +3104,40 @@ packages:
prop-types@15.8.1:
resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
+ proxy-addr@2.0.7:
+ resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
+ engines: {node: '>= 0.10'}
+
+ pstree.remy@1.1.8:
+ resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==}
+
punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
+ qs@6.13.0:
+ resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==}
+ engines: {node: '>=0.6'}
+
+ qs@6.14.0:
+ resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==}
+ engines: {node: '>=0.6'}
+
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+ range-parser@1.2.1:
+ resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
+ engines: {node: '>= 0.6'}
+
+ raw-body@2.5.2:
+ resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
+ engines: {node: '>= 0.8'}
+
+ raw-body@3.0.0:
+ resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==}
+ engines: {node: '>= 0.8'}
+
react-dom@19.1.0:
resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==}
peerDependencies:
@@ -2613,6 +3154,10 @@ packages:
resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
engines: {node: '>= 6'}
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
reflect.getprototypeof@1.0.10:
resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
engines: {node: '>= 0.4'}
@@ -2672,6 +3217,10 @@ packages:
resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
engines: {node: '>=8'}
+ retry@0.13.1:
+ resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==}
+ engines: {node: '>= 4'}
+
reusify@1.1.0:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
@@ -2679,6 +3228,10 @@ packages:
rfdc@1.4.1:
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+ router@2.2.0:
+ resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==}
+ engines: {node: '>= 18'}
+
run-async@2.4.1:
resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
engines: {node: '>=0.12.0'}
@@ -2722,9 +3275,17 @@ packages:
engines: {node: '>=10'}
hasBin: true
+ send@1.2.0:
+ resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==}
+ engines: {node: '>= 18'}
+
sentence-case@3.0.4:
resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==}
+ serve-static@2.2.0:
+ resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==}
+ engines: {node: '>= 18'}
+
set-function-length@1.2.2:
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
engines: {node: '>= 0.4'}
@@ -2740,6 +3301,14 @@ packages:
setimmediate@1.0.5:
resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
+ setprototypeof@1.2.0:
+ resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
+
+ sha.js@2.4.12:
+ resolution: {integrity: sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==}
+ engines: {node: '>= 0.10'}
+ hasBin: true
+
sharp@0.34.3:
resolution: {integrity: sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
@@ -2781,6 +3350,10 @@ packages:
simple-swizzle@0.2.2:
resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
+ simple-update-notifier@2.0.0:
+ resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==}
+ engines: {node: '>=10'}
+
slash@3.0.0:
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
engines: {node: '>=8'}
@@ -2806,6 +3379,14 @@ packages:
stable-hash@0.0.5:
resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==}
+ statuses@2.0.1:
+ resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
+ engines: {node: '>= 0.8'}
+
+ statuses@2.0.2:
+ resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==}
+ engines: {node: '>= 0.8'}
+
stop-iteration-iterator@1.1.0:
resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
engines: {node: '>= 0.4'}
@@ -2872,6 +3453,10 @@ packages:
babel-plugin-macros:
optional: true
+ supports-color@5.5.0:
+ resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
+ engines: {node: '>=4'}
+
supports-color@7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
@@ -2920,10 +3505,22 @@ packages:
resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
engines: {node: '>=0.6.0'}
+ to-buffer@1.2.1:
+ resolution: {integrity: sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==}
+ engines: {node: '>= 0.4'}
+
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
+ toidentifier@1.0.1:
+ resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
+ engines: {node: '>=0.6'}
+
+ touch@3.1.1:
+ resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==}
+ hasBin: true
+
tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
@@ -2940,6 +3537,20 @@ packages:
ts-log@2.2.7:
resolution: {integrity: sha512-320x5Ggei84AxzlXp91QkIGSw5wgaLT6GeAH0KsqDmRZdVWW2OiSeVvElVoatk3f7nicwXlElXsoFkARiGE2yg==}
+ ts-node@10.9.2:
+ resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
+ hasBin: true
+ peerDependencies:
+ '@swc/core': '>=1.2.50'
+ '@swc/wasm': '>=1.2.50'
+ '@types/node': '*'
+ typescript: '>=2.7'
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ '@swc/wasm':
+ optional: true
+
tsconfig-paths@3.15.0:
resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
@@ -2991,6 +3602,14 @@ packages:
resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
engines: {node: '>=10'}
+ type-is@1.6.18:
+ resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
+ engines: {node: '>= 0.6'}
+
+ type-is@2.0.1:
+ resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==}
+ engines: {node: '>= 0.6'}
+
typed-array-buffer@1.0.3:
resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
engines: {node: '>= 0.4'}
@@ -3024,6 +3643,9 @@ packages:
resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==}
engines: {node: '>=0.10.0'}
+ undefsafe@2.0.5:
+ resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==}
+
undici-types@6.21.0:
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
@@ -3034,6 +3656,10 @@ packages:
resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==}
engines: {node: '>=0.10.0'}
+ unpipe@1.0.0:
+ resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
+ engines: {node: '>= 0.8'}
+
unrs-resolver@1.11.1:
resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==}
@@ -3058,12 +3684,35 @@ packages:
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+ uuid@9.0.1:
+ resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
+ hasBin: true
+
+ v8-compile-cache-lib@3.0.1:
+ resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
+
+ value-or-promise@1.0.11:
+ resolution: {integrity: sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg==}
+ engines: {node: '>=12'}
+
+ value-or-promise@1.0.12:
+ resolution: {integrity: sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==}
+ engines: {node: '>=12'}
+
+ vary@1.1.2:
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+ engines: {node: '>= 0.8'}
+
wcwidth@1.0.1:
resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+ whatwg-mimetype@3.0.0:
+ resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==}
+ engines: {node: '>=12'}
+
whatwg-mimetype@4.0.0:
resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
engines: {node: '>=18'}
@@ -3104,6 +3753,9 @@ packages:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
ws@8.18.3:
resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}
engines: {node: '>=10.0.0'}
@@ -3116,6 +3768,11 @@ packages:
utf-8-validate:
optional: true
+ xss@1.0.15:
+ resolution: {integrity: sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==}
+ engines: {node: '>= 0.10.0'}
+ hasBin: true
+
y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'}
@@ -3123,6 +3780,9 @@ packages:
yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+ yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+
yallist@5.0.0:
resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
engines: {node: '>=18'}
@@ -3143,6 +3803,10 @@ packages:
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
engines: {node: '>=12'}
+ yn@3.1.1:
+ resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
+ engines: {node: '>=6'}
+
yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
@@ -3185,6 +3849,87 @@ snapshots:
transitivePeerDependencies:
- '@types/react'
+ '@apollo/protobufjs@1.2.6':
+ dependencies:
+ '@protobufjs/aspromise': 1.1.2
+ '@protobufjs/base64': 1.1.2
+ '@protobufjs/codegen': 2.0.4
+ '@protobufjs/eventemitter': 1.1.0
+ '@protobufjs/fetch': 1.1.0
+ '@protobufjs/float': 1.0.2
+ '@protobufjs/inquire': 1.1.0
+ '@protobufjs/path': 1.1.2
+ '@protobufjs/pool': 1.1.0
+ '@protobufjs/utf8': 1.1.0
+ '@types/long': 4.0.2
+ '@types/node': 10.17.60
+ long: 4.0.0
+
+ '@apollo/protobufjs@1.2.7':
+ dependencies:
+ '@protobufjs/aspromise': 1.1.2
+ '@protobufjs/base64': 1.1.2
+ '@protobufjs/codegen': 2.0.4
+ '@protobufjs/eventemitter': 1.1.0
+ '@protobufjs/fetch': 1.1.0
+ '@protobufjs/float': 1.0.2
+ '@protobufjs/inquire': 1.1.0
+ '@protobufjs/path': 1.1.2
+ '@protobufjs/pool': 1.1.0
+ '@protobufjs/utf8': 1.1.0
+ '@types/long': 4.0.2
+ long: 4.0.0
+
+ '@apollo/usage-reporting-protobuf@4.1.1':
+ dependencies:
+ '@apollo/protobufjs': 1.2.7
+
+ '@apollo/utils.dropunuseddefinitions@1.1.0(graphql@16.11.0)':
+ dependencies:
+ graphql: 16.11.0
+
+ '@apollo/utils.keyvaluecache@1.0.2':
+ dependencies:
+ '@apollo/utils.logger': 1.0.1
+ lru-cache: 7.13.1
+
+ '@apollo/utils.logger@1.0.1': {}
+
+ '@apollo/utils.printwithreducedwhitespace@1.1.0(graphql@16.11.0)':
+ dependencies:
+ graphql: 16.11.0
+
+ '@apollo/utils.removealiases@1.0.0(graphql@16.11.0)':
+ dependencies:
+ graphql: 16.11.0
+
+ '@apollo/utils.sortast@1.1.0(graphql@16.11.0)':
+ dependencies:
+ graphql: 16.11.0
+ lodash.sortby: 4.7.0
+
+ '@apollo/utils.stripsensitiveliterals@1.2.0(graphql@16.11.0)':
+ dependencies:
+ graphql: 16.11.0
+
+ '@apollo/utils.usagereporting@1.0.1(graphql@16.11.0)':
+ dependencies:
+ '@apollo/usage-reporting-protobuf': 4.1.1
+ '@apollo/utils.dropunuseddefinitions': 1.1.0(graphql@16.11.0)
+ '@apollo/utils.printwithreducedwhitespace': 1.1.0(graphql@16.11.0)
+ '@apollo/utils.removealiases': 1.0.0(graphql@16.11.0)
+ '@apollo/utils.sortast': 1.1.0(graphql@16.11.0)
+ '@apollo/utils.stripsensitiveliterals': 1.2.0(graphql@16.11.0)
+ graphql: 16.11.0
+
+ '@apollographql/apollo-tools@0.5.4(graphql@16.11.0)':
+ dependencies:
+ graphql: 16.11.0
+
+ '@apollographql/graphql-playground-html@1.6.29':
+ dependencies:
+ xss: 1.0.15
+
'@ardatan/relay-compiler@12.0.3(graphql@16.11.0)':
dependencies:
'@babel/generator': 7.28.0
@@ -3222,7 +3967,7 @@ snapshots:
'@babel/traverse': 7.28.0
'@babel/types': 7.28.1
convert-source-map: 2.0.0
- debug: 4.4.1
+ debug: 4.4.1(supports-color@5.5.0)
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 6.3.1
@@ -3301,7 +4046,7 @@ snapshots:
'@babel/parser': 7.28.0
'@babel/template': 7.27.2
'@babel/types': 7.28.1
- debug: 4.4.1
+ debug: 4.4.1(supports-color@5.5.0)
transitivePeerDependencies:
- supports-color
@@ -3312,6 +4057,10 @@ snapshots:
'@cloudamqp/amqp-client@3.2.1': {}
+ '@cspotcode/source-map-support@0.8.1':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.9
+
'@emnapi/core@1.4.4':
dependencies:
'@emnapi/wasi-threads': 1.0.3
@@ -3355,7 +4104,7 @@ snapshots:
'@eslint/config-array@0.21.0':
dependencies:
'@eslint/object-schema': 2.1.6
- debug: 4.4.1
+ debug: 4.4.1(supports-color@5.5.0)
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
@@ -3369,7 +4118,7 @@ snapshots:
'@eslint/eslintrc@3.3.1':
dependencies:
ajv: 6.12.6
- debug: 4.4.1
+ debug: 4.4.1(supports-color@5.5.0)
espree: 10.4.0
globals: 14.0.0
ignore: 5.3.2
@@ -3757,12 +4506,32 @@ snapshots:
p-limit: 3.1.0
tslib: 2.8.1
+ '@graphql-tools/merge@8.3.1(graphql@16.11.0)':
+ dependencies:
+ '@graphql-tools/utils': 8.9.0(graphql@16.11.0)
+ graphql: 16.11.0
+ tslib: 2.8.1
+
+ '@graphql-tools/merge@8.4.2(graphql@16.11.0)':
+ dependencies:
+ '@graphql-tools/utils': 9.2.1(graphql@16.11.0)
+ graphql: 16.11.0
+ tslib: 2.8.1
+
'@graphql-tools/merge@9.1.1(graphql@16.11.0)':
dependencies:
'@graphql-tools/utils': 10.9.1(graphql@16.11.0)
graphql: 16.11.0
tslib: 2.8.1
+ '@graphql-tools/mock@8.7.20(graphql@16.11.0)':
+ dependencies:
+ '@graphql-tools/schema': 9.0.19(graphql@16.11.0)
+ '@graphql-tools/utils': 9.2.1(graphql@16.11.0)
+ fast-json-stable-stringify: 2.1.0
+ graphql: 16.11.0
+ tslib: 2.8.1
+
'@graphql-tools/optimize@2.0.0(graphql@16.11.0)':
dependencies:
graphql: 16.11.0
@@ -3775,7 +4544,7 @@ snapshots:
'@types/js-yaml': 4.0.9
'@whatwg-node/fetch': 0.10.9
chalk: 4.1.2
- debug: 4.4.1
+ debug: 4.4.1(supports-color@5.5.0)
dotenv: 16.6.1
graphql: 16.11.0
graphql-request: 6.1.0(graphql@16.11.0)
@@ -3813,6 +4582,22 @@ snapshots:
graphql: 16.11.0
tslib: 2.8.1
+ '@graphql-tools/schema@8.5.1(graphql@16.11.0)':
+ dependencies:
+ '@graphql-tools/merge': 8.3.1(graphql@16.11.0)
+ '@graphql-tools/utils': 8.9.0(graphql@16.11.0)
+ graphql: 16.11.0
+ tslib: 2.8.1
+ value-or-promise: 1.0.11
+
+ '@graphql-tools/schema@9.0.19(graphql@16.11.0)':
+ dependencies:
+ '@graphql-tools/merge': 8.4.2(graphql@16.11.0)
+ '@graphql-tools/utils': 9.2.1(graphql@16.11.0)
+ graphql: 16.11.0
+ tslib: 2.8.1
+ value-or-promise: 1.0.12
+
'@graphql-tools/url-loader@8.0.33(@types/node@24.1.0)(graphql@16.11.0)':
dependencies:
'@graphql-tools/executor-graphql-ws': 2.0.6(graphql@16.11.0)
@@ -3845,6 +4630,17 @@ snapshots:
graphql: 16.11.0
tslib: 2.8.1
+ '@graphql-tools/utils@8.9.0(graphql@16.11.0)':
+ dependencies:
+ graphql: 16.11.0
+ tslib: 2.8.1
+
+ '@graphql-tools/utils@9.2.1(graphql@16.11.0)':
+ dependencies:
+ '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0)
+ graphql: 16.11.0
+ tslib: 2.8.1
+
'@graphql-tools/wrap@10.1.3(graphql@16.11.0)':
dependencies:
'@graphql-tools/delegate': 10.2.22(graphql@16.11.0)
@@ -3961,6 +4757,8 @@ snapshots:
dependencies:
minipass: 7.1.2
+ '@josephg/resolvable@1.0.1': {}
+
'@jridgewell/gen-mapping@0.3.12':
dependencies:
'@jridgewell/sourcemap-codec': 1.5.4
@@ -3975,6 +4773,11 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.4
+ '@jridgewell/trace-mapping@0.3.9':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.4
+
'@napi-rs/wasm-runtime@0.2.12':
dependencies:
'@emnapi/core': 1.4.4
@@ -4086,6 +4889,29 @@ snapshots:
'@parcel/watcher-win32-ia32': 2.5.1
'@parcel/watcher-win32-x64': 2.5.1
+ '@protobufjs/aspromise@1.1.2': {}
+
+ '@protobufjs/base64@1.1.2': {}
+
+ '@protobufjs/codegen@2.0.4': {}
+
+ '@protobufjs/eventemitter@1.1.0': {}
+
+ '@protobufjs/fetch@1.1.0':
+ dependencies:
+ '@protobufjs/aspromise': 1.1.2
+ '@protobufjs/inquire': 1.1.0
+
+ '@protobufjs/float@1.0.2': {}
+
+ '@protobufjs/inquire@1.1.0': {}
+
+ '@protobufjs/path@1.1.2': {}
+
+ '@protobufjs/pool@1.1.0': {}
+
+ '@protobufjs/utf8@1.1.0': {}
+
'@repeaterjs/repeater@3.0.6': {}
'@rtsao/scc@1.1.0': {}
@@ -4173,26 +4999,88 @@ snapshots:
'@theguild/federation-composition@0.19.1(graphql@16.11.0)':
dependencies:
constant-case: 3.0.4
- debug: 4.4.1
+ debug: 4.4.1(supports-color@5.5.0)
graphql: 16.11.0
json5: 2.2.3
lodash.sortby: 4.7.0
transitivePeerDependencies:
- supports-color
+ '@tsconfig/node10@1.0.11': {}
+
+ '@tsconfig/node12@1.0.11': {}
+
+ '@tsconfig/node14@1.0.3': {}
+
+ '@tsconfig/node16@1.0.4': {}
+
'@tybys/wasm-util@0.10.0':
dependencies:
tslib: 2.8.1
optional: true
+ '@types/accepts@1.3.7':
+ dependencies:
+ '@types/node': 20.19.7
+
+ '@types/body-parser@1.19.2':
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 20.19.7
+
+ '@types/body-parser@1.19.6':
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 20.19.7
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 20.19.7
+
+ '@types/cors@2.8.12': {}
+
'@types/estree@1.0.8': {}
+ '@types/express-serve-static-core@4.17.31':
+ dependencies:
+ '@types/node': 20.19.7
+ '@types/qs': 6.14.0
+ '@types/range-parser': 1.2.7
+
+ '@types/express-serve-static-core@5.0.7':
+ dependencies:
+ '@types/node': 20.19.7
+ '@types/qs': 6.14.0
+ '@types/range-parser': 1.2.7
+ '@types/send': 0.17.5
+
+ '@types/express@4.17.14':
+ dependencies:
+ '@types/body-parser': 1.19.2
+ '@types/express-serve-static-core': 4.17.31
+ '@types/qs': 6.14.0
+ '@types/serve-static': 1.15.8
+
+ '@types/express@5.0.3':
+ dependencies:
+ '@types/body-parser': 1.19.6
+ '@types/express-serve-static-core': 5.0.7
+ '@types/serve-static': 1.15.8
+
+ '@types/http-errors@2.0.5': {}
+
'@types/js-yaml@4.0.9': {}
'@types/json-schema@7.0.15': {}
'@types/json5@0.0.29': {}
+ '@types/long@4.0.2': {}
+
+ '@types/mime@1.3.5': {}
+
+ '@types/node@10.17.60': {}
+
'@types/node@20.19.7':
dependencies:
undici-types: 6.21.0
@@ -4200,6 +5088,11 @@ snapshots:
'@types/node@24.1.0':
dependencies:
undici-types: 7.8.0
+ optional: true
+
+ '@types/qs@6.14.0': {}
+
+ '@types/range-parser@1.2.7': {}
'@types/react-dom@19.1.6(@types/react@19.1.8)':
dependencies:
@@ -4209,9 +5102,20 @@ snapshots:
dependencies:
csstype: 3.1.3
+ '@types/send@0.17.5':
+ dependencies:
+ '@types/mime': 1.3.5
+ '@types/node': 20.19.7
+
+ '@types/serve-static@1.15.8':
+ dependencies:
+ '@types/http-errors': 2.0.5
+ '@types/node': 20.19.7
+ '@types/send': 0.17.5
+
'@types/ws@8.18.1':
dependencies:
- '@types/node': 24.1.0
+ '@types/node': 20.19.7
'@typescript-eslint/eslint-plugin@8.36.0(@typescript-eslint/parser@8.36.0(eslint@9.31.0(jiti@2.5.0))(typescript@5.8.3))(eslint@9.31.0(jiti@2.5.0))(typescript@5.8.3)':
dependencies:
@@ -4236,7 +5140,7 @@ snapshots:
'@typescript-eslint/types': 8.36.0
'@typescript-eslint/typescript-estree': 8.36.0(typescript@5.8.3)
'@typescript-eslint/visitor-keys': 8.36.0
- debug: 4.4.1
+ debug: 4.4.1(supports-color@5.5.0)
eslint: 9.31.0(jiti@2.5.0)
typescript: 5.8.3
transitivePeerDependencies:
@@ -4246,7 +5150,7 @@ snapshots:
dependencies:
'@typescript-eslint/tsconfig-utils': 8.36.0(typescript@5.8.3)
'@typescript-eslint/types': 8.36.0
- debug: 4.4.1
+ debug: 4.4.1(supports-color@5.5.0)
typescript: 5.8.3
transitivePeerDependencies:
- supports-color
@@ -4264,7 +5168,7 @@ snapshots:
dependencies:
'@typescript-eslint/typescript-estree': 8.36.0(typescript@5.8.3)
'@typescript-eslint/utils': 8.36.0(eslint@9.31.0(jiti@2.5.0))(typescript@5.8.3)
- debug: 4.4.1
+ debug: 4.4.1(supports-color@5.5.0)
eslint: 9.31.0(jiti@2.5.0)
ts-api-utils: 2.1.0(typescript@5.8.3)
typescript: 5.8.3
@@ -4279,7 +5183,7 @@ snapshots:
'@typescript-eslint/tsconfig-utils': 8.36.0(typescript@5.8.3)
'@typescript-eslint/types': 8.36.0
'@typescript-eslint/visitor-keys': 8.36.0
- debug: 4.4.1
+ debug: 4.4.1(supports-color@5.5.0)
fast-glob: 3.3.3
is-glob: 4.0.3
minimatch: 9.0.5
@@ -4401,10 +5305,24 @@ snapshots:
dependencies:
tslib: 2.8.1
+ accepts@1.3.8:
+ dependencies:
+ mime-types: 2.1.35
+ negotiator: 0.6.3
+
+ accepts@2.0.0:
+ dependencies:
+ mime-types: 3.0.1
+ negotiator: 1.0.0
+
acorn-jsx@5.3.2(acorn@8.15.0):
dependencies:
acorn: 8.15.0
+ acorn-walk@8.3.4:
+ dependencies:
+ acorn: 8.15.0
+
acorn@8.15.0: {}
agent-base@7.1.4: {}
@@ -4431,6 +5349,99 @@ snapshots:
dependencies:
color-convert: 2.0.1
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ apollo-datasource@3.3.2:
+ dependencies:
+ '@apollo/utils.keyvaluecache': 1.0.2
+ apollo-server-env: 4.2.1
+ transitivePeerDependencies:
+ - encoding
+
+ apollo-reporting-protobuf@3.4.0:
+ dependencies:
+ '@apollo/protobufjs': 1.2.6
+
+ apollo-server-core@3.13.0(graphql@16.11.0):
+ dependencies:
+ '@apollo/utils.keyvaluecache': 1.0.2
+ '@apollo/utils.logger': 1.0.1
+ '@apollo/utils.usagereporting': 1.0.1(graphql@16.11.0)
+ '@apollographql/apollo-tools': 0.5.4(graphql@16.11.0)
+ '@apollographql/graphql-playground-html': 1.6.29
+ '@graphql-tools/mock': 8.7.20(graphql@16.11.0)
+ '@graphql-tools/schema': 8.5.1(graphql@16.11.0)
+ '@josephg/resolvable': 1.0.1
+ apollo-datasource: 3.3.2
+ apollo-reporting-protobuf: 3.4.0
+ apollo-server-env: 4.2.1
+ apollo-server-errors: 3.3.1(graphql@16.11.0)
+ apollo-server-plugin-base: 3.7.2(graphql@16.11.0)
+ apollo-server-types: 3.8.0(graphql@16.11.0)
+ async-retry: 1.3.3
+ fast-json-stable-stringify: 2.1.0
+ graphql: 16.11.0
+ graphql-tag: 2.12.6(graphql@16.11.0)
+ loglevel: 1.9.2
+ lru-cache: 6.0.0
+ node-abort-controller: 3.1.1
+ sha.js: 2.4.12
+ uuid: 9.0.1
+ whatwg-mimetype: 3.0.0
+ transitivePeerDependencies:
+ - encoding
+
+ apollo-server-env@4.2.1:
+ dependencies:
+ node-fetch: 2.7.0
+ transitivePeerDependencies:
+ - encoding
+
+ apollo-server-errors@3.3.1(graphql@16.11.0):
+ dependencies:
+ graphql: 16.11.0
+
+ apollo-server-express@3.13.0(express@5.1.0)(graphql@16.11.0):
+ dependencies:
+ '@types/accepts': 1.3.7
+ '@types/body-parser': 1.19.2
+ '@types/cors': 2.8.12
+ '@types/express': 4.17.14
+ '@types/express-serve-static-core': 4.17.31
+ accepts: 1.3.8
+ apollo-server-core: 3.13.0(graphql@16.11.0)
+ apollo-server-types: 3.8.0(graphql@16.11.0)
+ body-parser: 1.20.3
+ cors: 2.8.5
+ express: 5.1.0
+ graphql: 16.11.0
+ parseurl: 1.3.3
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+
+ apollo-server-plugin-base@3.7.2(graphql@16.11.0):
+ dependencies:
+ apollo-server-types: 3.8.0(graphql@16.11.0)
+ graphql: 16.11.0
+ transitivePeerDependencies:
+ - encoding
+
+ apollo-server-types@3.8.0(graphql@16.11.0):
+ dependencies:
+ '@apollo/utils.keyvaluecache': 1.0.2
+ '@apollo/utils.logger': 1.0.1
+ apollo-reporting-protobuf: 3.4.0
+ apollo-server-env: 4.2.1
+ graphql: 16.11.0
+ transitivePeerDependencies:
+ - encoding
+
+ arg@4.1.3: {}
+
argparse@2.0.1: {}
aria-query@5.3.2: {}
@@ -4512,6 +5523,10 @@ snapshots:
async-function@1.0.0: {}
+ async-retry@1.3.3:
+ dependencies:
+ retry: 0.13.1
+
auto-bind@4.0.0: {}
available-typed-arrays@1.0.7:
@@ -4526,12 +5541,45 @@ snapshots:
base64-js@1.5.1: {}
+ binary-extensions@2.3.0: {}
+
bl@4.1.0:
dependencies:
buffer: 5.7.1
inherits: 2.0.4
readable-stream: 3.6.2
+ body-parser@1.20.3:
+ dependencies:
+ bytes: 3.1.2
+ content-type: 1.0.5
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ on-finished: 2.4.1
+ qs: 6.13.0
+ raw-body: 2.5.2
+ type-is: 1.6.18
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ body-parser@2.2.0:
+ dependencies:
+ bytes: 3.1.2
+ content-type: 1.0.5
+ debug: 4.4.1(supports-color@5.5.0)
+ http-errors: 2.0.0
+ iconv-lite: 0.6.3
+ on-finished: 2.4.1
+ qs: 6.14.0
+ raw-body: 3.0.0
+ type-is: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
brace-expansion@1.1.12:
dependencies:
balanced-match: 1.0.2
@@ -4565,6 +5613,8 @@ snapshots:
dependencies:
streamsearch: 1.1.0
+ bytes@3.1.2: {}
+
call-bind-apply-helpers@1.0.2:
dependencies:
es-errors: 1.3.0
@@ -4632,6 +5682,18 @@ snapshots:
chardet@0.7.0: {}
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
chownr@3.0.0: {}
clean-stack@2.2.0: {}
@@ -4679,6 +5741,8 @@ snapshots:
colorette@2.0.20: {}
+ commander@2.20.3: {}
+
common-tags@1.8.2: {}
concat-map@0.0.1: {}
@@ -4689,8 +5753,23 @@ snapshots:
tslib: 2.8.1
upper-case: 2.0.2
+ content-disposition@1.0.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ content-type@1.0.5: {}
+
convert-source-map@2.0.0: {}
+ cookie-signature@1.2.2: {}
+
+ cookie@0.7.2: {}
+
+ cors@2.8.5:
+ dependencies:
+ object-assign: 4.1.1
+ vary: 1.1.2
+
cosmiconfig@8.3.6(typescript@5.8.3):
dependencies:
import-fresh: 3.3.1
@@ -4700,6 +5779,8 @@ snapshots:
optionalDependencies:
typescript: 5.8.3
+ create-require@1.1.1: {}
+
cross-fetch@3.2.0:
dependencies:
node-fetch: 2.7.0
@@ -4716,6 +5797,8 @@ snapshots:
shebang-command: 2.0.0
which: 2.0.2
+ cssfilter@0.0.10: {}
+
csstype@3.1.3: {}
damerau-levenshtein@1.0.8: {}
@@ -4744,13 +5827,19 @@ snapshots:
debounce@1.2.1: {}
+ debug@2.6.9:
+ dependencies:
+ ms: 2.0.0
+
debug@3.2.7:
dependencies:
ms: 2.1.3
- debug@4.4.1:
+ debug@4.4.1(supports-color@5.5.0):
dependencies:
ms: 2.1.3
+ optionalDependencies:
+ supports-color: 5.5.0
deep-is@0.1.4: {}
@@ -4770,14 +5859,20 @@ snapshots:
has-property-descriptors: 1.0.2
object-keys: 1.1.1
+ depd@2.0.0: {}
+
dependency-graph@0.11.0: {}
+ destroy@1.2.0: {}
+
detect-indent@6.1.0: {}
detect-libc@1.0.3: {}
detect-libc@2.0.4: {}
+ diff@4.0.2: {}
+
dir-glob@3.0.1:
dependencies:
path-type: 4.0.0
@@ -4801,12 +5896,16 @@ snapshots:
es-errors: 1.3.0
gopd: 1.2.0
+ ee-first@1.1.1: {}
+
electron-to-chromium@1.5.190: {}
emoji-regex@8.0.0: {}
emoji-regex@9.2.2: {}
+ encodeurl@2.0.0: {}
+
enhanced-resolve@5.18.2:
dependencies:
graceful-fs: 4.2.11
@@ -4919,6 +6018,8 @@ snapshots:
escalade@3.2.0: {}
+ escape-html@1.0.3: {}
+
escape-string-regexp@1.0.5: {}
escape-string-regexp@4.0.0: {}
@@ -4931,8 +6032,8 @@ snapshots:
'@typescript-eslint/parser': 8.36.0(eslint@9.31.0(jiti@2.5.0))(typescript@5.8.3)
eslint: 9.31.0(jiti@2.5.0)
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.36.0(eslint@9.31.0(jiti@2.5.0))(typescript@5.8.3))(eslint@9.31.0(jiti@2.5.0)))(eslint@9.31.0(jiti@2.5.0))
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.36.0(eslint@9.31.0(jiti@2.5.0))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.36.0(eslint@9.31.0(jiti@2.5.0))(typescript@5.8.3))(eslint@9.31.0(jiti@2.5.0)))(eslint@9.31.0(jiti@2.5.0)))(eslint@9.31.0(jiti@2.5.0))
+ eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.31.0(jiti@2.5.0))
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.36.0(eslint@9.31.0(jiti@2.5.0))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@2.5.0))
eslint-plugin-jsx-a11y: 6.10.2(eslint@9.31.0(jiti@2.5.0))
eslint-plugin-react: 7.37.5(eslint@9.31.0(jiti@2.5.0))
eslint-plugin-react-hooks: 5.2.0(eslint@9.31.0(jiti@2.5.0))
@@ -4951,10 +6052,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.36.0(eslint@9.31.0(jiti@2.5.0))(typescript@5.8.3))(eslint@9.31.0(jiti@2.5.0)))(eslint@9.31.0(jiti@2.5.0)):
+ eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.31.0(jiti@2.5.0)):
dependencies:
'@nolyfill/is-core-module': 1.0.39
- debug: 4.4.1
+ debug: 4.4.1(supports-color@5.5.0)
eslint: 9.31.0(jiti@2.5.0)
get-tsconfig: 4.10.1
is-bun-module: 2.0.0
@@ -4962,22 +6063,22 @@ snapshots:
tinyglobby: 0.2.14
unrs-resolver: 1.11.1
optionalDependencies:
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.36.0(eslint@9.31.0(jiti@2.5.0))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.36.0(eslint@9.31.0(jiti@2.5.0))(typescript@5.8.3))(eslint@9.31.0(jiti@2.5.0)))(eslint@9.31.0(jiti@2.5.0)))(eslint@9.31.0(jiti@2.5.0))
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.36.0(eslint@9.31.0(jiti@2.5.0))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@2.5.0))
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.1(@typescript-eslint/parser@8.36.0(eslint@9.31.0(jiti@2.5.0))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.36.0(eslint@9.31.0(jiti@2.5.0))(typescript@5.8.3))(eslint@9.31.0(jiti@2.5.0)))(eslint@9.31.0(jiti@2.5.0)))(eslint@9.31.0(jiti@2.5.0)):
+ eslint-module-utils@2.12.1(@typescript-eslint/parser@8.36.0(eslint@9.31.0(jiti@2.5.0))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@2.5.0)):
dependencies:
debug: 3.2.7
optionalDependencies:
'@typescript-eslint/parser': 8.36.0(eslint@9.31.0(jiti@2.5.0))(typescript@5.8.3)
eslint: 9.31.0(jiti@2.5.0)
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.36.0(eslint@9.31.0(jiti@2.5.0))(typescript@5.8.3))(eslint@9.31.0(jiti@2.5.0)))(eslint@9.31.0(jiti@2.5.0))
+ eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.31.0(jiti@2.5.0))
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.36.0(eslint@9.31.0(jiti@2.5.0))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.36.0(eslint@9.31.0(jiti@2.5.0))(typescript@5.8.3))(eslint@9.31.0(jiti@2.5.0)))(eslint@9.31.0(jiti@2.5.0)))(eslint@9.31.0(jiti@2.5.0)):
+ eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.36.0(eslint@9.31.0(jiti@2.5.0))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@2.5.0)):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.9
@@ -4988,7 +6089,7 @@ snapshots:
doctrine: 2.1.0
eslint: 9.31.0(jiti@2.5.0)
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.36.0(eslint@9.31.0(jiti@2.5.0))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.36.0(eslint@9.31.0(jiti@2.5.0))(typescript@5.8.3))(eslint@9.31.0(jiti@2.5.0)))(eslint@9.31.0(jiti@2.5.0)))(eslint@9.31.0(jiti@2.5.0))
+ eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.36.0(eslint@9.31.0(jiti@2.5.0))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@2.5.0))
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -5078,7 +6179,7 @@ snapshots:
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.6
- debug: 4.4.1
+ debug: 4.4.1(supports-color@5.5.0)
escape-string-regexp: 4.0.0
eslint-scope: 8.4.0
eslint-visitor-keys: 4.2.1
@@ -5120,6 +6221,40 @@ snapshots:
esutils@2.0.3: {}
+ etag@1.8.1: {}
+
+ express@5.1.0:
+ dependencies:
+ accepts: 2.0.0
+ body-parser: 2.2.0
+ content-disposition: 1.0.0
+ content-type: 1.0.5
+ cookie: 0.7.2
+ cookie-signature: 1.2.2
+ debug: 4.4.1(supports-color@5.5.0)
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ finalhandler: 2.1.0
+ fresh: 2.0.0
+ http-errors: 2.0.0
+ merge-descriptors: 2.0.0
+ mime-types: 3.0.1
+ on-finished: 2.4.1
+ once: 1.4.0
+ parseurl: 1.3.3
+ proxy-addr: 2.0.7
+ qs: 6.14.0
+ range-parser: 1.2.1
+ router: 2.2.0
+ send: 1.2.0
+ serve-static: 2.2.0
+ statuses: 2.0.2
+ type-is: 2.0.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+
external-editor@3.1.0:
dependencies:
chardet: 0.7.0
@@ -5188,6 +6323,17 @@ snapshots:
dependencies:
to-regex-range: 5.0.1
+ finalhandler@2.1.0:
+ dependencies:
+ debug: 4.4.1(supports-color@5.5.0)
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ statuses: 2.0.2
+ transitivePeerDependencies:
+ - supports-color
+
find-up@5.0.0:
dependencies:
locate-path: 6.0.0
@@ -5208,6 +6354,13 @@ snapshots:
dependencies:
fetch-blob: file:local_packages/fetch-blob
+ forwarded@0.2.0: {}
+
+ fresh@2.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
function-bind@1.1.2: {}
function.prototype.name@1.1.8:
@@ -5330,6 +6483,8 @@ snapshots:
has-bigints@1.1.0: {}
+ has-flag@3.0.0: {}
+
has-flag@4.0.0: {}
has-property-descriptors@1.0.2:
@@ -5359,17 +6514,25 @@ snapshots:
dependencies:
react-is: 16.13.1
+ http-errors@2.0.0:
+ dependencies:
+ depd: 2.0.0
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ toidentifier: 1.0.1
+
http-proxy-agent@7.0.2:
dependencies:
agent-base: 7.1.4
- debug: 4.4.1
+ debug: 4.4.1(supports-color@5.5.0)
transitivePeerDependencies:
- supports-color
https-proxy-agent@7.0.6:
dependencies:
agent-base: 7.1.4
- debug: 4.4.1
+ debug: 4.4.1(supports-color@5.5.0)
transitivePeerDependencies:
- supports-color
@@ -5377,8 +6540,14 @@ snapshots:
dependencies:
safer-buffer: 2.1.2
+ iconv-lite@0.6.3:
+ dependencies:
+ safer-buffer: 2.1.2
+
ieee754@1.2.1: {}
+ ignore-by-default@1.0.1: {}
+
ignore@5.3.2: {}
ignore@7.0.5: {}
@@ -5426,6 +6595,8 @@ snapshots:
dependencies:
loose-envify: 1.4.0
+ ipaddr.js@1.9.1: {}
+
is-absolute@1.0.0:
dependencies:
is-relative: 1.0.0
@@ -5454,6 +6625,10 @@ snapshots:
dependencies:
has-bigints: 1.1.0
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
is-boolean-object@1.2.2:
dependencies:
call-bound: 1.0.4
@@ -5516,6 +6691,8 @@ snapshots:
is-number@7.0.0: {}
+ is-promise@4.0.0: {}
+
is-regex@1.2.1:
dependencies:
call-bound: 1.0.4
@@ -5725,6 +6902,10 @@ snapshots:
slice-ansi: 4.0.0
wrap-ansi: 6.2.0
+ loglevel@1.9.2: {}
+
+ long@4.0.0: {}
+
loose-envify@1.4.0:
dependencies:
js-tokens: 4.0.0
@@ -5741,14 +6922,28 @@ snapshots:
dependencies:
yallist: 3.1.1
+ lru-cache@6.0.0:
+ dependencies:
+ yallist: 4.0.0
+
+ lru-cache@7.13.1: {}
+
magic-string@0.30.17:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.4
+ make-error@1.3.6: {}
+
map-cache@0.2.2: {}
math-intrinsics@1.1.0: {}
+ media-typer@0.3.0: {}
+
+ media-typer@1.1.0: {}
+
+ merge-descriptors@2.0.0: {}
+
merge2@1.4.1: {}
meros@1.3.1(@types/node@24.1.0):
@@ -5760,6 +6955,18 @@ snapshots:
braces: 3.0.3
picomatch: 2.3.1
+ mime-db@1.52.0: {}
+
+ mime-db@1.54.0: {}
+
+ mime-types@2.1.35:
+ dependencies:
+ mime-db: 1.52.0
+
+ mime-types@3.0.1:
+ dependencies:
+ mime-db: 1.54.0
+
mimic-fn@2.1.0: {}
minimatch@3.1.2:
@@ -5780,6 +6987,8 @@ snapshots:
mkdirp@3.0.1: {}
+ ms@2.0.0: {}
+
ms@2.1.3: {}
mute-stream@0.0.8: {}
@@ -5790,6 +6999,10 @@ snapshots:
natural-compare@1.4.0: {}
+ negotiator@0.6.3: {}
+
+ negotiator@1.0.0: {}
+
next@15.3.5(@babel/core@7.28.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
'@next/env': 15.3.5
@@ -5820,6 +7033,8 @@ snapshots:
lower-case: 2.0.2
tslib: 2.8.1
+ node-abort-controller@3.1.1: {}
+
node-addon-api@7.1.1: {}
node-fetch@2.7.0:
@@ -5836,10 +7051,25 @@ snapshots:
node-releases@2.0.19: {}
+ nodemon@3.1.10:
+ dependencies:
+ chokidar: 3.6.0
+ debug: 4.4.1(supports-color@5.5.0)
+ ignore-by-default: 1.0.1
+ minimatch: 3.1.2
+ pstree.remy: 1.1.8
+ semver: 7.7.2
+ simple-update-notifier: 2.0.0
+ supports-color: 5.5.0
+ touch: 3.1.1
+ undefsafe: 2.0.5
+
normalize-path@2.1.1:
dependencies:
remove-trailing-separator: 1.1.0
+ normalize-path@3.0.0: {}
+
nullthrows@1.1.1: {}
object-assign@4.1.1: {}
@@ -5884,6 +7114,14 @@ snapshots:
define-properties: 1.2.1
es-object-atoms: 1.1.1
+ on-finished@2.4.1:
+ dependencies:
+ ee-first: 1.1.1
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
onetime@5.1.2:
dependencies:
mimic-fn: 2.1.0
@@ -5958,6 +7196,8 @@ snapshots:
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
+ parseurl@1.3.3: {}
+
pascal-case@3.1.2:
dependencies:
no-case: 3.0.4
@@ -5980,6 +7220,8 @@ snapshots:
dependencies:
path-root-regex: 0.1.2
+ path-to-regexp@8.2.0: {}
+
path-type@4.0.0: {}
picocolors@1.1.1: {}
@@ -6016,10 +7258,41 @@ snapshots:
object-assign: 4.1.1
react-is: 16.13.1
+ proxy-addr@2.0.7:
+ dependencies:
+ forwarded: 0.2.0
+ ipaddr.js: 1.9.1
+
+ pstree.remy@1.1.8: {}
+
punycode@2.3.1: {}
+ qs@6.13.0:
+ dependencies:
+ side-channel: 1.1.0
+
+ qs@6.14.0:
+ dependencies:
+ side-channel: 1.1.0
+
queue-microtask@1.2.3: {}
+ range-parser@1.2.1: {}
+
+ raw-body@2.5.2:
+ dependencies:
+ bytes: 3.1.2
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ unpipe: 1.0.0
+
+ raw-body@3.0.0:
+ dependencies:
+ bytes: 3.1.2
+ http-errors: 2.0.0
+ iconv-lite: 0.6.3
+ unpipe: 1.0.0
+
react-dom@19.1.0(react@19.1.0):
dependencies:
react: 19.1.0
@@ -6035,6 +7308,10 @@ snapshots:
string_decoder: 1.3.0
util-deprecate: 1.0.2
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
reflect.getprototypeof@1.0.10:
dependencies:
call-bind: 1.0.8
@@ -6099,10 +7376,22 @@ snapshots:
onetime: 5.1.2
signal-exit: 3.0.7
+ retry@0.13.1: {}
+
reusify@1.1.0: {}
rfdc@1.4.1: {}
+ router@2.2.0:
+ dependencies:
+ debug: 4.4.1(supports-color@5.5.0)
+ depd: 2.0.0
+ is-promise: 4.0.0
+ parseurl: 1.3.3
+ path-to-regexp: 8.2.0
+ transitivePeerDependencies:
+ - supports-color
+
run-async@2.4.1: {}
run-parallel@1.2.0:
@@ -6144,12 +7433,37 @@ snapshots:
semver@7.7.2: {}
+ send@1.2.0:
+ dependencies:
+ debug: 4.4.1(supports-color@5.5.0)
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 2.0.0
+ http-errors: 2.0.0
+ mime-types: 3.0.1
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.2
+ transitivePeerDependencies:
+ - supports-color
+
sentence-case@3.0.4:
dependencies:
no-case: 3.0.4
tslib: 2.8.1
upper-case-first: 2.0.2
+ serve-static@2.2.0:
+ dependencies:
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 1.2.0
+ transitivePeerDependencies:
+ - supports-color
+
set-function-length@1.2.2:
dependencies:
define-data-property: 1.1.4
@@ -6174,6 +7488,14 @@ snapshots:
setimmediate@1.0.5: {}
+ setprototypeof@1.2.0: {}
+
+ sha.js@2.4.12:
+ dependencies:
+ inherits: 2.0.4
+ safe-buffer: 5.2.1
+ to-buffer: 1.2.1
+
sharp@0.34.3:
dependencies:
color: 4.2.3
@@ -6249,6 +7571,10 @@ snapshots:
is-arrayish: 0.3.2
optional: true
+ simple-update-notifier@2.0.0:
+ dependencies:
+ semver: 7.7.2
+
slash@3.0.0: {}
slice-ansi@3.0.0:
@@ -6276,6 +7602,10 @@ snapshots:
stable-hash@0.0.5: {}
+ statuses@2.0.1: {}
+
+ statuses@2.0.2: {}
+
stop-iteration-iterator@1.1.0:
dependencies:
es-errors: 1.3.0
@@ -6360,6 +7690,10 @@ snapshots:
optionalDependencies:
'@babel/core': 7.28.0
+ supports-color@5.5.0:
+ dependencies:
+ has-flag: 3.0.0
+
supports-color@7.2.0:
dependencies:
has-flag: 4.0.0
@@ -6408,10 +7742,20 @@ snapshots:
dependencies:
os-tmpdir: 1.0.2
+ to-buffer@1.2.1:
+ dependencies:
+ isarray: 2.0.5
+ safe-buffer: 5.2.1
+ typed-array-buffer: 1.0.3
+
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
+ toidentifier@1.0.1: {}
+
+ touch@3.1.1: {}
+
tr46@0.0.3: {}
ts-api-utils@2.1.0(typescript@5.8.3):
@@ -6424,6 +7768,24 @@ snapshots:
ts-log@2.2.7: {}
+ ts-node@10.9.2(@types/node@20.19.7)(typescript@5.8.3):
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ '@tsconfig/node10': 1.0.11
+ '@tsconfig/node12': 1.0.11
+ '@tsconfig/node14': 1.0.3
+ '@tsconfig/node16': 1.0.4
+ '@types/node': 20.19.7
+ acorn: 8.15.0
+ acorn-walk: 8.3.4
+ arg: 4.1.3
+ create-require: 1.1.1
+ diff: 4.0.2
+ make-error: 1.3.6
+ typescript: 5.8.3
+ v8-compile-cache-lib: 3.0.1
+ yn: 3.1.1
+
tsconfig-paths@3.15.0:
dependencies:
'@types/json5': 0.0.29
@@ -6468,6 +7830,17 @@ snapshots:
type-fest@0.21.3: {}
+ type-is@1.6.18:
+ dependencies:
+ media-typer: 0.3.0
+ mime-types: 2.1.35
+
+ type-is@2.0.1:
+ dependencies:
+ content-type: 1.0.5
+ media-typer: 1.1.0
+ mime-types: 3.0.1
+
typed-array-buffer@1.0.3:
dependencies:
call-bound: 1.0.4
@@ -6514,14 +7887,19 @@ snapshots:
unc-path-regex@0.1.2: {}
+ undefsafe@2.0.5: {}
+
undici-types@6.21.0: {}
- undici-types@7.8.0: {}
+ undici-types@7.8.0:
+ optional: true
unixify@1.0.0:
dependencies:
normalize-path: 2.1.1
+ unpipe@1.0.0: {}
+
unrs-resolver@1.11.1:
dependencies:
napi-postinstall: 0.3.0
@@ -6568,12 +7946,24 @@ snapshots:
util-deprecate@1.0.2: {}
+ uuid@9.0.1: {}
+
+ v8-compile-cache-lib@3.0.1: {}
+
+ value-or-promise@1.0.11: {}
+
+ value-or-promise@1.0.12: {}
+
+ vary@1.1.2: {}
+
wcwidth@1.0.1:
dependencies:
defaults: 1.0.4
webidl-conversions@3.0.1: {}
+ whatwg-mimetype@3.0.0: {}
+
whatwg-mimetype@4.0.0: {}
whatwg-url@5.0.0:
@@ -6640,12 +8030,21 @@ snapshots:
string-width: 4.2.3
strip-ansi: 6.0.1
+ wrappy@1.0.2: {}
+
ws@8.18.3: {}
+ xss@1.0.15:
+ dependencies:
+ commander: 2.20.3
+ cssfilter: 0.0.10
+
y18n@5.0.8: {}
yallist@3.1.1: {}
+ yallist@4.0.0: {}
+
yallist@5.0.0: {}
yaml-ast-parser@0.0.43: {}
@@ -6664,6 +8063,8 @@ snapshots:
y18n: 5.0.8
yargs-parser: 21.1.1
+ yn@3.1.1: {}
+
yocto-queue@0.1.0: {}
zen-observable-ts@1.2.5:
diff --git a/resolvers-types.ts b/resolvers-types.ts
new file mode 100644
index 0000000..d8d4560
--- /dev/null
+++ b/resolvers-types.ts
@@ -0,0 +1,220 @@
+import { GraphQLResolveInfo } from 'graphql';
+export type Maybe = T | null;
+export type InputMaybe = Maybe;
+export type Exact = { [K in keyof T]: T[K] };
+export type MakeOptional = Omit & { [SubKey in K]?: Maybe };
+export type MakeMaybe = Omit & { [SubKey in K]: Maybe };
+export type MakeEmpty = { [_ in K]?: never };
+export type Incremental = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never };
+export type RequireFields = Omit & { [P in K]-?: NonNullable };
+/** All built-in and custom scalars, mapped to their actual values */
+export type Scalars = {
+ ID: { input: string; output: string; }
+ String: { input: string; output: string; }
+ Boolean: { input: boolean; output: boolean; }
+ Int: { input: number; output: number; }
+ Float: { input: number; output: number; }
+};
+
+export type CreateUserInput = {
+ dateOfBirth: Scalars['String']['input'];
+ email: Scalars['String']['input'];
+ firstName: Scalars['String']['input'];
+ lastName: Scalars['String']['input'];
+ password: Scalars['String']['input'];
+};
+
+export type CreateUserResponse = {
+ __typename?: 'CreateUserResponse';
+ error?: Maybe;
+ success: Scalars['Boolean']['output'];
+ token?: Maybe;
+ user?: Maybe;
+};
+
+export type Mutation = {
+ __typename?: 'Mutation';
+ createUser: CreateUserResponse;
+ login: UserLoginResponse;
+ logout: UserLogoutResponse;
+};
+
+
+export type MutationCreateUserArgs = {
+ input: CreateUserInput;
+};
+
+
+export type MutationLoginArgs = {
+ input: UserLoginInput;
+};
+
+export type User = {
+ __typename?: 'User';
+ dateOfBirth: Scalars['String']['output'];
+ email: Scalars['String']['output'];
+ firstName: Scalars['String']['output'];
+ id: Scalars['ID']['output'];
+ lastName: Scalars['String']['output'];
+};
+
+export type UserLoginInput = {
+ email: Scalars['String']['input'];
+ password: Scalars['String']['input'];
+};
+
+export type UserLoginResponse = {
+ __typename?: 'UserLoginResponse';
+ error?: Maybe;
+ success: Scalars['Boolean']['output'];
+ token?: Maybe;
+ user?: Maybe;
+};
+
+export type UserLogoutResponse = {
+ __typename?: 'UserLogoutResponse';
+ success: Scalars['Boolean']['output'];
+};
+
+export type WithIndex = TObject & Record;
+export type ResolversObject = WithIndex;
+
+export type ResolverTypeWrapper = Promise | T;
+
+
+export type ResolverWithResolve = {
+ resolve: ResolverFn;
+};
+export type Resolver = ResolverFn | ResolverWithResolve;
+
+export type ResolverFn = (
+ parent: TParent,
+ args: TArgs,
+ context: TContext,
+ info: GraphQLResolveInfo
+) => Promise | TResult;
+
+export type SubscriptionSubscribeFn = (
+ parent: TParent,
+ args: TArgs,
+ context: TContext,
+ info: GraphQLResolveInfo
+) => AsyncIterable | Promise>;
+
+export type SubscriptionResolveFn = (
+ parent: TParent,
+ args: TArgs,
+ context: TContext,
+ info: GraphQLResolveInfo
+) => TResult | Promise;
+
+export interface SubscriptionSubscriberObject {
+ subscribe: SubscriptionSubscribeFn<{ [key in TKey]: TResult }, TParent, TContext, TArgs>;
+ resolve?: SubscriptionResolveFn;
+}
+
+export interface SubscriptionResolverObject {
+ subscribe: SubscriptionSubscribeFn;
+ resolve: SubscriptionResolveFn;
+}
+
+export type SubscriptionObject =
+ | SubscriptionSubscriberObject
+ | SubscriptionResolverObject;
+
+export type SubscriptionResolver =
+ | ((...args: any[]) => SubscriptionObject)
+ | SubscriptionObject;
+
+export type TypeResolveFn = (
+ parent: TParent,
+ context: TContext,
+ info: GraphQLResolveInfo
+) => Maybe | Promise>;
+
+export type IsTypeOfResolverFn = (obj: T, context: TContext, info: GraphQLResolveInfo) => boolean | Promise;
+
+export type NextResolverFn = () => Promise;
+
+export type DirectiveResolverFn = (
+ next: NextResolverFn,
+ parent: TParent,
+ args: TArgs,
+ context: TContext,
+ info: GraphQLResolveInfo
+) => TResult | Promise;
+
+
+
+/** Mapping between all available schema types and the resolvers types */
+export type ResolversTypes = ResolversObject<{
+ Boolean: ResolverTypeWrapper;
+ CreateUserInput: CreateUserInput;
+ CreateUserResponse: ResolverTypeWrapper;
+ ID: ResolverTypeWrapper;
+ Mutation: ResolverTypeWrapper<{}>;
+ String: ResolverTypeWrapper;
+ User: ResolverTypeWrapper;
+ UserLoginInput: UserLoginInput;
+ UserLoginResponse: ResolverTypeWrapper;
+ UserLogoutResponse: ResolverTypeWrapper;
+}>;
+
+/** Mapping between all available schema types and the resolvers parents */
+export type ResolversParentTypes = ResolversObject<{
+ Boolean: Scalars['Boolean']['output'];
+ CreateUserInput: CreateUserInput;
+ CreateUserResponse: CreateUserResponse;
+ ID: Scalars['ID']['output'];
+ Mutation: {};
+ String: Scalars['String']['output'];
+ User: User;
+ UserLoginInput: UserLoginInput;
+ UserLoginResponse: UserLoginResponse;
+ UserLogoutResponse: UserLogoutResponse;
+}>;
+
+export type CreateUserResponseResolvers = ResolversObject<{
+ error?: Resolver, ParentType, ContextType>;
+ success?: Resolver;
+ token?: Resolver, ParentType, ContextType>;
+ user?: Resolver, ParentType, ContextType>;
+ __isTypeOf?: IsTypeOfResolverFn;
+}>;
+
+export type MutationResolvers = ResolversObject<{
+ createUser?: Resolver>;
+ login?: Resolver>;
+ logout?: Resolver;
+}>;
+
+export type UserResolvers = ResolversObject<{
+ dateOfBirth?: Resolver;
+ email?: Resolver;
+ firstName?: Resolver;
+ id?: Resolver;
+ lastName?: Resolver;
+ __isTypeOf?: IsTypeOfResolverFn;
+}>;
+
+export type UserLoginResponseResolvers = ResolversObject<{
+ error?: Resolver, ParentType, ContextType>;
+ success?: Resolver;
+ token?: Resolver, ParentType, ContextType>;
+ user?: Resolver, ParentType, ContextType>;
+ __isTypeOf?: IsTypeOfResolverFn;
+}>;
+
+export type UserLogoutResponseResolvers = ResolversObject<{
+ success?: Resolver;
+ __isTypeOf?: IsTypeOfResolverFn;
+}>;
+
+export type Resolvers = ResolversObject<{
+ CreateUserResponse?: CreateUserResponseResolvers;
+ Mutation?: MutationResolvers;
+ User?: UserResolvers;
+ UserLoginResponse?: UserLoginResponseResolvers;
+ UserLogoutResponse?: UserLogoutResponseResolvers;
+}>;
+
diff --git a/services/package.json b/services/auth/package.json
similarity index 81%
rename from services/package.json
rename to services/auth/package.json
index eb0381a..a2f2b6a 100644
--- a/services/package.json
+++ b/services/auth/package.json
@@ -1,10 +1,11 @@
{
- "name": "api",
+ "name": "auth",
"version": "1.0.0",
"description": "",
"main": "src/index.js",
"scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
+ "test": "echo \"Error: no test specified\" && exit 1",
+ "build": "turbo run build"
},
"keywords": [],
"author": "",
diff --git a/services/auth/schema/auth.graphql b/services/auth/schema/schema.graphql
similarity index 100%
rename from services/auth/schema/auth.graphql
rename to services/auth/schema/schema.graphql