From ba15f727f1c32aa5e948c5d2d5182ae5c54135f8 Mon Sep 17 00:00:00 2001 From: Brian Hanson Date: Tue, 8 Apr 2025 17:40:58 -0500 Subject: [PATCH 1/3] WIP --- package-lock.json | 93 +++++++++++++---------- src/web/assets/craftcms/CraftCmsAsset.php | 30 ++++++++ src/web/assets/craftcms/src/CraftForm.js | 23 ++++++ src/web/assets/craftcms/src/api.js | 92 ++++++++++++++++++++++ src/web/assets/craftcms/src/craftcms.js | 3 + 5 files changed, 199 insertions(+), 42 deletions(-) create mode 100644 src/web/assets/craftcms/CraftCmsAsset.php create mode 100644 src/web/assets/craftcms/src/CraftForm.js create mode 100644 src/web/assets/craftcms/src/api.js create mode 100644 src/web/assets/craftcms/src/craftcms.js diff --git a/package-lock.json b/package-lock.json index 2d0d399c8fe..c21a8e088d9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2586,9 +2586,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==" }, "node_modules/@types/express": { "version": "4.17.21", @@ -9349,9 +9349,9 @@ "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==" }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "funding": [ { "type": "github", @@ -9882,9 +9882,9 @@ "optional": true }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -10055,9 +10055,9 @@ } }, "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", "funding": [ { "type": "opencollective", @@ -10073,9 +10073,9 @@ } ], "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -11768,9 +11768,9 @@ } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "engines": { "node": ">=0.10.0" } @@ -13172,9 +13172,9 @@ } }, "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14475,6 +14475,15 @@ "version": "2.0.0", "license": "MIT" }, + "packages/craftcms-craftcms": { + "name": "@craftcms/craftcms", + "version": "1.0.0", + "extraneous": true, + "devDependencies": { + "typescript": "~5.7.2", + "vite": "^6.2.0" + } + }, "packages/craftcms-sass": { "name": "@craftcms/sass", "version": "1.1.0", @@ -16309,9 +16318,9 @@ } }, "@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==" }, "@types/express": { "version": "4.17.21", @@ -21310,9 +21319,9 @@ "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==" }, "nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==" }, "natural-compare": { "version": "1.4.0", @@ -21679,9 +21688,9 @@ "optional": true }, "picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "picomatch": { "version": "2.3.1", @@ -21789,13 +21798,13 @@ "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" }, "postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", "requires": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" } }, "postcss-calc": { @@ -22935,9 +22944,9 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" }, "source-map-support": { "version": "0.5.21", @@ -23935,9 +23944,9 @@ } }, "typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==" + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==" }, "uc.micro": { "version": "1.0.6", diff --git a/src/web/assets/craftcms/CraftCmsAsset.php b/src/web/assets/craftcms/CraftCmsAsset.php new file mode 100644 index 00000000000..f53b8f0d4a3 --- /dev/null +++ b/src/web/assets/craftcms/CraftCmsAsset.php @@ -0,0 +1,30 @@ + 'module'], + ]; + public $css = []; + + public function registerAssetFiles($view) + { + parent::registerAssetFiles($view); // TODO: Change the autogenerated stub + + $view = Craft::$app->getView(); + if ($view instanceof View) { + $view->registerJsImport('@craftcms/craftcms', $view->getAssetManager()->getAssetUrl($this, 'craftcms.js', false)); + } + } +} diff --git a/src/web/assets/craftcms/src/CraftForm.js b/src/web/assets/craftcms/src/CraftForm.js new file mode 100644 index 00000000000..0716f4130e3 --- /dev/null +++ b/src/web/assets/craftcms/src/CraftForm.js @@ -0,0 +1,23 @@ +import {createActionApi} from './api.js'; + +export default class CraftForm extends HTMLElement { + connectedCallback() { + this.form = this.querySelector('form'); + if (!this.form) { + console.error('craft-form must wrap a form element.'); + return; + } + + this.actionUrl = this.getAttribute('action-url') || this.actionUrl; + this.form.addEventListener('submit', this.handleSubmit); + } + disconnectedCallback() {} + + handleSubmit = async (e) => { + const target = e.target; + await sendActionRequest(this.actionUrl) + console.log(target); + } +} + +customElements.define('craft-form', CraftForm); diff --git a/src/web/assets/craftcms/src/api.js b/src/web/assets/craftcms/src/api.js new file mode 100644 index 00000000000..9f0cd3d453e --- /dev/null +++ b/src/web/assets/craftcms/src/api.js @@ -0,0 +1,92 @@ +const baseConfig = { + csrfTokenName: 'CRAFT_CSRF_TOKEN', +} + +export const sendActionRequest = async (url, data) => { + return null; +} + + +export function createActionApi({baseUrl = '/'}) { + const csrfTokenName = baseConfig.csrfTokenName; + let csrfTokenValue = null; + + const getCsrfToken = async () => { + const response = await fetch(`${normalizePath(baseUrl)}/users/session-info`, { + headers: { + 'Accept': 'application/json', + } + }) + + const data = await response.json(); + console.log('getCsrfToken', {data}); + return data; + } + + function normalizePath(path) { + let normalized = path; + if (path.startsWith('/')) { + normalized = normalized.substring(1); + } + + if (path.endsWith('/')) { + normalized = normalized.substring(0, path.length - 1); + } + + return normalized; + } + + /** + * + * @param {string} url + * @param {RequestInit} requestInit + * @returns {Promise} + */ + const sendActionRequest = async ( + path, + requestInit = {}, + options = {}, + ) => { + const config = { + csrfTokenName: 'CRAFT_CSRF_TOKEN', + ...options + } + const {body, headers, ...rest} = requestInit; + /** + * @type {RequestInit} + */ + const requestConfig = { + headers: { + ...headers, + 'X-Requested-With': 'XMLHttpRequest', + 'Accept': 'application/json', + }, + ...rest, + } + + if (!csrfTokenValue) { + const csrfData = await getCsrfToken(); + csrfTokenValue = csrfData.csrfTokenValue; + } + + requestConfig.headers['X-CSRF-Token'] = csrfTokenValue; + + if (body) { + requestConfig.method = 'POST'; + } + + console.log({requestConfig}); + + const response = await fetch(`${normalizePath(baseUrl)}/${normalizePath(path)}`, requestConfig); + if (!response.ok) { + return null; + } + const json = await response.json(); + + console.log(json); + + return json; + }; + + return {sendActionRequest}; +} diff --git a/src/web/assets/craftcms/src/craftcms.js b/src/web/assets/craftcms/src/craftcms.js new file mode 100644 index 00000000000..d93cdc8fdf6 --- /dev/null +++ b/src/web/assets/craftcms/src/craftcms.js @@ -0,0 +1,3 @@ +export {createActionApi} from './api.js'; +export {default as CraftForm} from './CraftForm.js'; + From b9df2360fb1887fb64831da896d468733c21841e Mon Sep 17 00:00:00 2001 From: Brian Hanson Date: Wed, 9 Apr 2025 16:02:06 -0500 Subject: [PATCH 2/3] Probably a better approach --- src/templates/_special/async-csrf-input.twig | 48 +++++++--- src/web/assets/craftcms/CraftCmsAsset.php | 30 ------- src/web/assets/craftcms/src/CraftForm.js | 23 ----- src/web/assets/craftcms/src/api.js | 92 -------------------- src/web/assets/craftcms/src/craftcms.js | 3 - 5 files changed, 34 insertions(+), 162 deletions(-) delete mode 100644 src/web/assets/craftcms/CraftCmsAsset.php delete mode 100644 src/web/assets/craftcms/src/CraftForm.js delete mode 100644 src/web/assets/craftcms/src/api.js delete mode 100644 src/web/assets/craftcms/src/craftcms.js diff --git a/src/templates/_special/async-csrf-input.twig b/src/templates/_special/async-csrf-input.twig index c5b457219e0..7fafa971610 100644 --- a/src/templates/_special/async-csrf-input.twig +++ b/src/templates/_special/async-csrf-input.twig @@ -1,19 +1,39 @@ diff --git a/src/web/assets/craftcms/CraftCmsAsset.php b/src/web/assets/craftcms/CraftCmsAsset.php deleted file mode 100644 index f53b8f0d4a3..00000000000 --- a/src/web/assets/craftcms/CraftCmsAsset.php +++ /dev/null @@ -1,30 +0,0 @@ - 'module'], - ]; - public $css = []; - - public function registerAssetFiles($view) - { - parent::registerAssetFiles($view); // TODO: Change the autogenerated stub - - $view = Craft::$app->getView(); - if ($view instanceof View) { - $view->registerJsImport('@craftcms/craftcms', $view->getAssetManager()->getAssetUrl($this, 'craftcms.js', false)); - } - } -} diff --git a/src/web/assets/craftcms/src/CraftForm.js b/src/web/assets/craftcms/src/CraftForm.js deleted file mode 100644 index 0716f4130e3..00000000000 --- a/src/web/assets/craftcms/src/CraftForm.js +++ /dev/null @@ -1,23 +0,0 @@ -import {createActionApi} from './api.js'; - -export default class CraftForm extends HTMLElement { - connectedCallback() { - this.form = this.querySelector('form'); - if (!this.form) { - console.error('craft-form must wrap a form element.'); - return; - } - - this.actionUrl = this.getAttribute('action-url') || this.actionUrl; - this.form.addEventListener('submit', this.handleSubmit); - } - disconnectedCallback() {} - - handleSubmit = async (e) => { - const target = e.target; - await sendActionRequest(this.actionUrl) - console.log(target); - } -} - -customElements.define('craft-form', CraftForm); diff --git a/src/web/assets/craftcms/src/api.js b/src/web/assets/craftcms/src/api.js deleted file mode 100644 index 9f0cd3d453e..00000000000 --- a/src/web/assets/craftcms/src/api.js +++ /dev/null @@ -1,92 +0,0 @@ -const baseConfig = { - csrfTokenName: 'CRAFT_CSRF_TOKEN', -} - -export const sendActionRequest = async (url, data) => { - return null; -} - - -export function createActionApi({baseUrl = '/'}) { - const csrfTokenName = baseConfig.csrfTokenName; - let csrfTokenValue = null; - - const getCsrfToken = async () => { - const response = await fetch(`${normalizePath(baseUrl)}/users/session-info`, { - headers: { - 'Accept': 'application/json', - } - }) - - const data = await response.json(); - console.log('getCsrfToken', {data}); - return data; - } - - function normalizePath(path) { - let normalized = path; - if (path.startsWith('/')) { - normalized = normalized.substring(1); - } - - if (path.endsWith('/')) { - normalized = normalized.substring(0, path.length - 1); - } - - return normalized; - } - - /** - * - * @param {string} url - * @param {RequestInit} requestInit - * @returns {Promise} - */ - const sendActionRequest = async ( - path, - requestInit = {}, - options = {}, - ) => { - const config = { - csrfTokenName: 'CRAFT_CSRF_TOKEN', - ...options - } - const {body, headers, ...rest} = requestInit; - /** - * @type {RequestInit} - */ - const requestConfig = { - headers: { - ...headers, - 'X-Requested-With': 'XMLHttpRequest', - 'Accept': 'application/json', - }, - ...rest, - } - - if (!csrfTokenValue) { - const csrfData = await getCsrfToken(); - csrfTokenValue = csrfData.csrfTokenValue; - } - - requestConfig.headers['X-CSRF-Token'] = csrfTokenValue; - - if (body) { - requestConfig.method = 'POST'; - } - - console.log({requestConfig}); - - const response = await fetch(`${normalizePath(baseUrl)}/${normalizePath(path)}`, requestConfig); - if (!response.ok) { - return null; - } - const json = await response.json(); - - console.log(json); - - return json; - }; - - return {sendActionRequest}; -} diff --git a/src/web/assets/craftcms/src/craftcms.js b/src/web/assets/craftcms/src/craftcms.js deleted file mode 100644 index d93cdc8fdf6..00000000000 --- a/src/web/assets/craftcms/src/craftcms.js +++ /dev/null @@ -1,3 +0,0 @@ -export {createActionApi} from './api.js'; -export {default as CraftForm} from './CraftForm.js'; - From 61c2f7394b8a40beb0e90a6763b9386ab546d05c Mon Sep 17 00:00:00 2001 From: Brian Hanson Date: Wed, 9 Apr 2025 16:03:39 -0500 Subject: [PATCH 3/3] Reset package-lock --- package-lock.json | 93 +++++++++++++++++++++-------------------------- 1 file changed, 42 insertions(+), 51 deletions(-) diff --git a/package-lock.json b/package-lock.json index c21a8e088d9..2d0d399c8fe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2586,9 +2586,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" }, "node_modules/@types/express": { "version": "4.17.21", @@ -9349,9 +9349,9 @@ "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==" }, "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "funding": [ { "type": "github", @@ -9882,9 +9882,9 @@ "optional": true }, "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -10055,9 +10055,9 @@ } }, "node_modules/postcss": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", - "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "funding": [ { "type": "opencollective", @@ -10073,9 +10073,9 @@ } ], "dependencies": { - "nanoid": "^3.3.8", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -11768,9 +11768,9 @@ } }, "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "engines": { "node": ">=0.10.0" } @@ -13172,9 +13172,9 @@ } }, "node_modules/typescript": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", - "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14475,15 +14475,6 @@ "version": "2.0.0", "license": "MIT" }, - "packages/craftcms-craftcms": { - "name": "@craftcms/craftcms", - "version": "1.0.0", - "extraneous": true, - "devDependencies": { - "typescript": "~5.7.2", - "vite": "^6.2.0" - } - }, "packages/craftcms-sass": { "name": "@craftcms/sass", "version": "1.1.0", @@ -16318,9 +16309,9 @@ } }, "@types/estree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" }, "@types/express": { "version": "4.17.21", @@ -21319,9 +21310,9 @@ "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==" }, "nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==" + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" }, "natural-compare": { "version": "1.4.0", @@ -21688,9 +21679,9 @@ "optional": true }, "picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" }, "picomatch": { "version": "2.3.1", @@ -21798,13 +21789,13 @@ "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" }, "postcss": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", - "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "requires": { - "nanoid": "^3.3.8", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" } }, "postcss-calc": { @@ -22944,9 +22935,9 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==" }, "source-map-support": { "version": "0.5.21", @@ -23944,9 +23935,9 @@ } }, "typescript": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", - "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==" + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==" }, "uc.micro": { "version": "1.0.6",