diff --git a/.github/workflows/demo_integrations_ci.yml b/.github/workflows/demo_integrations_ci.yml index cdc557c..c09219c 100644 --- a/.github/workflows/demo_integrations_ci.yml +++ b/.github/workflows/demo_integrations_ci.yml @@ -27,3 +27,26 @@ jobs: run: npm run lint - name: Frontend - Run build run: cd frontend && npm run build + + realty_demo: + runs-on: ubuntu-latest + defaults: + run: + working-directory: ./demos/realty + steps: + - name: Check out repository code + uses: actions/checkout@v4 + - name: Set up node + uses: actions/setup-node@v4 + with: + node-version-file: ".nvmrc" + - name: NPM ci repository root + run: cd ../.. && npm ci + - name: Run prettier + run: npm run format:check + - name: Lint types + run: npm run lint:types + - name: ESLint + run: npm run lint + - name: Frontend - Run build + run: cd frontend && npm run build diff --git a/CHANGELOG.md b/CHANGELOG.md index 9151d30..dc26150 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## 2025-09-04 + +### 🔧 Changed + +- Updated TypeScript to version 5.9.2 +- Updated dependencies across all demos +- Refreshed the OpenAPI yml spec `openapi/spec.yml` to be based on the latest Connect API + +### 🐞 Fixed + +- Fixed bug in `demos/realty`: Updated field mapping validation logic to only check for fields that are present in the template being created. +- Fixed compatibility issues with TypeScript 5.9.2 in crypto.ts files + ## 2025-07-23 ### 🔧 Changed diff --git a/client/package.json b/client/package.json index 07d343b..d52a4e2 100644 --- a/client/package.json +++ b/client/package.json @@ -17,6 +17,6 @@ "engineStrict": true, "devDependencies": { "@hey-api/openapi-ts": "0.57.1", - "typescript": "5.8.2" + "typescript": "5.9.2" } } diff --git a/client/ts/sdk.gen.ts b/client/ts/sdk.gen.ts index c67a396..c273fe4 100644 --- a/client/ts/sdk.gen.ts +++ b/client/ts/sdk.gen.ts @@ -25,6 +25,12 @@ import type { GetAssetUploadJobData, GetAssetUploadJobError, GetAssetUploadJobResponse2, + CreateUrlAssetUploadJobData, + CreateUrlAssetUploadJobError, + CreateUrlAssetUploadJobResponse2, + GetUrlAssetUploadJobData, + GetUrlAssetUploadJobError, + GetUrlAssetUploadJobResponse2, CreateDesignAutofillJobData, CreateDesignAutofillJobError, CreateDesignAutofillJobResponse2, @@ -265,6 +271,72 @@ export class AssetService { url: "/v1/asset-uploads/{jobId}", }); } + + /** + * + * + * This API is currently provided as a preview. Be aware of the following: + * + * - There might be unannounced breaking changes. + * - Any breaking changes to preview APIs won't produce a new [API version](https://www.canva.dev/docs/connect/versions/). + * - Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users. + * + * + * + * Starts a new [asynchronous job](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints) to upload an asset from a URL to the user's content library. Supported file types for assets are listed in the [Assets API overview](https://www.canva.dev/docs/connect/api-reference/assets/). + * + * + * Uploading a video asset from a URL is limited to a maximum 100MB file size. For importing larger video files, use the [Create asset upload job API](https://www.canva.dev/docs/connect/api-reference/assets/create-asset-upload-job/). + * + * + * + * For more information on the workflow for using asynchronous jobs, see [API requests and responses](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints). You can check the status and get the results of asset upload jobs created with this API using the [Get asset upload job via URL API](https://www.canva.dev/docs/connect/api-reference/assets/get-url-asset-upload-job/). + * + */ + public static createUrlAssetUploadJob( + options: Options, + ) { + return (options?.client ?? client).post< + CreateUrlAssetUploadJobResponse2, + CreateUrlAssetUploadJobError, + ThrowOnError + >({ + ...options, + headers: { + "Content-Type": "application/json", + ...options?.headers, + }, + url: "/v1/url-asset-uploads", + }); + } + + /** + * + * + * This API is currently provided as a preview. Be aware of the following: + * + * - There might be unannounced breaking changes. + * - Any breaking changes to preview APIs won't produce a new [API version](https://www.canva.dev/docs/connect/versions/). + * - Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users. + * + * + * + * Get the result of an asset upload job that was created using the [Create asset upload job via URL API](https://www.canva.dev/docs/connect/api-reference/assets/create-url-asset-upload-job/). + * + * You might need to make multiple requests to this endpoint until you get a `success` or `failed` status. For more information on the workflow for using asynchronous jobs, see [API requests and responses](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints). + */ + public static getUrlAssetUploadJob( + options: Options, + ) { + return (options?.client ?? client).get< + GetUrlAssetUploadJobResponse2, + GetUrlAssetUploadJobError, + ThrowOnError + >({ + ...options, + url: "/v1/url-asset-uploads/{jobId}", + }); + } } export class AutofillService { @@ -742,6 +814,8 @@ export class DesignService { * - Set height and width dimensions for a custom design. * * Additionally, you can also provide the `asset_id` of an asset in the user's [projects](https://www.canva.com/help/find-designs-and-folders/) to add to the new design. Currently, this only supports image assets. To list the assets in a folder in the user's projects, use the [List folder items API](https://www.canva.dev/docs/connect/api-reference/folders/list-folder-items/). + * + * NOTE: Blank designs created with this API are automatically deleted if they're not edited within 7 days. These blank designs bypass the user's Canva trash and are permanently deleted. */ public static createDesign( options?: Options, @@ -884,16 +958,6 @@ export class DesignImportService { } /** - * - * - * This API is currently provided as a preview. Be aware of the following: - * - * - There might be unannounced breaking changes. - * - Any breaking changes to preview APIs won't produce a new [API version](https://www.canva.dev/docs/connect/versions/). - * - Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users. - * - * - * * Starts a new [asynchronous job](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints) to import an external file from a URL as a new design in Canva. * * Supported file types for imports are listed in [Design imports overview](https://www.canva.dev/docs/connect/api-reference/design-imports/#supported-file-types). @@ -922,16 +986,6 @@ export class DesignImportService { } /** - * - * - * This API is currently provided as a preview. Be aware of the following: - * - * - There might be unannounced breaking changes. - * - Any breaking changes to preview APIs won't produce a new [API version](https://www.canva.dev/docs/connect/versions/). - * - Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users. - * - * - * * Gets the result of a URL import job created using the [Create URL import job API](https://www.canva.dev/docs/connect/api-reference/design-imports/create-url-import-job/). * * You might need to make multiple requests to this endpoint until you get a `success` or `failed` status. For more information on the workflow for using asynchronous jobs, see [API requests and responses](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints). @@ -1115,9 +1169,13 @@ export class FolderService { } /** - * Creates a folder in either the top level of a Canva user's - * [projects](https://www.canva.com/help/find-designs-and-folders/) (using the ID `root`), or - * another folder (using the parent folder's ID). When a folder is successfully created, the + * Creates a folder in one of the following locations: + * + * - The top level of a Canva user's [projects](https://www.canva.com/help/find-designs-and-folders/) (using the ID `root`), + * - The user's Uploads folder (using the ID `uploads`), + * - Another folder (using the parent folder's ID). + * + * When a folder is successfully created, the * endpoint returns its folder ID, along with other information. */ public static createFolder( @@ -1259,16 +1317,6 @@ export class OauthService { export class ResizeService { /** - * - * - * This API is currently provided as a preview. Be aware of the following: - * - * - There might be unannounced breaking changes. - * - Any breaking changes to preview APIs won't produce a new [API version](https://www.canva.dev/docs/connect/versions/). - * - Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users. - * - * - * * * * To use this API, your integration must act on behalf of a user that's on a Canva plan with premium features (such as Canva Pro). @@ -1285,7 +1333,12 @@ export class ResizeService { * - Use a preset design type. * - Set height and width dimensions for a custom design. * - * NOTE: [Canva docs](https://www.canva.com/create/documents/) can't be resized, and other design types can't be resized to a Canva doc. + * Note the following behaviors and restrictions when resizing designs: + * - Designs can be resized to a maximum area of 25,000,000 pixels squared. + * - Resizing designs using the Connect API always creates a new design. In-place resizing is currently not available in the Connect API, but can be done in the Canva UI. + * - Resizing a multi-page design results in all pages of the design being resized. Resizing a section of a design is only available in the Canva UI. + * - [Canva docs](https://www.canva.com/create/documents/) can't be resized, and other design types can't be resized to a Canva doc. + * - Canva Code designs can't be resized, and other design types can't be resized to a Canva Code design. * * * For more information on the workflow for using asynchronous jobs, @@ -1312,16 +1365,6 @@ export class ResizeService { } /** - * - * - * This API is currently provided as a preview. Be aware of the following: - * - * - There might be unannounced breaking changes. - * - Any breaking changes to preview APIs won't produce a new [API version](https://www.canva.dev/docs/connect/versions/). - * - Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users. - * - * - * * * * To use this API, your integration must act on behalf of a user that's on a Canva plan with premium features (such as Canva Pro). @@ -1370,16 +1413,6 @@ export class UserService { } /** - * - * - * This API is currently provided as a preview. Be aware of the following: - * - * - There might be unannounced breaking changes. - * - Any breaking changes to preview APIs won't produce a new [API version](https://www.canva.dev/docs/connect/versions/). - * - Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users. - * - * - * * Lists the API capabilities for the user account associated with the provided access token. For more information, see [Capabilities](https://www.canva.dev/docs/connect/capabilities/). */ public static getUserCapabilities( diff --git a/client/ts/types.gen.ts b/client/ts/types.gen.ts index f5e5cc5..ebbcb00 100644 --- a/client/ts/types.gen.ts +++ b/client/ts/types.gen.ts @@ -57,6 +57,25 @@ export type JsonWebKey = { use?: string; }; +export type CreateUrlAssetUploadJobRequest = { + /** + * A name for the asset. + */ + name: string; + /** + * The URL of the file to import. This URL must be accessible from the internet and be publicly available. + */ + url: string; +}; + +export type CreateUrlAssetUploadJobResponse = { + job: AssetUploadJob; +}; + +export type GetUrlAssetUploadJobResponse = { + job: AssetUploadJob; +}; + export type GetAssetResponse = { asset: Asset; }; @@ -110,6 +129,7 @@ export type Asset = { * Unix Epoch). */ updated_at: number; + owner: TeamUserSummary; thumbnail?: Thumbnail; }; @@ -148,12 +168,12 @@ export type AssetSummary = { }; /** - * Type of an asset. Support for `video` assets is currently provided as a [preview](https://www.canva.dev/docs/connect/api-reference/assets/#videos). + * Type of an asset. */ export type AssetType = "image" | "video"; /** - * Type of an asset. Support for `video` assets is currently provided as a [preview](https://www.canva.dev/docs/connect/api-reference/assets/#videos). + * Type of an asset. */ export const AssetType = { IMAGE: "image", @@ -440,7 +460,7 @@ export type AutofillError = { message: string; }; -export type DatasetFilter = "any" | "non_empty" | "empty"; +export type DatasetFilter = "any" | "non_empty"; export const DatasetFilter = { /** @@ -451,10 +471,6 @@ export const DatasetFilter = { * Brand templates with one or more data fields defined. */ NON_EMPTY: "non_empty", - /** - * Brand templates with no data fields defined. - */ - EMPTY: "empty", } as const; export type ListBrandTemplatesResponse = { @@ -1911,7 +1927,9 @@ export type ErrorCode = | "design_not_fillable" | "autofill_data_invalid" | "feature_not_available" - | "license_required"; + | "license_required" + | "input_unsafe" + | "display_name_unavailable"; /** * A short string indicating what failed. This field can be used to handle errors programmatically. @@ -1974,6 +1992,8 @@ export const ErrorCode = { AUTOFILL_DATA_INVALID: "autofill_data_invalid", FEATURE_NOT_AVAILABLE: "feature_not_available", LICENSE_REQUIRED: "license_required", + INPUT_UNSAFE: "input_unsafe", + DISPLAY_NAME_UNAVAILABLE: "display_name_unavailable", } as const; /** @@ -2451,6 +2471,7 @@ export type CreateFolderRequest = { /** * The folder ID of the parent folder. To create a new folder at the top level of a user's * [projects](https://www.canva.com/help/find-designs-and-folders/), use the ID `root`. + * To create it in their Uploads folder, use `uploads`. */ parent_folder_id: string; }; @@ -2916,12 +2937,14 @@ export const DesignResizeStatus = { export type DesignResizeErrorCode = | "thumbnail_generation_error" | "design_resize_error" - | "create_design_error"; + | "create_design_error" + | "trial_quota_exceeded"; export const DesignResizeErrorCode = { THUMBNAIL_GENERATION_ERROR: "thumbnail_generation_error", DESIGN_RESIZE_ERROR: "design_resize_error", CREATE_DESIGN_ERROR: "create_design_error", + TRIAL_QUOTA_EXCEEDED: "trial_quota_exceeded", } as const; /** @@ -3289,6 +3312,11 @@ export type ApprovalResponseAction = { message?: string; }; +/** + * The app ID. + */ +export type appId = string; + /** * The brand template ID. */ @@ -3314,11 +3342,21 @@ export type replyId = string; */ export type designId = string; +/** + * The editing transaction ID. + */ +export type transactionIdParameter = string; + /** * The export job ID. */ export type exportId = string; +/** + * The file ID. + */ +export type fileIdParameter = string; + /** * The folder ID. */ @@ -3328,7 +3366,7 @@ export type GetAppJwksData = { body?: never; path: { /** - * The app id + * The app ID. */ appId: string; }; @@ -3512,6 +3550,63 @@ export type GetAssetUploadJobResponses = { export type GetAssetUploadJobResponse2 = GetAssetUploadJobResponses[keyof GetAssetUploadJobResponses]; +export type CreateUrlAssetUploadJobData = { + body: CreateUrlAssetUploadJobRequest; + url: "/v1/url-asset-uploads"; +}; + +export type CreateUrlAssetUploadJobErrors = { + /** + * Error Response + */ + default: Error; +}; + +export type CreateUrlAssetUploadJobError = + CreateUrlAssetUploadJobErrors[keyof CreateUrlAssetUploadJobErrors]; + +export type CreateUrlAssetUploadJobResponses = { + /** + * OK + */ + 200: CreateUrlAssetUploadJobResponse; +}; + +export type CreateUrlAssetUploadJobResponse2 = + CreateUrlAssetUploadJobResponses[keyof CreateUrlAssetUploadJobResponses]; + +export type GetUrlAssetUploadJobData = { + body?: never; + path: { + /** + * The asset upload job ID. + */ + jobId: string; + }; + query?: never; + url: "/v1/url-asset-uploads/{jobId}"; +}; + +export type GetUrlAssetUploadJobErrors = { + /** + * Error Response + */ + default: Error; +}; + +export type GetUrlAssetUploadJobError = + GetUrlAssetUploadJobErrors[keyof GetUrlAssetUploadJobErrors]; + +export type GetUrlAssetUploadJobResponses = { + /** + * OK + */ + 200: GetUrlAssetUploadJobResponse; +}; + +export type GetUrlAssetUploadJobResponse2 = + GetUrlAssetUploadJobResponses[keyof GetUrlAssetUploadJobResponses]; + export type CreateDesignAutofillJobData = { body?: CreateDesignAutofillJobRequest; url: "/v1/autofills"; diff --git a/demos/common/backend/services/crypto.ts b/demos/common/backend/services/crypto.ts index 4553421..5808804 100644 --- a/demos/common/backend/services/crypto.ts +++ b/demos/common/backend/services/crypto.ts @@ -6,9 +6,9 @@ export type EncryptedData = { }; // exported for testing only -export function decodeBase64(text: string): Uint8Array { +export function decodeBase64(text: string): Uint8Array { const buffer = Buffer.from(text, "base64"); - return Uint8Array.from(buffer); + return new Uint8Array(buffer); } // exported for testing only @@ -90,10 +90,13 @@ export async function decrypt(token: EncryptedData): Promise { ); // To decrypt, we need to supply the name of the encryption algorithm (AES-GCM here), // the initialization vector that was used to encrypt the data, and the key itself. + const iv = decodeBase64(token.iv); + const encryptedData = decodeBase64(token.encryptedData); + const decrypted = await crypto.subtle.decrypt( - { name: ENCRYPTION_ALGORITHM, iv: decodeBase64(token.iv) }, + { name: ENCRYPTION_ALGORITHM, iv }, key, - decodeBase64(token.encryptedData), + encryptedData, ); return new TextDecoder("utf-8").decode(decrypted); } diff --git a/demos/common/package.json b/demos/common/package.json index e5e1170..395677d 100644 --- a/demos/common/package.json +++ b/demos/common/package.json @@ -28,9 +28,9 @@ "jest": "29.7.0", "jose": "5.10.0", "nodemon": "3.0.1", - "open": "10.1.2", + "open": "10.2.0", "pug": "3.0.3", - "ts-jest": "29.4.0", + "ts-jest": "29.4.1", "webpack-cli": "6.0.1", "webpack-dev-server": "5.2.2", "yargs": "17.7.2" @@ -43,6 +43,6 @@ "@types/nodemon": "1.19.6", "@types/yargs": "17.0.33", "prettier": "3.6.2", - "typescript": "5.8.2" + "typescript": "5.9.2" } } diff --git a/demos/ecommerce_shop/backend/package.json b/demos/ecommerce_shop/backend/package.json index 09d0e4c..c03fc88 100644 --- a/demos/ecommerce_shop/backend/package.json +++ b/demos/ecommerce_shop/backend/package.json @@ -19,8 +19,8 @@ "cors": "2.8.5", "dotenv": "16.6.0", "express": "4.21.2", - "multer": "2.0.1", - "open": "10.1.2", + "multer": "2.0.2", + "open": "10.2.0", "pug": "3.0.3" }, "devDependencies": { @@ -29,6 +29,6 @@ "@types/multer": "2.0.0", "@types/node": "20.19.2", "prettier": "3.6.2", - "typescript": "5.8.2" + "typescript": "5.9.2" } } diff --git a/demos/ecommerce_shop/frontend/package.json b/demos/ecommerce_shop/frontend/package.json index babd604..2ee44f0 100644 --- a/demos/ecommerce_shop/frontend/package.json +++ b/demos/ecommerce_shop/frontend/package.json @@ -25,7 +25,7 @@ "canvas-confetti": "1.9.3", "react": "18.3.1", "react-dom": "18.3.1", - "react-router-dom": "7.6.3" + "react-router-dom": "7.8.2" }, "devDependencies": { "@svgr/webpack": "8.1.0", @@ -35,13 +35,13 @@ "@types/webpack": "5.28.5", "@types/webpack-dev-server": "4.7.2", "css-loader": "7.1.2", - "cssnano": "7.0.7", + "cssnano": "7.1.1", "postcss-loader": "8.1.1", "prettier": "3.6.2", "style-loader": "4.0.0", "terser-webpack-plugin": "5.3.14", - "ts-loader": "9.5.2", - "typescript": "5.8.2", + "ts-loader": "9.5.4", + "typescript": "5.9.2", "url-loader": "4.1.1", "webpack-dev-server": "5.2.2" } diff --git a/demos/ecommerce_shop/package.json b/demos/ecommerce_shop/package.json index 9da862e..f52a487 100644 --- a/demos/ecommerce_shop/package.json +++ b/demos/ecommerce_shop/package.json @@ -31,18 +31,18 @@ "jose": "5.10.0" }, "devDependencies": { - "@eslint/js": "9.30.0", + "@eslint/js": "9.34.0", "@types/cookie-parser": "1.4.9", "@types/jest": "29.5.14", "@types/node": "20.19.2", "@types/nodemon": "1.19.6", "@types/yargs": "17.0.33", - "@typescript-eslint/eslint-plugin": "8.35.1", - "@typescript-eslint/parser": "8.35.1", + "@typescript-eslint/eslint-plugin": "8.41.0", + "@typescript-eslint/parser": "8.41.0", "chalk": "4.1.2", "cli-table3": "0.6.5", "envfile": "7.1.0", - "eslint": "9.30.0", + "eslint": "9.34.0", "eslint-plugin-jest": "28.11.0", "eslint-plugin-react": "7.37.5", "eslint-plugin-react-hooks": "5.2.0", @@ -50,10 +50,10 @@ "jest": "29.7.0", "nodemon": "3.0.1", "prettier": "3.6.2", - "ts-jest": "29.4.0", + "ts-jest": "29.4.1", "ts-node": "10.9.2", - "typescript": "5.8.2", - "typescript-eslint": "8.35.1", + "typescript": "5.9.2", + "typescript-eslint": "8.41.0", "webpack-cli": "6.0.1", "webpack-dev-server": "5.2.2", "yargs": "17.7.2" diff --git a/demos/playground/backend/package.json b/demos/playground/backend/package.json index 3232505..d528b8e 100644 --- a/demos/playground/backend/package.json +++ b/demos/playground/backend/package.json @@ -18,8 +18,8 @@ "cors": "2.8.5", "dotenv": "16.6.0", "express": "4.21.2", - "multer": "2.0.1", - "open": "10.1.2", + "multer": "2.0.2", + "open": "10.2.0", "pug": "3.0.3" }, "devDependencies": { @@ -29,6 +29,6 @@ "@types/multer": "2.0.0", "@types/node": "20.19.2", "prettier": "3.6.2", - "typescript": "5.8.2" + "typescript": "5.9.2" } } diff --git a/demos/playground/frontend/package.json b/demos/playground/frontend/package.json index 4d0d507..c1e22b0 100644 --- a/demos/playground/frontend/package.json +++ b/demos/playground/frontend/package.json @@ -25,7 +25,7 @@ "canvas-confetti": "1.9.3", "react": "18.3.1", "react-dom": "18.3.1", - "react-router-dom": "7.6.3" + "react-router-dom": "7.8.2" }, "devDependencies": { "@svgr/webpack": "8.1.0", @@ -33,13 +33,13 @@ "@types/react": "18.3.12", "@types/react-dom": "18.3.1", "css-loader": "7.1.2", - "cssnano": "7.0.7", + "cssnano": "7.1.1", "postcss-loader": "8.1.1", "prettier": "3.6.2", "style-loader": "4.0.0", "terser-webpack-plugin": "5.3.14", - "ts-loader": "9.5.2", - "typescript": "5.8.2", + "ts-loader": "9.5.4", + "typescript": "5.9.2", "url-loader": "4.1.1", "webpack-dev-server": "5.2.2" } diff --git a/demos/playground/package.json b/demos/playground/package.json index d3e1485..807bfc4 100644 --- a/demos/playground/package.json +++ b/demos/playground/package.json @@ -28,21 +28,21 @@ "jose": "5.10.0" }, "devDependencies": { - "@eslint/js": "9.30.0", + "@eslint/js": "9.34.0", "@types/cookie-parser": "1.4.9", "@types/node": "20.19.2", "@types/yargs": "17.0.33", - "@typescript-eslint/eslint-plugin": "8.35.1", - "@typescript-eslint/parser": "8.35.1", - "eslint": "9.30.0", + "@typescript-eslint/eslint-plugin": "8.41.0", + "@typescript-eslint/parser": "8.41.0", + "eslint": "9.34.0", "eslint-plugin-jest": "28.11.0", "eslint-plugin-react": "7.37.5", "eslint-plugin-react-hooks": "5.2.0", "eslint-plugin-unicorn": "57.0.0", "prettier": "3.6.2", "ts-node": "10.9.2", - "typescript": "5.8.2", - "typescript-eslint": "8.35.1", + "typescript": "5.9.2", + "typescript-eslint": "8.41.0", "yargs": "17.7.2" } } diff --git a/demos/realty/backend/package.json b/demos/realty/backend/package.json index 663c641..d068fb8 100644 --- a/demos/realty/backend/package.json +++ b/demos/realty/backend/package.json @@ -19,8 +19,8 @@ "cors": "2.8.5", "dotenv": "16.6.0", "express": "4.21.2", - "multer": "2.0.1", - "open": "10.1.2", + "multer": "2.0.2", + "open": "10.2.0", "pug": "3.0.3", "uuid": "11.1.0" }, @@ -30,6 +30,6 @@ "@types/multer": "2.0.0", "@types/uuid": "10.0.0", "prettier": "3.6.2", - "typescript": "5.8.2" + "typescript": "5.9.2" } } diff --git a/demos/realty/backend/routes/asset.ts b/demos/realty/backend/routes/asset.ts index 239b51d..0b691fb 100644 --- a/demos/realty/backend/routes/asset.ts +++ b/demos/realty/backend/routes/asset.ts @@ -25,7 +25,8 @@ router.post( } try { - const blob = new Blob([req.file.buffer], { + const buffer = new Uint8Array(req.file.buffer); + const blob = new Blob([buffer], { type: "application/octet-stream", }); diff --git a/demos/realty/frontend/package.json b/demos/realty/frontend/package.json index 6287a5f..4e6ae7e 100644 --- a/demos/realty/frontend/package.json +++ b/demos/realty/frontend/package.json @@ -22,10 +22,10 @@ "@mui/icons-material": "5.15.15", "@mui/material": "5.15.15", "@realty-demo/shared-models": "file:../shared-models/src", - "axios": "1.10.0", + "axios": "1.11.0", "react": "18.3.1", "react-dom": "18.3.1", - "react-router-dom": "7.6.3" + "react-router-dom": "7.8.2" }, "devDependencies": { "@svgr/webpack": "8.1.0", @@ -34,13 +34,13 @@ "@types/webpack": "5.28.5", "@types/webpack-dev-server": "4.7.2", "css-loader": "7.1.2", - "cssnano": "7.0.7", + "cssnano": "7.1.1", "postcss-loader": "8.1.1", "prettier": "3.6.2", "style-loader": "4.0.0", "terser-webpack-plugin": "5.3.14", - "ts-loader": "9.5.2", - "typescript": "5.8.2", + "ts-loader": "9.5.4", + "typescript": "5.9.2", "webpack-dev-server": "5.2.2" } } diff --git a/demos/realty/frontend/src/services/field-mapping-validation.ts b/demos/realty/frontend/src/services/field-mapping-validation.ts index 174f192..bed3d06 100644 --- a/demos/realty/frontend/src/services/field-mapping-validation.ts +++ b/demos/realty/frontend/src/services/field-mapping-validation.ts @@ -16,14 +16,7 @@ export type FieldMapping = { export type FieldMappingError = { field: string; reason: string; - type: - | "missing_broker" - | "missing_broker2" - | "insufficient_images" - | "unknown_field" - | "invalid_field_type" - | "no_dataset" - | "missing_field"; + type: "unknown_field" | "invalid_field_type" | "no_dataset"; }; type FieldMappingConfig = { @@ -100,53 +93,6 @@ const createMapping = ( }; }; -const getFieldMappingError = ( - fieldName: string, - dataset: string[], - config: FieldMappingConfig, - context: ValidationContext, -): FieldMappingError | null => { - if (dataset.includes(fieldName)) { - return null; - } - - // if the field is optional, we can skip it without error - if (config.optional) { - return null; - } - - // all non-optional fields that are not broker fields are required - if (!config.brokerField) { - return { - field: fieldName, - reason: `Field "${fieldName}" is missing from in the brand template`, - type: "missing_field", - }; - } - - // broker fields - - // missing broker field for the first agent found, and we need at least one agent - if (config.brokerIndex === 0 && context.requiredAgentCount > 0) { - return { - field: fieldName, - reason: "This field requires the first agent to be selected", - type: "missing_broker", - }; - } - - if (config.brokerIndex === 1 && context.requiredAgentCount > 1) { - return { - field: fieldName, - reason: "This field requires the second agent to be selected", - type: "missing_broker2", - }; - } - - // if we get here, the field is a broker field and we've checked for the required agent count - return null; -}; - export const validateFieldMappings = async ( template: BrandTemplate, context: ValidationContext, @@ -173,18 +119,17 @@ export const validateFieldMappings = async ( const datasetFields = Object.keys(response.dataset); - // Check for missing fields from the configuration - Object.keys(FIELD_MAPPING_CONFIG).forEach((fieldName) => { + // Only validate fields that exist in the template's dataset + datasetFields.forEach((fieldName) => { const config = FIELD_MAPPING_CONFIG[fieldName]; - const error = getFieldMappingError( - fieldName, - datasetFields, - config, - context, - ); - - if (error) { - errors.push(error); + + if (!config) { + // Field exists in template but not in our configuration + errors.push({ + field: fieldName, + reason: `Field "${fieldName}" exists in template but is not supported by the application`, + type: "unknown_field", + }); return; } diff --git a/demos/realty/package.json b/demos/realty/package.json index e78f99f..f4967dd 100644 --- a/demos/realty/package.json +++ b/demos/realty/package.json @@ -31,23 +31,23 @@ "jose": "5.10.0" }, "devDependencies": { - "@eslint/js": "9.30.0", + "@eslint/js": "9.34.0", "@types/cookie-parser": "1.4.9", "@types/node": "20.19.2", "@types/yargs": "17.0.33", - "@typescript-eslint/eslint-plugin": "8.35.1", - "@typescript-eslint/parser": "8.35.1", + "@typescript-eslint/eslint-plugin": "8.41.0", + "@typescript-eslint/parser": "8.41.0", "chalk": "4.1.2", "cli-table3": "0.6.5", "envfile": "7.1.0", - "eslint": "9.30.0", + "eslint": "9.34.0", "eslint-plugin-react": "7.37.5", "eslint-plugin-react-hooks": "5.2.0", "eslint-plugin-unicorn": "57.0.0", "prettier": "3.6.2", "ts-node": "10.9.2", - "typescript": "5.8.2", - "typescript-eslint": "8.35.1", + "typescript": "5.9.2", + "typescript-eslint": "8.41.0", "yargs": "17.7.2" } } diff --git a/demos/realty/shared-models/package.json b/demos/realty/shared-models/package.json index e1b3035..d13fa79 100644 --- a/demos/realty/shared-models/package.json +++ b/demos/realty/shared-models/package.json @@ -9,6 +9,6 @@ "license": "SEE LICENSE IN LICENSE.md in root directory", "private": true, "devDependencies": { - "typescript": "5.8.2" + "typescript": "5.9.2" } } diff --git a/openapi/spec.yml b/openapi/spec.yml index bde8e4b..31238d5 100644 --- a/openapi/spec.yml +++ b/openapi/spec.yml @@ -8,7 +8,7 @@ info: name: ©2023 All Rights Reserved termsOfService: https://www.canva.com/trust/legal/ title: Canva Connect API - version: latest + version: 2024-06-18 servers: - description: Canva Connect API url: https://api.canva.com/rest @@ -34,7 +34,7 @@ paths: verify JWTs sent to app backends. operationId: getAppJwks parameters: - - description: The app id + - description: The app ID. explode: false in: path name: appId @@ -261,6 +261,114 @@ paths: tags: - asset x-rate-limit-per-client-user: 180 + /v1/url-asset-uploads: + post: + description: |- + + + This API is currently provided as a preview. Be aware of the following: + + - There might be unannounced breaking changes. + - Any breaking changes to preview APIs won't produce a new [API version](https://www.canva.dev/docs/connect/versions/). + - Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users. + + + + Starts a new [asynchronous job](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints) to upload an asset from a URL to the user's content library. Supported file types for assets are listed in the [Assets API overview](https://www.canva.dev/docs/connect/api-reference/assets/). + + + Uploading a video asset from a URL is limited to a maximum 100MB file size. For importing larger video files, use the [Create asset upload job API](https://www.canva.dev/docs/connect/api-reference/assets/create-asset-upload-job/). + + + + For more information on the workflow for using asynchronous jobs, see [API requests and responses](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints). You can check the status and get the results of asset upload jobs created with this API using the [Get asset upload job via URL API](https://www.canva.dev/docs/connect/api-reference/assets/get-url-asset-upload-job/). + + operationId: createUrlAssetUploadJob + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/CreateUrlAssetUploadJobRequest" + required: true + responses: + "200": + content: + application/json: + examples: + in_progress: + $ref: "#/components/examples/InProgressAssetUploadJobExample" + success: + $ref: "#/components/examples/SuccessAssetUploadJobExample" + failed: + $ref: "#/components/examples/FailedAssetUploadJobExample" + schema: + $ref: "#/components/schemas/CreateUrlAssetUploadJobResponse" + description: OK + default: + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + description: Error Response + security: + - oauthAuthCode: + - asset:write + tags: + - asset + x-rate-limit-per-client-user: 30 + /v1/url-asset-uploads/{jobId}: + get: + description: |- + + + This API is currently provided as a preview. Be aware of the following: + + - There might be unannounced breaking changes. + - Any breaking changes to preview APIs won't produce a new [API version](https://www.canva.dev/docs/connect/versions/). + - Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users. + + + + Get the result of an asset upload job that was created using the [Create asset upload job via URL API](https://www.canva.dev/docs/connect/api-reference/assets/create-url-asset-upload-job/). + + You might need to make multiple requests to this endpoint until you get a `success` or `failed` status. For more information on the workflow for using asynchronous jobs, see [API requests and responses](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints). + operationId: getUrlAssetUploadJob + parameters: + - description: The asset upload job ID. + explode: false + in: path + name: jobId + required: true + schema: + pattern: "^[a-zA-Z0-9_-]{1,50}$" + type: string + style: simple + responses: + "200": + content: + application/json: + examples: + in_progress: + $ref: "#/components/examples/InProgressAssetUploadJobExample" + success: + $ref: "#/components/examples/SuccessAssetUploadJobExample" + failed: + $ref: "#/components/examples/FailedAssetUploadJobExample" + schema: + $ref: "#/components/schemas/GetUrlAssetUploadJobResponse" + description: OK + default: + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + description: Error Response + security: + - oauthAuthCode: + - asset:read + tags: + - asset + x-rate-limit-per-client-user: 180 /v1/autofills: post: description: |- @@ -1167,6 +1275,8 @@ paths: - Set height and width dimensions for a custom design. Additionally, you can also provide the `asset_id` of an asset in the user's [projects](https://www.canva.com/help/find-designs-and-folders/) to add to the new design. Currently, this only supports image assets. To list the assets in a folder in the user's projects, use the [List folder items API](https://www.canva.dev/docs/connect/api-reference/folders/list-folder-items/). + + NOTE: Blank designs created with this API are automatically deleted if they're not edited within 7 days. These blank designs bypass the user's Canva trash and are permanently deleted. operationId: createDesign requestBody: content: @@ -1453,16 +1563,6 @@ paths: /v1/url-imports: post: description: |- - - - This API is currently provided as a preview. Be aware of the following: - - - There might be unannounced breaking changes. - - Any breaking changes to preview APIs won't produce a new [API version](https://www.canva.dev/docs/connect/versions/). - - Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users. - - - Starts a new [asynchronous job](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints) to import an external file from a URL as a new design in Canva. Supported file types for imports are listed in [Design imports overview](https://www.canva.dev/docs/connect/api-reference/design-imports/#supported-file-types). @@ -1508,16 +1608,6 @@ paths: /v1/url-imports/{jobId}: get: description: |- - - - This API is currently provided as a preview. Be aware of the following: - - - There might be unannounced breaking changes. - - Any breaking changes to preview APIs won't produce a new [API version](https://www.canva.dev/docs/connect/versions/). - - Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users. - - - Gets the result of a URL import job created using the [Create URL import job API](https://www.canva.dev/docs/connect/api-reference/design-imports/create-url-import-job/). You might need to make multiple requests to this endpoint until you get a `success` or `failed` status. For more information on the workflow for using asynchronous jobs, see [API requests and responses](https://www.canva.dev/docs/connect/api-requests-responses/#asynchronous-job-endpoints). @@ -1871,9 +1961,13 @@ paths: /v1/folders: post: description: |- - Creates a folder in either the top level of a Canva user's - [projects](https://www.canva.com/help/find-designs-and-folders/) (using the ID `root`), or - another folder (using the parent folder's ID). When a folder is successfully created, the + Creates a folder in one of the following locations: + + - The top level of a Canva user's [projects](https://www.canva.com/help/find-designs-and-folders/) (using the ID `root`), + - The user's Uploads folder (using the ID `uploads`), + - Another folder (using the parent folder's ID). + + When a folder is successfully created, the endpoint returns its folder ID, along with other information. operationId: createFolder requestBody: @@ -2045,16 +2139,6 @@ paths: /v1/resizes: post: description: |- - - - This API is currently provided as a preview. Be aware of the following: - - - There might be unannounced breaking changes. - - Any breaking changes to preview APIs won't produce a new [API version](https://www.canva.dev/docs/connect/versions/). - - Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users. - - - To use this API, your integration must act on behalf of a user that's on a Canva plan with premium features (such as Canva Pro). @@ -2071,7 +2155,12 @@ paths: - Use a preset design type. - Set height and width dimensions for a custom design. - NOTE: [Canva docs](https://www.canva.com/create/documents/) can't be resized, and other design types can't be resized to a Canva doc. + Note the following behaviors and restrictions when resizing designs: + - Designs can be resized to a maximum area of 25,000,000 pixels squared. + - Resizing designs using the Connect API always creates a new design. In-place resizing is currently not available in the Connect API, but can be done in the Canva UI. + - Resizing a multi-page design results in all pages of the design being resized. Resizing a section of a design is only available in the Canva UI. + - [Canva docs](https://www.canva.com/create/documents/) can't be resized, and other design types can't be resized to a Canva doc. + - Canva Code designs can't be resized, and other design types can't be resized to a Canva Code design. For more information on the workflow for using asynchronous jobs, @@ -2123,16 +2212,6 @@ paths: /v1/resizes/{jobId}: get: description: |- - - - This API is currently provided as a preview. Be aware of the following: - - - There might be unannounced breaking changes. - - Any breaking changes to preview APIs won't produce a new [API version](https://www.canva.dev/docs/connect/versions/). - - Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users. - - - To use this API, your integration must act on behalf of a user that's on a Canva plan with premium features (such as Canva Pro). @@ -2213,18 +2292,9 @@ paths: x-rate-limit-per-client-user: 10 /v1/users/me/capabilities: get: - description: |- - - - This API is currently provided as a preview. Be aware of the following: - - - There might be unannounced breaking changes. - - Any breaking changes to preview APIs won't produce a new [API version](https://www.canva.dev/docs/connect/versions/). - - Public integrations that use preview APIs will not pass the review process, and can't be made available to all Canva users. - - - - Lists the API capabilities for the user account associated with the provided access token. For more information, see [Capabilities](https://www.canva.dev/docs/connect/capabilities/). + description: + "Lists the API capabilities for the user account associated with\ + \ the provided access token. For more information, see [Capabilities](https://www.canva.dev/docs/connect/capabilities/)." operationId: getUserCapabilities responses: "200": @@ -2516,8 +2586,8 @@ components: urls: edit_url: https://www.canva.com/design/DAGhRehVa2c/0L_1s4UXSpZhls8EtPaRKw/edit view_url: https://www.canva.com/design/DAGhRehVa2c/0L_1s4UXSpZhls8EtPaRKw/view - created_at: "1742856750," - updated_at: "1742856752," + created_at: 1742856750 + updated_at: 1742856752 page_count: 5 FailedResizeJobExample: summary: Failed job @@ -2529,6 +2599,16 @@ components: code: design_resize_error message: Failed to resize the design parameters: + appId: + description: The app ID. + explode: false + in: path + name: appId + required: true + schema: + pattern: "^[a-zA-Z0-9_-]{1,50}$" + type: string + style: simple brandTemplateId: description: The brand template ID. explode: false @@ -2582,6 +2662,17 @@ components: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple + transactionIdParameter: + description: The editing transaction ID. + example: EDT123456 + explode: false + in: path + name: transactionId + required: true + schema: + pattern: "^[a-zA-Z0-9_-]{1,50}$" + type: string + style: simple exportId: description: The export job ID. explode: false @@ -2592,6 +2683,16 @@ components: pattern: "^[a-zA-Z0-9_-]{1,50}$" type: string style: simple + fileIdParameter: + description: The file ID. + explode: false + in: path + name: fileId + required: true + schema: + pattern: "^[a-zA-Z0-9_-]{1,50}$" + type: string + style: simple folderIdParameter: description: The folder ID. example: FAF2lZtloor @@ -2669,6 +2770,40 @@ components: - kty - "n" type: object + CreateUrlAssetUploadJobRequest: + properties: + name: + description: A name for the asset. + example: My Awesome Asset + maxLength: 255 + minLength: 1 + type: string + url: + description: + The URL of the file to import. This URL must be accessible + from the internet and be publicly available. + example: https://example.com/my_asset_to_upload.jpg + maxLength: 2048 + minLength: 8 + type: string + required: + - name + - url + type: object + CreateUrlAssetUploadJobResponse: + properties: + job: + $ref: "#/components/schemas/AssetUploadJob" + required: + - job + type: object + GetUrlAssetUploadJobResponse: + properties: + job: + $ref: "#/components/schemas/AssetUploadJob" + required: + - job + type: object GetAssetResponse: properties: asset: @@ -2749,12 +2884,15 @@ components: example: 1692928800 format: int64 type: integer + owner: + $ref: "#/components/schemas/TeamUserSummary" thumbnail: $ref: "#/components/schemas/Thumbnail" required: - created_at - id - name + - owner - tags - type - updated_at @@ -2811,9 +2949,7 @@ components: - updated_at type: object AssetType: - description: - "Type of an asset. Support for `video` assets is currently provided\ - \ as a [preview](https://www.canva.dev/docs/connect/api-reference/assets/#videos)." + description: Type of an asset. enum: - image - video @@ -3208,12 +3344,10 @@ components: enum: - any - non_empty - - empty type: string x-enum-descriptions: - Brand templates with and without dataset definitions. - Brand templates with one or more data fields defined. - - Brand templates with no data fields defined. ListBrandTemplatesResponse: properties: continuation: @@ -3398,6 +3532,8 @@ components: using the format `[user_id:team_id]`. If the `assignee_id` parameter is specified, you must mention the assignee in the message. example: "Great work [oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP]!" + maxLength: 2048 + minLength: 1 type: string assignee_id: description: |- @@ -3420,6 +3556,8 @@ components: You can also mention users in your message by specifying their User ID and Team ID using the format `[user_id:team_id]`. example: Thanks! + maxLength: 2048 + minLength: 1 type: string required: - attached_to @@ -3434,6 +3572,8 @@ components: You can also mention users in your message by specifying their User ID and Team ID using the format `[user_id:team_id]`. example: Thanks! + maxLength: 2048 + minLength: 1 type: string required: - message_plaintext @@ -3469,6 +3609,8 @@ components: using the format `[user_id:team_id]`. If the `assignee_id` parameter is specified, you must mention the assignee in the message. example: "Great work [oUnPjZ2k2yuhftbWF7873o:oBpVhLW22VrqtwKgaayRbP]!" + maxLength: 2048 + minLength: 1 type: string assignee_id: description: |- @@ -5065,6 +5207,8 @@ components: - autofill_data_invalid - feature_not_available - license_required + - input_unsafe + - display_name_unavailable type: string CreateDesignExportJobRequest: description: |- @@ -5606,6 +5750,7 @@ components: description: |- The folder ID of the parent folder. To create a new folder at the top level of a user's [projects](https://www.canva.com/help/find-designs-and-folders/), use the ID `root`. + To create it in their Uploads folder, use `uploads`. example: FAF2lZtloor maxLength: 50 minLength: 1 @@ -6169,6 +6314,7 @@ components: - thumbnail_generation_error - design_resize_error - create_design_error + - trial_quota_exceeded type: string DesignResizeError: description: diff --git a/package-lock.json b/package-lock.json index 7a49355..f4a997b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,12 +34,26 @@ }, "devDependencies": { "@hey-api/openapi-ts": "0.57.1", - "typescript": "5.8.2" + "typescript": "5.9.2" }, "engines": { "node": ">=20.14.0" } }, + "client/node_modules/typescript": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "client/ts": {}, "demos/common": { "name": "demo-common-modules", @@ -57,9 +71,9 @@ "jest": "29.7.0", "jose": "5.10.0", "nodemon": "3.0.1", - "open": "10.1.2", + "open": "10.2.0", "pug": "3.0.3", - "ts-jest": "29.4.0", + "ts-jest": "29.4.1", "webpack-cli": "6.0.1", "webpack-dev-server": "5.2.2", "yargs": "17.7.2" @@ -72,7 +86,7 @@ "@types/nodemon": "1.19.6", "@types/yargs": "17.0.33", "prettier": "3.6.2", - "typescript": "5.8.2" + "typescript": "5.9.2" }, "engines": { "node": ">=20.14.0" @@ -82,6 +96,20 @@ "resolved": "client/ts", "link": true }, + "demos/common/node_modules/typescript": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "demos/ecommerce_shop": { "name": "ecommerce-shop-demo", "hasInstallScript": true, @@ -92,18 +120,18 @@ "jose": "5.10.0" }, "devDependencies": { - "@eslint/js": "9.30.0", + "@eslint/js": "9.34.0", "@types/cookie-parser": "1.4.9", "@types/jest": "29.5.14", "@types/node": "20.19.2", "@types/nodemon": "1.19.6", "@types/yargs": "17.0.33", - "@typescript-eslint/eslint-plugin": "8.35.1", - "@typescript-eslint/parser": "8.35.1", + "@typescript-eslint/eslint-plugin": "8.41.0", + "@typescript-eslint/parser": "8.41.0", "chalk": "4.1.2", "cli-table3": "0.6.5", "envfile": "7.1.0", - "eslint": "9.30.0", + "eslint": "9.34.0", "eslint-plugin-jest": "28.11.0", "eslint-plugin-react": "7.37.5", "eslint-plugin-react-hooks": "5.2.0", @@ -111,10 +139,10 @@ "jest": "29.7.0", "nodemon": "3.0.1", "prettier": "3.6.2", - "ts-jest": "29.4.0", + "ts-jest": "29.4.1", "ts-node": "10.9.2", - "typescript": "5.8.2", - "typescript-eslint": "8.35.1", + "typescript": "5.9.2", + "typescript-eslint": "8.41.0", "webpack-cli": "6.0.1", "webpack-dev-server": "5.2.2", "yargs": "17.7.2" @@ -132,8 +160,8 @@ "cors": "2.8.5", "dotenv": "16.6.0", "express": "4.21.2", - "multer": "2.0.1", - "open": "10.1.2", + "multer": "2.0.2", + "open": "10.2.0", "pug": "3.0.3" }, "devDependencies": { @@ -142,7 +170,7 @@ "@types/multer": "2.0.0", "@types/node": "20.19.2", "prettier": "3.6.2", - "typescript": "5.8.2" + "typescript": "5.9.2" } }, "demos/ecommerce_shop/frontend": { @@ -159,7 +187,7 @@ "canvas-confetti": "1.9.3", "react": "18.3.1", "react-dom": "18.3.1", - "react-router-dom": "7.6.3" + "react-router-dom": "7.8.2" }, "devDependencies": { "@svgr/webpack": "8.1.0", @@ -169,13 +197,13 @@ "@types/webpack": "5.28.5", "@types/webpack-dev-server": "4.7.2", "css-loader": "7.1.2", - "cssnano": "7.0.7", + "cssnano": "7.1.1", "postcss-loader": "8.1.1", "prettier": "3.6.2", "style-loader": "4.0.0", "terser-webpack-plugin": "5.3.14", - "ts-loader": "9.5.2", - "typescript": "5.8.2", + "ts-loader": "9.5.4", + "typescript": "5.9.2", "url-loader": "4.1.1", "webpack-dev-server": "5.2.2" } @@ -184,6 +212,20 @@ "resolved": "client/ts", "link": true }, + "demos/ecommerce_shop/node_modules/typescript": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "demos/playground": { "name": "connect-api-playground", "hasInstallScript": true, @@ -194,21 +236,21 @@ "jose": "5.10.0" }, "devDependencies": { - "@eslint/js": "9.30.0", + "@eslint/js": "9.34.0", "@types/cookie-parser": "1.4.9", "@types/node": "20.19.2", "@types/yargs": "17.0.33", - "@typescript-eslint/eslint-plugin": "8.35.1", - "@typescript-eslint/parser": "8.35.1", - "eslint": "9.30.0", + "@typescript-eslint/eslint-plugin": "8.41.0", + "@typescript-eslint/parser": "8.41.0", + "eslint": "9.34.0", "eslint-plugin-jest": "28.11.0", "eslint-plugin-react": "7.37.5", "eslint-plugin-react-hooks": "5.2.0", "eslint-plugin-unicorn": "57.0.0", "prettier": "3.6.2", "ts-node": "10.9.2", - "typescript": "5.8.2", - "typescript-eslint": "8.35.1", + "typescript": "5.9.2", + "typescript-eslint": "8.41.0", "yargs": "17.7.2" }, "engines": { @@ -225,8 +267,8 @@ "cors": "2.8.5", "dotenv": "16.6.0", "express": "4.21.2", - "multer": "2.0.1", - "open": "10.1.2", + "multer": "2.0.2", + "open": "10.2.0", "pug": "3.0.3" }, "devDependencies": { @@ -236,7 +278,7 @@ "@types/multer": "2.0.0", "@types/node": "20.19.2", "prettier": "3.6.2", - "typescript": "5.8.2" + "typescript": "5.9.2" } }, "demos/playground/frontend": { @@ -253,7 +295,7 @@ "canvas-confetti": "1.9.3", "react": "18.3.1", "react-dom": "18.3.1", - "react-router-dom": "7.6.3" + "react-router-dom": "7.8.2" }, "devDependencies": { "@svgr/webpack": "8.1.0", @@ -261,13 +303,13 @@ "@types/react": "18.3.12", "@types/react-dom": "18.3.1", "css-loader": "7.1.2", - "cssnano": "7.0.7", + "cssnano": "7.1.1", "postcss-loader": "8.1.1", "prettier": "3.6.2", "style-loader": "4.0.0", "terser-webpack-plugin": "5.3.14", - "ts-loader": "9.5.2", - "typescript": "5.8.2", + "ts-loader": "9.5.4", + "typescript": "5.9.2", "url-loader": "4.1.1", "webpack-dev-server": "5.2.2" } @@ -276,6 +318,20 @@ "resolved": "client/ts", "link": true }, + "demos/playground/node_modules/typescript": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "demos/realty": { "name": "realty-demo", "hasInstallScript": true, @@ -286,23 +342,23 @@ "jose": "5.10.0" }, "devDependencies": { - "@eslint/js": "9.30.0", + "@eslint/js": "9.34.0", "@types/cookie-parser": "1.4.9", "@types/node": "20.19.2", "@types/yargs": "17.0.33", - "@typescript-eslint/eslint-plugin": "8.35.1", - "@typescript-eslint/parser": "8.35.1", + "@typescript-eslint/eslint-plugin": "8.41.0", + "@typescript-eslint/parser": "8.41.0", "chalk": "4.1.2", "cli-table3": "0.6.5", "envfile": "7.1.0", - "eslint": "9.30.0", + "eslint": "9.34.0", "eslint-plugin-react": "7.37.5", "eslint-plugin-react-hooks": "5.2.0", "eslint-plugin-unicorn": "57.0.0", "prettier": "3.6.2", "ts-node": "10.9.2", - "typescript": "5.8.2", - "typescript-eslint": "8.35.1", + "typescript": "5.9.2", + "typescript-eslint": "8.41.0", "yargs": "17.7.2" }, "engines": { @@ -319,8 +375,8 @@ "cors": "2.8.5", "dotenv": "16.6.0", "express": "4.21.2", - "multer": "2.0.1", - "open": "10.1.2", + "multer": "2.0.2", + "open": "10.2.0", "pug": "3.0.3", "uuid": "11.1.0" }, @@ -330,7 +386,7 @@ "@types/multer": "2.0.0", "@types/uuid": "10.0.0", "prettier": "3.6.2", - "typescript": "5.8.2" + "typescript": "5.9.2" } }, "demos/realty/frontend": { @@ -344,10 +400,10 @@ "@mui/icons-material": "5.15.15", "@mui/material": "5.15.15", "@realty-demo/shared-models": "file:../shared-models/src", - "axios": "1.10.0", + "axios": "1.11.0", "react": "18.3.1", "react-dom": "18.3.1", - "react-router-dom": "7.6.3" + "react-router-dom": "7.8.2" }, "devDependencies": { "@svgr/webpack": "8.1.0", @@ -356,13 +412,13 @@ "@types/webpack": "5.28.5", "@types/webpack-dev-server": "4.7.2", "css-loader": "7.1.2", - "cssnano": "7.0.7", + "cssnano": "7.1.1", "postcss-loader": "8.1.1", "prettier": "3.6.2", "style-loader": "4.0.0", "terser-webpack-plugin": "5.3.14", - "ts-loader": "9.5.2", - "typescript": "5.8.2", + "ts-loader": "9.5.4", + "typescript": "5.9.2", "webpack-dev-server": "5.2.2" } }, @@ -374,6 +430,19 @@ "resolved": "demos/realty/shared-models/src", "link": true }, + "demos/realty/node_modules/builtin-modules": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-5.0.0.tgz", + "integrity": "sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "demos/realty/node_modules/ci-info": { "version": "4.2.0", "dev": true, @@ -432,6 +501,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "demos/realty/node_modules/is-builtin-module": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-5.0.0.tgz", + "integrity": "sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "builtin-modules": "^5.0.0" + }, + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "demos/realty/node_modules/jsesc": { "version": "3.1.0", "dev": true, @@ -465,6 +550,20 @@ "node": ">=6" } }, + "demos/realty/node_modules/typescript": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "demos/realty/node_modules/uuid": { "version": "11.1.0", "funding": [ @@ -481,19 +580,7 @@ "version": "1.0.0", "license": "SEE LICENSE IN LICENSE.md in root directory", "devDependencies": { - "typescript": "5.8.2" - } - }, - "demos/realty/shared-models/node_modules/typescript": { - "version": "5.8.2", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" + "typescript": "5.9.2" } }, "demos/realty/shared-models/src": {}, @@ -508,17 +595,17 @@ "jose": "5.10.0" }, "devDependencies": { - "@eslint/js": "9.30.0", + "@eslint/js": "9.34.0", "@types/jest": "29.5.14", "@types/node": "20.19.2", "@types/nodemon": "1.19.6", "@types/yargs": "17.0.33", - "@typescript-eslint/eslint-plugin": "8.35.1", - "@typescript-eslint/parser": "8.35.1", + "@typescript-eslint/eslint-plugin": "8.41.0", + "@typescript-eslint/parser": "8.41.0", "chalk": "4.1.2", "cli-table3": "0.6.5", "envfile": "7.1.0", - "eslint": "9.30.0", + "eslint": "9.34.0", "eslint-plugin-jest": "28.11.0", "eslint-plugin-react": "7.37.5", "eslint-plugin-react-hooks": "5.2.0", @@ -526,10 +613,10 @@ "jest": "29.7.0", "nodemon": "3.0.1", "prettier": "3.6.2", - "ts-jest": "29.4.0", + "ts-jest": "29.4.1", "ts-node": "10.9.2", - "typescript": "5.8.2", - "typescript-eslint": "8.35.1", + "typescript": "5.9.2", + "typescript-eslint": "8.41.0", "webpack-cli": "6.0.1", "webpack-dev-server": "5.2.2", "yargs": "17.7.2" @@ -2556,7 +2643,9 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.3.0", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", + "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2564,7 +2653,9 @@ } }, "node_modules/@eslint/core": { - "version": "0.12.0", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", + "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2617,7 +2708,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.30.0", + "version": "9.34.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.34.0.tgz", + "integrity": "sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==", "dev": true, "license": "MIT", "engines": { @@ -2636,11 +2729,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.2.7", + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz", + "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.12.0", + "@eslint/core": "^0.13.0", "levn": "^0.4.1" }, "engines": { @@ -3621,6 +3716,8 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "license": "MIT", "dependencies": { @@ -3633,6 +3730,8 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", "engines": { @@ -3641,6 +3740,8 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", "dependencies": { @@ -4381,15 +4482,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.35.1", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.41.0.tgz", + "integrity": "sha512-8fz6oa6wEKZrhXWro/S3n2eRJqlRcIa6SlDh59FXJ5Wp5XRZ8B9ixpJDcjadHq47hMx0u+HW6SNa6LjJQ6NLtw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.35.1", - "@typescript-eslint/type-utils": "8.35.1", - "@typescript-eslint/utils": "8.35.1", - "@typescript-eslint/visitor-keys": "8.35.1", + "@typescript-eslint/scope-manager": "8.41.0", + "@typescript-eslint/type-utils": "8.41.0", + "@typescript-eslint/utils": "8.41.0", + "@typescript-eslint/visitor-keys": "8.41.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -4403,9 +4506,9 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.35.1", + "@typescript-eslint/parser": "^8.41.0", "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { @@ -4417,14 +4520,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.35.1", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.41.0.tgz", + "integrity": "sha512-gTtSdWX9xiMPA/7MV9STjJOOYtWwIJIYxkQxnSV1U3xcE+mnJSH3f6zI0RYP+ew66WSlZ5ed+h0VCxsvdC1jJg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.35.1", - "@typescript-eslint/types": "8.35.1", - "@typescript-eslint/typescript-estree": "8.35.1", - "@typescript-eslint/visitor-keys": "8.35.1", + "@typescript-eslint/scope-manager": "8.41.0", + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/typescript-estree": "8.41.0", + "@typescript-eslint/visitor-keys": "8.41.0", "debug": "^4.3.4" }, "engines": { @@ -4436,16 +4541,18 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/project-service": { - "version": "8.35.1", + "node_modules/@typescript-eslint/project-service": { + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.41.0.tgz", + "integrity": "sha512-b8V9SdGBQzQdjJ/IO3eDifGpDBJfvrNTp2QD9P2BeqWTGrRibgfgIlBSw6z3b6R7dPzg752tOs4u/7yCLxksSQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.35.1", - "@typescript-eslint/types": "^8.35.1", + "@typescript-eslint/tsconfig-utils": "^8.41.0", + "@typescript-eslint/types": "^8.41.0", "debug": "^4.3.4" }, "engines": { @@ -4456,70 +4563,18 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.35.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "8.35.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.35.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.35.1", - "@typescript-eslint/tsconfig-utils": "8.35.1", - "@typescript-eslint/types": "8.35.1", - "@typescript-eslint/visitor-keys": "8.35.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.35.1", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.41.0.tgz", + "integrity": "sha512-n6m05bXn/Cd6DZDGyrpXrELCPVaTnLdPToyhBoFkLIMznRUQUEQdSp96s/pcWSQdqOhrgR1mzJ+yItK7T+WPMQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.35.1", - "@typescript-eslint/visitor-keys": "8.35.1" + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/visitor-keys": "8.41.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4529,8 +4584,10 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/types": { - "version": "8.35.1", + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.41.0.tgz", + "integrity": "sha512-TDhxYFPUYRFxFhuU5hTIJk+auzM/wKvWgoNYOPcOf6i4ReYlOoYN8q1dV5kOTjNQNJgzWN3TUUQMtlLOcUgdUw==", "dev": true, "license": "MIT", "engines": { @@ -4539,15 +4596,21 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.35.1", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.41.0.tgz", + "integrity": "sha512-63qt1h91vg3KsjVVonFJWjgSK7pZHSQFKH6uwqxAH9bBrsyRhO6ONoKyXxyVBzG1lJnFAJcKAcxLS54N1ee1OQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.35.1", - "@typescript-eslint/utils": "8.35.1", + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/typescript-estree": "8.41.0", + "@typescript-eslint/utils": "8.41.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -4560,46 +4623,13 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/project-service": { - "version": "8.35.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.35.1", - "@typescript-eslint/types": "^8.35.1", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.35.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "8.35.1", + "node_modules/@typescript-eslint/types": { + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.41.0.tgz", + "integrity": "sha512-9EwxsWdVqh42afLbHP90n2VdHaWU/oWgbH2P0CfcNfdKL7CuKpwMQGjwev56vWu9cSKU7FWSu6r9zck6CVfnag==", "dev": true, "license": "MIT", "engines": { @@ -4610,15 +4640,17 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.35.1", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.41.0.tgz", + "integrity": "sha512-D43UwUYJmGhuwHfY7MtNKRZMmfd8+p/eNSfFe6tH5mbVDto+VQCayeAt35rOx3Cs6wxD16DQtIKw/YXxt5E0UQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.35.1", - "@typescript-eslint/tsconfig-utils": "8.35.1", - "@typescript-eslint/types": "8.35.1", - "@typescript-eslint/visitor-keys": "8.35.1", + "@typescript-eslint/project-service": "8.41.0", + "@typescript-eslint/tsconfig-utils": "8.41.0", + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/visitor-keys": "8.41.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -4634,18 +4666,20 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/utils": { - "version": "8.35.1", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.41.0.tgz", + "integrity": "sha512-udbCVstxZ5jiPIXrdH+BZWnPatjlYwJuJkDA4Tbo3WyYLh8NvB+h/bKeSZHDOFKfphsZYJQqaFtLeXEqurQn1A==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.35.1", - "@typescript-eslint/types": "8.35.1", - "@typescript-eslint/typescript-estree": "8.35.1" + "@typescript-eslint/scope-manager": "8.41.0", + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/typescript-estree": "8.41.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4656,89 +4690,17 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/project-service": { - "version": "8.35.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.35.1", - "@typescript-eslint/types": "^8.35.1", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.35.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "8.35.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.35.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.35.1", - "@typescript-eslint/tsconfig-utils": "8.35.1", - "@typescript-eslint/types": "8.35.1", - "@typescript-eslint/visitor-keys": "8.35.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.35.1", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.41.0.tgz", + "integrity": "sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.35.1", + "@typescript-eslint/types": "8.41.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -4749,20 +4711,10 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/@typescript-eslint/types": { - "version": "8.35.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -5247,12 +5199,10 @@ "version": "1.2.1", "license": "MIT" }, - "node_modules/async": { - "version": "3.2.6", - "license": "MIT" - }, "node_modules/asynckit": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "license": "MIT" }, "node_modules/available-typed-arrays": { @@ -5270,11 +5220,13 @@ } }, "node_modules/axios": { - "version": "1.10.0", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", + "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", + "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, @@ -5550,6 +5502,9 @@ }, "node_modules/brace-expansion": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -5566,7 +5521,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.4", + "version": "4.25.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.4.tgz", + "integrity": "sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==", "funding": [ { "type": "opencollective", @@ -5583,10 +5540,10 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", + "caniuse-lite": "^1.0.30001737", + "electron-to-chromium": "^1.5.211", "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" + "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" @@ -5768,6 +5725,8 @@ }, "node_modules/caniuse-api": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dev": true, "license": "MIT", "dependencies": { @@ -5778,7 +5737,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001692", + "version": "1.0.30001739", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001739.tgz", + "integrity": "sha512-y+j60d6ulelrNSwpPyrHdl+9mJnQzHBr08xm48Qno0nSk4h3Qojh+ziv2qE6rXf4k3tadF4o1J/1tAbVm1NtnA==", "funding": [ { "type": "opencollective", @@ -5984,6 +5945,8 @@ }, "node_modules/colord": { "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", "dev": true, "license": "MIT" }, @@ -5993,6 +5956,8 @@ }, "node_modules/combined-stream": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" @@ -6019,28 +5984,23 @@ } }, "node_modules/compression": { - "version": "1.7.4", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", "license": "MIT", "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", + "bytes": "3.1.2", + "compressible": "~2.0.18", "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", "vary": "~1.1.2" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/compression/node_modules/debug": { "version": "2.6.9", "license": "MIT", @@ -6052,9 +6012,14 @@ "version": "2.0.0", "license": "MIT" }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" + "node_modules/compression/node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, "node_modules/concat-map": { "version": "0.0.1", @@ -6159,11 +6124,13 @@ "license": "MIT" }, "node_modules/core-js-compat": { - "version": "3.40.0", + "version": "3.45.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.45.1.tgz", + "integrity": "sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.24.3" + "browserslist": "^4.25.3" }, "funding": { "type": "opencollective", @@ -6248,6 +6215,8 @@ }, "node_modules/css-declaration-sorter": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", + "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", "dev": true, "license": "ISC", "engines": { @@ -6341,11 +6310,13 @@ } }, "node_modules/cssnano": { - "version": "7.0.7", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.1.1.tgz", + "integrity": "sha512-fm4D8ti0dQmFPeF8DXSAA//btEmqCOgAc/9Oa3C1LW94h5usNrJEfrON7b4FkPZgnDEn6OUs5NdxiJZmAtGOpQ==", "dev": true, "license": "MIT", "dependencies": { - "cssnano-preset-default": "^7.0.7", + "cssnano-preset-default": "^7.0.9", "lilconfig": "^3.1.3" }, "engines": { @@ -6360,25 +6331,27 @@ } }, "node_modules/cssnano-preset-default": { - "version": "7.0.7", + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.9.tgz", + "integrity": "sha512-tCD6AAFgYBOVpMBX41KjbvRh9c2uUjLXRyV7KHSIrwHiq5Z9o0TFfUCoM3TwVrRsRteN3sVXGNvjVNxYzkpTsA==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.24.5", + "browserslist": "^4.25.1", "css-declaration-sorter": "^7.2.0", "cssnano-utils": "^5.0.1", "postcss-calc": "^10.1.1", - "postcss-colormin": "^7.0.3", - "postcss-convert-values": "^7.0.5", + "postcss-colormin": "^7.0.4", + "postcss-convert-values": "^7.0.7", "postcss-discard-comments": "^7.0.4", "postcss-discard-duplicates": "^7.0.2", "postcss-discard-empty": "^7.0.1", "postcss-discard-overridden": "^7.0.1", "postcss-merge-longhand": "^7.0.5", - "postcss-merge-rules": "^7.0.5", + "postcss-merge-rules": "^7.0.6", "postcss-minify-font-values": "^7.0.1", "postcss-minify-gradients": "^7.0.1", - "postcss-minify-params": "^7.0.3", + "postcss-minify-params": "^7.0.4", "postcss-minify-selectors": "^7.0.5", "postcss-normalize-charset": "^7.0.1", "postcss-normalize-display-values": "^7.0.1", @@ -6386,13 +6359,13 @@ "postcss-normalize-repeat-style": "^7.0.1", "postcss-normalize-string": "^7.0.1", "postcss-normalize-timing-functions": "^7.0.1", - "postcss-normalize-unicode": "^7.0.3", + "postcss-normalize-unicode": "^7.0.4", "postcss-normalize-url": "^7.0.1", "postcss-normalize-whitespace": "^7.0.1", "postcss-ordered-values": "^7.0.2", - "postcss-reduce-initial": "^7.0.3", + "postcss-reduce-initial": "^7.0.4", "postcss-reduce-transforms": "^7.0.1", - "postcss-svgo": "^7.0.2", + "postcss-svgo": "^7.1.0", "postcss-unique-selectors": "^7.0.4" }, "engines": { @@ -6404,6 +6377,8 @@ }, "node_modules/cssnano-utils": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.1.tgz", + "integrity": "sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg==", "dev": true, "license": "MIT", "engines": { @@ -6709,6 +6684,8 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "license": "MIT", "engines": { "node": ">=0.4.0" @@ -6895,21 +6872,10 @@ "version": "1.1.1", "license": "MIT" }, - "node_modules/ejs": { - "version": "3.1.10", - "license": "Apache-2.0", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/electron-to-chromium": { - "version": "1.5.82", + "version": "1.5.211", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.211.tgz", + "integrity": "sha512-IGBvimJkotaLzFnwIVgW9/UD/AOJ2tByUmeOrtqBfACSbAw5b1G0XpvdaieKyc7ULmbwXVx+4e4Be8pOPBrYkw==", "license": "ISC" }, "node_modules/emittery": { @@ -7178,18 +7144,20 @@ } }, "node_modules/eslint": { - "version": "9.30.0", + "version": "9.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.34.0.tgz", + "integrity": "sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.0", - "@eslint/core": "^0.14.0", + "@eslint/config-helpers": "^0.3.1", + "@eslint/core": "^0.15.2", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.30.0", - "@eslint/plugin-kit": "^0.3.1", + "@eslint/js": "9.34.0", + "@eslint/plugin-kit": "^0.3.5", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", @@ -7447,7 +7415,9 @@ } }, "node_modules/eslint/node_modules/@eslint/core": { - "version": "0.14.0", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", + "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -7458,28 +7428,19 @@ } }, "node_modules/eslint/node_modules/@eslint/plugin-kit": { - "version": "0.3.3", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", + "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.15.1", + "@eslint/core": "^0.15.2", "levn": "^0.4.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/eslint/node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { - "version": "0.15.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.12", "dev": true, @@ -7723,7 +7684,9 @@ "license": "MIT" }, "node_modules/fast-glob": { - "version": "3.3.2", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", "dependencies": { @@ -7731,7 +7694,7 @@ "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -7758,7 +7721,9 @@ } }, "node_modules/fastq": { - "version": "1.17.1", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, "license": "ISC", "dependencies": { @@ -7793,23 +7758,6 @@ "node": ">=16.0.0" } }, - "node_modules/filelist": { - "version": "1.0.4", - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/fill-range": { "version": "7.1.1", "license": "MIT", @@ -7928,7 +7876,9 @@ } }, "node_modules/form-data": { - "version": "4.0.3", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", @@ -8226,7 +8176,6 @@ }, "node_modules/handlebars": { "version": "4.7.8", - "dev": true, "license": "MIT", "dependencies": { "minimist": "^1.2.5", @@ -8730,6 +8679,8 @@ }, "node_modules/is-docker": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "license": "MIT", "bin": { "is-docker": "cli.js" @@ -8823,6 +8774,8 @@ }, "node_modules/is-inside-container": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", "license": "MIT", "dependencies": { "is-docker": "^3.0.0" @@ -9043,6 +8996,8 @@ }, "node_modules/is-wsl": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", "license": "MIT", "dependencies": { "is-inside-container": "^1.0.0" @@ -9142,40 +9097,6 @@ "node": ">= 0.4" } }, - "node_modules/jake": { - "version": "10.9.2", - "license": "Apache-2.0", - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jake/node_modules/brace-expansion": { - "version": "1.1.12", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/jake/node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/jest": { "version": "29.7.0", "license": "MIT", @@ -9987,6 +9908,8 @@ }, "node_modules/lodash.uniq": { "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true, "license": "MIT" }, @@ -10092,6 +10015,8 @@ }, "node_modules/merge2": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "license": "MIT", "engines": { @@ -10168,6 +10093,8 @@ }, "node_modules/minimatch": { "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -10245,9 +10172,9 @@ "license": "MIT" }, "node_modules/multer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/multer/-/multer-2.0.1.tgz", - "integrity": "sha512-Ug8bXeTIUlxurg8xLTEskKShvcKDZALo1THEX5E41pYCD2sCVub5/kIRIGqWNoqV6szyLyQKV6mD4QUrWE5GCQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/multer/-/multer-2.0.2.tgz", + "integrity": "sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==", "license": "MIT", "dependencies": { "append-field": "^1.0.0", @@ -10586,7 +10513,9 @@ } }, "node_modules/on-headers": { - "version": "1.0.2", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -10614,13 +10543,15 @@ } }, "node_modules/open": { - "version": "10.1.2", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", "license": "MIT", "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", - "is-wsl": "^3.1.0" + "wsl-utils": "^0.1.0" }, "engines": { "node": ">=18" @@ -10919,6 +10850,8 @@ }, "node_modules/postcss-calc": { "version": "10.1.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.1.1.tgz", + "integrity": "sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==", "dev": true, "license": "MIT", "dependencies": { @@ -10934,6 +10867,8 @@ }, "node_modules/postcss-calc/node_modules/postcss-selector-parser": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "license": "MIT", "dependencies": { @@ -10945,11 +10880,13 @@ } }, "node_modules/postcss-colormin": { - "version": "7.0.3", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.4.tgz", + "integrity": "sha512-ziQuVzQZBROpKpfeDwmrG+Vvlr0YWmY/ZAk99XD+mGEBuEojoFekL41NCsdhyNUtZI7DPOoIWIR7vQQK9xwluw==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.24.5", + "browserslist": "^4.25.1", "caniuse-api": "^3.0.0", "colord": "^2.9.3", "postcss-value-parser": "^4.2.0" @@ -10962,11 +10899,13 @@ } }, "node_modules/postcss-convert-values": { - "version": "7.0.5", + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.7.tgz", + "integrity": "sha512-HR9DZLN04Xbe6xugRH6lS4ZQH2zm/bFh/ZyRkpedZozhvh+awAfbA0P36InO4fZfDhvYfNJeNvlTf1sjwGbw/A==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.24.5", + "browserslist": "^4.25.1", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -10978,6 +10917,8 @@ }, "node_modules/postcss-discard-comments": { "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.4.tgz", + "integrity": "sha512-6tCUoql/ipWwKtVP/xYiFf1U9QgJ0PUvxN7pTcsQ8Ns3Fnwq1pU5D5s1MhT/XySeLq6GXNvn37U46Ded0TckWg==", "dev": true, "license": "MIT", "dependencies": { @@ -10992,6 +10933,8 @@ }, "node_modules/postcss-discard-comments/node_modules/postcss-selector-parser": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "license": "MIT", "dependencies": { @@ -11004,6 +10947,8 @@ }, "node_modules/postcss-discard-duplicates": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.2.tgz", + "integrity": "sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w==", "dev": true, "license": "MIT", "engines": { @@ -11015,6 +10960,8 @@ }, "node_modules/postcss-discard-empty": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.1.tgz", + "integrity": "sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg==", "dev": true, "license": "MIT", "engines": { @@ -11026,6 +10973,8 @@ }, "node_modules/postcss-discard-overridden": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.1.tgz", + "integrity": "sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg==", "dev": true, "license": "MIT", "engines": { @@ -11092,6 +11041,8 @@ }, "node_modules/postcss-merge-longhand": { "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.5.tgz", + "integrity": "sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw==", "dev": true, "license": "MIT", "dependencies": { @@ -11106,11 +11057,13 @@ } }, "node_modules/postcss-merge-rules": { - "version": "7.0.5", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.6.tgz", + "integrity": "sha512-2jIPT4Tzs8K87tvgCpSukRQ2jjd+hH6Bb8rEEOUDmmhOeTcqDg5fEFK8uKIu+Pvc3//sm3Uu6FRqfyv7YF7+BQ==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.24.5", + "browserslist": "^4.25.1", "caniuse-api": "^3.0.0", "cssnano-utils": "^5.0.1", "postcss-selector-parser": "^7.1.0" @@ -11124,6 +11077,8 @@ }, "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "license": "MIT", "dependencies": { @@ -11136,6 +11091,8 @@ }, "node_modules/postcss-minify-font-values": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.1.tgz", + "integrity": "sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11150,6 +11107,8 @@ }, "node_modules/postcss-minify-gradients": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.1.tgz", + "integrity": "sha512-X9JjaysZJwlqNkJbUDgOclyG3jZEpAMOfof6PUZjPnPrePnPG62pS17CjdM32uT1Uq1jFvNSff9l7kNbmMSL2A==", "dev": true, "license": "MIT", "dependencies": { @@ -11165,11 +11124,13 @@ } }, "node_modules/postcss-minify-params": { - "version": "7.0.3", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.4.tgz", + "integrity": "sha512-3OqqUddfH8c2e7M35W6zIwv7jssM/3miF9cbCSb1iJiWvtguQjlxZGIHK9JRmc8XAKmE2PFGtHSM7g/VcW97sw==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.24.5", + "browserslist": "^4.25.1", "cssnano-utils": "^5.0.1", "postcss-value-parser": "^4.2.0" }, @@ -11182,6 +11143,8 @@ }, "node_modules/postcss-minify-selectors": { "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.5.tgz", + "integrity": "sha512-x2/IvofHcdIrAm9Q+p06ZD1h6FPcQ32WtCRVodJLDR+WMn8EVHI1kvLxZuGKz/9EY5nAmI6lIQIrpo4tBy5+ug==", "dev": true, "license": "MIT", "dependencies": { @@ -11197,6 +11160,8 @@ }, "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "license": "MIT", "dependencies": { @@ -11264,6 +11229,8 @@ }, "node_modules/postcss-normalize-charset": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.1.tgz", + "integrity": "sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ==", "dev": true, "license": "MIT", "engines": { @@ -11275,6 +11242,8 @@ }, "node_modules/postcss-normalize-display-values": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.1.tgz", + "integrity": "sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11289,6 +11258,8 @@ }, "node_modules/postcss-normalize-positions": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.1.tgz", + "integrity": "sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11303,6 +11274,8 @@ }, "node_modules/postcss-normalize-repeat-style": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.1.tgz", + "integrity": "sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11317,6 +11290,8 @@ }, "node_modules/postcss-normalize-string": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.1.tgz", + "integrity": "sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11331,6 +11306,8 @@ }, "node_modules/postcss-normalize-timing-functions": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.1.tgz", + "integrity": "sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg==", "dev": true, "license": "MIT", "dependencies": { @@ -11344,11 +11321,13 @@ } }, "node_modules/postcss-normalize-unicode": { - "version": "7.0.3", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.4.tgz", + "integrity": "sha512-LvIURTi1sQoZqj8mEIE8R15yvM+OhbR1avynMtI9bUzj5gGKR/gfZFd8O7VMj0QgJaIFzxDwxGl/ASMYAkqO8g==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.24.5", + "browserslist": "^4.25.1", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -11360,6 +11339,8 @@ }, "node_modules/postcss-normalize-url": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.1.tgz", + "integrity": "sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11374,6 +11355,8 @@ }, "node_modules/postcss-normalize-whitespace": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.1.tgz", + "integrity": "sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA==", "dev": true, "license": "MIT", "dependencies": { @@ -11388,6 +11371,8 @@ }, "node_modules/postcss-ordered-values": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.2.tgz", + "integrity": "sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw==", "dev": true, "license": "MIT", "dependencies": { @@ -11402,11 +11387,13 @@ } }, "node_modules/postcss-reduce-initial": { - "version": "7.0.3", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.4.tgz", + "integrity": "sha512-rdIC9IlMBn7zJo6puim58Xd++0HdbvHeHaPgXsimMfG1ijC5A9ULvNLSE0rUKVJOvNMcwewW4Ga21ngyJjY/+Q==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.24.5", + "browserslist": "^4.25.1", "caniuse-api": "^3.0.0" }, "engines": { @@ -11418,6 +11405,8 @@ }, "node_modules/postcss-reduce-transforms": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.1.tgz", + "integrity": "sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g==", "dev": true, "license": "MIT", "dependencies": { @@ -11443,12 +11432,14 @@ } }, "node_modules/postcss-svgo": { - "version": "7.0.2", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.1.0.tgz", + "integrity": "sha512-KnAlfmhtoLz6IuU3Sij2ycusNs4jPW+QoFE5kuuUOK8awR6tMxZQrs5Ey3BUz7nFCzT3eqyFgqkyrHiaU2xx3w==", "dev": true, "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0", - "svgo": "^3.3.2" + "svgo": "^4.0.0" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >= 18" @@ -11457,8 +11448,67 @@ "postcss": "^8.4.32" } }, + "node_modules/postcss-svgo/node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/postcss-svgo/node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/postcss-svgo/node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/postcss-svgo/node_modules/svgo": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz", + "integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^5.1.0", + "css-tree": "^3.0.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "^1.4.1" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, "node_modules/postcss-unique-selectors": { "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.4.tgz", + "integrity": "sha512-pmlZjsmEAG7cHd7uK3ZiNSW6otSZ13RHuZ/4cDN/bVglS5EpF2r2oxY99SuOHa8m7AWoBCelTS3JPpzsIs8skQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11473,6 +11523,8 @@ }, "node_modules/postcss-unique-selectors/node_modules/postcss-selector-parser": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "license": "MIT", "dependencies": { @@ -11737,6 +11789,8 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -11816,7 +11870,9 @@ "license": "MIT" }, "node_modules/react-router": { - "version": "7.6.3", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.8.2.tgz", + "integrity": "sha512-7M2fR1JbIZ/jFWqelpvSZx+7vd7UlBTfdZqf6OSdF9g6+sfdqJDAWcak6ervbHph200ePlu+7G8LdoiC3ReyAQ==", "license": "MIT", "dependencies": { "cookie": "^1.0.1", @@ -11836,10 +11892,12 @@ } }, "node_modules/react-router-dom": { - "version": "7.6.3", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.8.2.tgz", + "integrity": "sha512-Z4VM5mKDipal2jQ385H6UBhiiEDlnJPx6jyWsTYoZQdl5TrjxEV2a9yl3Fi60NBJxYzOTGTTHXPi0pdizvTwow==", "license": "MIT", "dependencies": { - "react-router": "7.6.3" + "react-router": "7.8.2" }, "engines": { "node": ">=20.0.0" @@ -11851,6 +11909,8 @@ }, "node_modules/react-router/node_modules/cookie": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", "license": "MIT", "engines": { "node": ">=18" @@ -12187,7 +12247,9 @@ } }, "node_modules/reusify": { - "version": "1.0.4", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, "license": "MIT", "engines": { @@ -12211,6 +12273,8 @@ }, "node_modules/run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -12302,6 +12366,13 @@ "version": "2.1.2", "license": "MIT" }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "dev": true, + "license": "ISC" + }, "node_modules/scheduler": { "version": "0.23.2", "license": "MIT", @@ -12341,7 +12412,9 @@ } }, "node_modules/semver": { - "version": "7.7.1", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -12478,6 +12551,8 @@ }, "node_modules/set-cookie-parser": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", "license": "MIT" }, "node_modules/set-function-length": { @@ -12972,11 +13047,13 @@ } }, "node_modules/stylehacks": { - "version": "7.0.5", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.6.tgz", + "integrity": "sha512-iitguKivmsueOmTO0wmxURXBP8uqOO+zikLGZ7Mm9e/94R4w5T999Js2taS/KBOnQ/wdC3jN3vNSrkGDrlnqQg==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.24.5", + "browserslist": "^4.25.1", "postcss-selector-parser": "^7.1.0" }, "engines": { @@ -12988,6 +13065,8 @@ }, "node_modules/stylehacks/node_modules/postcss-selector-parser": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "license": "MIT", "dependencies": { @@ -13314,12 +13393,14 @@ } }, "node_modules/ts-jest": { - "version": "29.4.0", + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.1.tgz", + "integrity": "sha512-SaeUtjfpg9Uqu8IbeDKtdaS0g8lS6FT6OzM3ezrDfErPJPHNDo/Ey+VFGP1bQIDfagYDLyRpd7O15XpG1Es2Uw==", "license": "MIT", "dependencies": { "bs-logger": "^0.2.6", - "ejs": "^3.1.10", "fast-json-stable-stringify": "^2.1.0", + "handlebars": "^4.7.8", "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", @@ -13364,7 +13445,9 @@ } }, "node_modules/ts-loader": { - "version": "9.5.2", + "version": "9.5.4", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.4.tgz", + "integrity": "sha512-nCz0rEwunlTZiy6rXFByQU1kVVpCIgUpc/psFiKVrUwrizdnIbRFu8w7bxhUF0X613DYwT4XzrZHpVyMe758hQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13554,6 +13637,7 @@ "node_modules/typescript": { "version": "5.8.2", "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -13563,13 +13647,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.35.1", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.41.0.tgz", + "integrity": "sha512-n66rzs5OBXW3SFSnZHr2T685q1i4ODm2nulFJhMZBotaTavsS8TrI3d7bDlRSs9yWo7HmyWrN9qDu14Qv7Y0Dw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.35.1", - "@typescript-eslint/parser": "8.35.1", - "@typescript-eslint/utils": "8.35.1" + "@typescript-eslint/eslint-plugin": "8.41.0", + "@typescript-eslint/parser": "8.41.0", + "@typescript-eslint/typescript-estree": "8.41.0", + "@typescript-eslint/utils": "8.41.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -13580,7 +13667,7 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/ufo": { @@ -13590,7 +13677,6 @@ }, "node_modules/uglify-js": { "version": "3.17.4", - "dev": true, "license": "BSD-2-Clause", "optional": true, "bin": { @@ -14258,7 +14344,6 @@ }, "node_modules/wordwrap": { "version": "1.0.0", - "dev": true, "license": "MIT" }, "node_modules/wrap-ansi": { @@ -14314,6 +14399,21 @@ } } }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/xtend": { "version": "4.0.2", "license": "MIT",