From bc8cd339474fa99d1cd8c6bc91a1b1048d98deb3 Mon Sep 17 00:00:00 2001 From: JackNoordhuis Date: Mon, 25 Sep 2023 18:58:23 +1000 Subject: [PATCH 1/3] examples/project/package-lock.json: npm update results --- examples/project/package-lock.json | 510 +++++++++++++++-------------- 1 file changed, 262 insertions(+), 248 deletions(-) diff --git a/examples/project/package-lock.json b/examples/project/package-lock.json index 1190e13..05cbd98 100644 --- a/examples/project/package-lock.json +++ b/examples/project/package-lock.json @@ -35,15 +35,16 @@ } }, "../..": { - "name": "@nxtlvlsoftware/alpine-typescript", "version": "0.0.4", "license": "MIT", "devDependencies": { "@types/alpinejs": "^3.0.0", - "alpinejs": "^3.0.0", "typedoc": "^0.25.1", "typedoc-plugin-extras": "^3.0.0", "typescript": "^5.2.2" + }, + "peerDependencies": { + "alpinejs": "^3.0.0" } }, "node_modules/@alloc/quick-lru": { @@ -95,9 +96,9 @@ } }, "node_modules/@csstools/cascade-layer-name-parser": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.4.tgz", - "integrity": "sha512-zXMGsJetbLoXe+gjEES07MEGjL0Uy3hMxmnGtVBrRpVKr5KV9OgCB09zr/vLrsEtoVQTgJFewxaU8IYSAE4tjg==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.5.tgz", + "integrity": "sha512-v/5ODKNBMfBl0us/WQjlfsvSlYxfZLhNMVIsuCPib2ulTwGKYbKJbwqw671+qH9Y4wvWVnu7LBChvml/wBKjFg==", "dev": true, "funding": [ { @@ -113,8 +114,8 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" } }, "node_modules/@csstools/color-helpers": { @@ -137,9 +138,9 @@ } }, "node_modules/@csstools/css-calc": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.1.3.tgz", - "integrity": "sha512-7mJZ8gGRtSQfQKBQFi5N0Z+jzNC0q8bIkwojP1W0w+APzEqHu5wJoGVsvKxVnVklu9F8tW1PikbBRseYnAdv+g==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.1.4.tgz", + "integrity": "sha512-ZV1TSmToiNcQL1P3hfzlzZzA02mmVkVmXGaUDUqpYUG84PmLhVSZpKX+KfxAuOcK7de04UXSQPBrAvaya6iiGg==", "dev": true, "funding": [ { @@ -155,14 +156,14 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" } }, "node_modules/@csstools/css-color-parser": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-1.3.1.tgz", - "integrity": "sha512-cehc/DQCyb4hL4fspvyL7WiY+uAy8Iuaz0yTyndC/AyBmxkNpgtSgCSsr0aR4vkaSFVZfNNVlKbjHFwOsPGB1Q==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-1.3.2.tgz", + "integrity": "sha512-YLCWI+nm18qr5nj7QhRMGuIi4ddFe0SKEtPQliLf1+pmyHFxoHYd0+Hg+bRnbnVbdyCTTlCqBiUvCeNJfd903g==", "dev": true, "funding": [ { @@ -176,20 +177,20 @@ ], "dependencies": { "@csstools/color-helpers": "^3.0.2", - "@csstools/css-calc": "^1.1.3" + "@csstools/css-calc": "^1.1.4" }, "engines": { "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" } }, "node_modules/@csstools/css-parser-algorithms": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.1.tgz", - "integrity": "sha512-xrvsmVUtefWMWQsGgFffqWSK03pZ1vfDki4IVIIUxxDKnGBzqNgv0A7SB1oXtVNEkcVO8xi1ZrTL29HhSu5kGA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.2.tgz", + "integrity": "sha512-sLYGdAdEY2x7TSw9FtmdaTrh2wFtRJO5VMbBrA8tEqEod7GEggFmxTSK9XqExib3yMuYNcvcTdCZIP6ukdjAIA==", "dev": true, "funding": [ { @@ -205,13 +206,13 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-tokenizer": "^2.2.1" } }, "node_modules/@csstools/css-tokenizer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.0.tgz", - "integrity": "sha512-wErmsWCbsmig8sQKkM6pFhr/oPha1bHfvxsUY5CYSQxwyhA9Ulrs8EqCgClhg4Tgg2XapVstGqSVcz0xOYizZA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.1.tgz", + "integrity": "sha512-Zmsf2f/CaEPWEVgw29odOj+WEVoiJy9s9NOv5GgNY9mZ1CZ7394By6wONrONrTsnNDv6F9hR02nvFihrGVGHBg==", "dev": true, "funding": [ { @@ -228,9 +229,9 @@ } }, "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.4.tgz", - "integrity": "sha512-V/OUXYX91tAC1CDsiY+HotIcJR+vPtzrX8pCplCpT++i8ThZZsq5F5dzZh/bDM3WUOjrvC1ljed1oSJxMfjqhw==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.5.tgz", + "integrity": "sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ==", "dev": true, "funding": [ { @@ -246,8 +247,8 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" } }, "node_modules/@csstools/postcss-cascade-layers": { @@ -277,9 +278,9 @@ } }, "node_modules/@csstools/postcss-color-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.3.tgz", - "integrity": "sha512-5oNUbO89SX7BuSB0ZiUxDaQt4R2K3A+RQZlxNHOvghZJO/UqgomLPII6JkgrywLQ0Y4JDzbyNuwr0OKo2v0RsQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.5.tgz", + "integrity": "sha512-q9E7oJwf1Z8nJqQbob9DmFxrte3RQc+pwV+5WlWw6Ei9XaObaNJlPAQ1HfOpcEg/fxrRf/Yf6fgO8Q01r7u17A==", "dev": true, "funding": [ { @@ -292,10 +293,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.3.1", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/postcss-progressive-custom-properties": "^3.0.0" + "@csstools/css-color-parser": "^1.3.2", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/postcss-progressive-custom-properties": "^3.0.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -305,9 +306,9 @@ } }, "node_modules/@csstools/postcss-color-mix-function": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.3.tgz", - "integrity": "sha512-q/fv8pdRR07GAJTvemXbQ02hwVGmVcOjBJj7+gnlGrAVwSzrPEsJc8zM/EzoqVJTZtm/DwG6TWu+VJIxVpyUBg==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.5.tgz", + "integrity": "sha512-0MDBTG0FPDjNlAYMImNjnQ9lrldiFRCmsBx4dZB1ikbFwt6aYJRWDjgXoZY+1CmQ6m1qPeBJO762i6AKwQDlQQ==", "dev": true, "funding": [ { @@ -320,10 +321,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.3.1", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/postcss-progressive-custom-properties": "^3.0.0" + "@csstools/css-color-parser": "^1.3.2", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/postcss-progressive-custom-properties": "^3.0.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -333,9 +334,9 @@ } }, "node_modules/@csstools/postcss-exponential-functions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.0.tgz", - "integrity": "sha512-FPndJ/7oGlML7/4EhLi902wGOukO0Nn37PjwOQGc0BhhjQPy3np3By4d3M8s9Cfmp9EHEKgUHRN2DQ5HLT/hTw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.1.tgz", + "integrity": "sha512-ZLK2iSK4DUxeypGce2PnQSdYugUqDTwxnhNiq1o6OyKMNYgYs4eKbvEhFG8JKr1sJWbeqBi5jRr0017l2EWVvg==", "dev": true, "funding": [ { @@ -348,9 +349,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.1.3", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-calc": "^1.1.4", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -385,9 +386,9 @@ } }, "node_modules/@csstools/postcss-gradients-interpolation-method": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.3.tgz", - "integrity": "sha512-dEK3WbajX538Zu3lPMtBPAO1pooR7zslJ1mDrWKQzlwQczls3fEz+tlRhd7KWMMlsoIwNGMIGq2W/GqEErDjkg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.5.tgz", + "integrity": "sha512-ABDOADpKrTvNb+cUBj9ciocCgFvE832eENKVuONca1u2bkFL4jM9430XFmi/GOgzt0agg5Q8FFJHXgYyKbgOFQ==", "dev": true, "funding": [ { @@ -400,10 +401,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.3.1", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/postcss-progressive-custom-properties": "^3.0.0" + "@csstools/css-color-parser": "^1.3.2", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/postcss-progressive-custom-properties": "^3.0.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -413,9 +414,9 @@ } }, "node_modules/@csstools/postcss-hwb-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.3.tgz", - "integrity": "sha512-2TqrRD8JzSwQCRKKNc9BFhSEmsz+mR3RtwSw5mQSGILC+LIYCVWeYwC33cI+saFWv0DGZ0NXLx5VSX2tdJyU6w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.4.tgz", + "integrity": "sha512-HxyOVYowL0wsz7BjlAyGu3ydPGliXHgVnXP4pOWFktkAaBvjks8S51NqMbR6AkBQHB9W4nt9KW2qB6Qt2PJ80A==", "dev": true, "funding": [ { @@ -428,9 +429,9 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.3.1", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-color-parser": "^1.3.2", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -440,9 +441,9 @@ } }, "node_modules/@csstools/postcss-ic-unit": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.0.tgz", - "integrity": "sha512-FH3+zfOfsgtX332IIkRDxiYLmgwyNk49tfltpC6dsZaO4RV2zWY6x9VMIC5cjvmjlDO7DIThpzqaqw2icT8RbQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.1.tgz", + "integrity": "sha512-OkKZV0XZQixChA6r68O9UfGNFv06cPVcuT+MjpzfEuoCfbNWCj+b0dhsmdz776giQ+DymPmFDlTD+QJEFPI7rw==", "dev": true, "funding": [ { @@ -455,7 +456,7 @@ } ], "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^3.0.0", + "@csstools/postcss-progressive-custom-properties": "^3.0.1", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -465,10 +466,32 @@ "postcss": "^8.4" } }, + "node_modules/@csstools/postcss-initial": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-1.0.0.tgz", + "integrity": "sha512-1l7iHHjIl5qmVeGItugr4ZOlCREDP71mNKqoEyxlosIoiu3Os1nPWMHpuCvDLCLiWI/ONTOg3nzJh7gwHOrqUA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.1.tgz", - "integrity": "sha512-KJGLbjjjg+mdNclLyCfsZaJS4xCaRaxKAnmWKpIp1FarEem3ZdoOxTlIELwvlE5BVg1t3QTmp0+DPSlLTTFMhA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.2.tgz", + "integrity": "sha512-LeAJozyZTY3c1SaHMbwF4p8Ego/2HHprYusmmdmUH7wP6lRF1w3s7IO2iNwQ6fHBrSOfkPUFaUtRUGZLBE23Eg==", "dev": true, "funding": [ { @@ -539,9 +562,9 @@ } }, "node_modules/@csstools/postcss-logical-viewport-units": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.1.tgz", - "integrity": "sha512-R5s19SscS7CHoxvdYNMu2Y3WDwG4JjdhsejqjunDB1GqfzhtHSvL7b5XxCkUWqm2KRl35hI6kJ4HEaCDd/3BXg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.3.tgz", + "integrity": "sha512-xeVxqND5rlQyqLGdH7rX34sIm/JbbQKxpKQP8oD1YQqUHHCLQR9NUS57WqJKajxKN6AcNAMWJhb5LUH5RfPcyA==", "dev": true, "funding": [ { @@ -554,7 +577,7 @@ } ], "dependencies": { - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-tokenizer": "^2.2.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -564,9 +587,9 @@ } }, "node_modules/@csstools/postcss-media-minmax": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.0.7.tgz", - "integrity": "sha512-5LGLdu8cJgRPmvkjUNqOPKIKeHbyQmoGKooB5Rh0mp5mLaNI9bl+IjFZ2keY0cztZYsriJsGf6Lu8R5XetuwoQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.0.tgz", + "integrity": "sha512-t5Li/DPC5QmW/6VFLfUvsw/4dNYYseWR0tOXDeJg/9EKUodBgNawz5tuk5vYKtNvoj+Q08odMuXcpS5YJj0AFA==", "dev": true, "funding": [ { @@ -579,10 +602,10 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.1.3", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/media-query-list-parser": "^2.1.4" + "@csstools/css-calc": "^1.1.4", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/media-query-list-parser": "^2.1.5" }, "engines": { "node": "^14 || ^16 || >=18" @@ -592,9 +615,9 @@ } }, "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.2.tgz", - "integrity": "sha512-kQJR6NvTRidsaRjCdHGjra2+fLoFiDQOm5B2aZrhmXqng/hweXjruboKzB326rxQO2L0m0T+gCKbZgyuncyhLg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.3.tgz", + "integrity": "sha512-IPL8AvnwMYW+cWtp+j8cW3MFN0RyXNT4hLOvs6Rf2N+NcbvXhSyKxZuE3W9Cv4KjaNoNoGx1d0UhT6tktq6tUw==", "dev": true, "funding": [ { @@ -607,9 +630,9 @@ } ], "dependencies": { - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/media-query-list-parser": "^2.1.4" + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/media-query-list-parser": "^2.1.5" }, "engines": { "node": "^14 || ^16 || >=18" @@ -644,9 +667,9 @@ } }, "node_modules/@csstools/postcss-normalize-display-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-3.0.0.tgz", - "integrity": "sha512-6Nw55PRXEKEVqn3bzA8gRRPYxr5tf5PssvcE5DRA/nAxKgKtgNZMCHCSd1uxTCWeyLnkf6h5tYRSB0P1Vh/K/A==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-3.0.1.tgz", + "integrity": "sha512-nUvRxI+ALJwkxZdPU4EDyuM380vP91sAGvI3jAOHs/sr3jfcCOzLkY6xKI1Mr526kZ3RivmMoYM/xq+XFyE/bw==", "dev": true, "funding": [ { @@ -669,9 +692,9 @@ } }, "node_modules/@csstools/postcss-oklab-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.3.tgz", - "integrity": "sha512-8Wdpmy8mvVyHsToJkrnNpwpAgqCPNpQMLNqkR62smbEuFcmRHEiDnb0OlkKjErzmiBMr7vjZAQ6e2lA9oVguQQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.5.tgz", + "integrity": "sha512-tFjYaBbAvoks5yvE9uA3b3xsqVKkZJ2sXwPMw1bxlv2ydrmdiojuoRAskRfvMbZQkzp47DzBP1V9GhDLOyFVYA==", "dev": true, "funding": [ { @@ -684,10 +707,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.3.1", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/postcss-progressive-custom-properties": "^3.0.0" + "@csstools/css-color-parser": "^1.3.2", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/postcss-progressive-custom-properties": "^3.0.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -697,9 +720,9 @@ } }, "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.0.0.tgz", - "integrity": "sha512-2/D3CCL9DN2xhuUTP8OKvKnaqJ1j4yZUxuGLsCUOQ16wnDAuMLKLkflOmZF5tsPh/02VPeXRmqIN+U595WAulw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.0.1.tgz", + "integrity": "sha512-yfdEk8o3CWPTusoInmGpOVCcMg1FikcKZyYB5ApULg9mES4FTGNuHK3MESscmm64yladcLNkPlz26O7tk3LMbA==", "dev": true, "funding": [ { @@ -722,9 +745,9 @@ } }, "node_modules/@csstools/postcss-relative-color-syntax": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.3.tgz", - "integrity": "sha512-9MOzad5i0fnkOI6qXzcznuyGhLYARBkR8wDsyqbANkZ20srHJZ6PAy44g5eNw3+B7yvslUK4hx9ehnbbI9x4rw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.5.tgz", + "integrity": "sha512-wK8IX6X2+kLKxTTTq5yd7mH2U+GPcTMTpP2rM8ig0/rgxuid7vgTOxup6heZUk1IUA409eak3bYGOtDDYCpxbQ==", "dev": true, "funding": [ { @@ -737,10 +760,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.3.1", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/postcss-progressive-custom-properties": "^3.0.0" + "@csstools/css-color-parser": "^1.3.2", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/postcss-progressive-custom-properties": "^3.0.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -775,9 +798,9 @@ } }, "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.1.tgz", - "integrity": "sha512-y1sykToXorFE+5cjtp//xAMWEAEple0kcZn2QhzEFIZDDNvGOCp5JvvmmPGsC3eDlj6yQp70l9uXZNLnimEYfA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.2.tgz", + "integrity": "sha512-I3wX44MZVv+tDuWfrd3BTvRB/YRIM2F5v1MBtTI89sxpFn47mNpTwpPYUOGPVCgKlRDfZSlxIUYhUQmqRQZZFQ==", "dev": true, "funding": [ { @@ -790,9 +813,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.1.3", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-calc": "^1.1.4", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -802,9 +825,9 @@ } }, "node_modules/@csstools/postcss-text-decoration-shorthand": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.2.tgz", - "integrity": "sha512-vO2onX7/TPU3LMrSvg+FhMxTujhU+LELP9zln7SiB5BJqZi+y/ZOJZRBHFvCfM9J1lnNkskMN96bP5g3yg7Jmw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.3.tgz", + "integrity": "sha512-d5J9m49HhqXRcw1S6vTZuviHi/iknUKGjBpChiNK1ARg9sSa3b8m5lsWz5Izs8ISORZdv2bZRwbw5Z2R6gQ9kQ==", "dev": true, "funding": [ { @@ -828,9 +851,9 @@ } }, "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.1.tgz", - "integrity": "sha512-hW+JPv0MPQfWC1KARgvJI6bisEUFAZWSvUNq/khGCupYV/h6Z9R2ZFz0Xc633LXBst0ezbXpy7NpnPurSx5Klw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.2.tgz", + "integrity": "sha512-AwzNhF4QOKaLOKvMljwwFkeYXwufhRO15G+kKohHkyoNOL75xWkN+W2Y9ik9tSeAyDv+cYNlYaF+o/a79WjVjg==", "dev": true, "funding": [ { @@ -843,9 +866,9 @@ } ], "dependencies": { - "@csstools/css-calc": "^1.1.3", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0" + "@csstools/css-calc": "^1.1.4", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -1020,9 +1043,9 @@ } }, "node_modules/@types/alpinejs": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@types/alpinejs/-/alpinejs-3.13.0.tgz", - "integrity": "sha512-OZ/hZD3DmrJJOylcLlgsJkLIKOrXhIaWWJF48Zu+V2VkSY2+yQ66uqVRjG0xzQKSAiGGdKTW4/bcqJujO0HKHw==", + "version": "3.13.2", + "resolved": "https://registry.npmjs.org/@types/alpinejs/-/alpinejs-3.13.2.tgz", + "integrity": "sha512-kRGGjngGMCw8H4BIDbaDLwuGNIsrzdvt54kKqLe6O8ZLTNW5swEMr6j2ByH/vUo46ajqf2Qbxh6fcxPDrfEU+Q==", "dev": true }, "node_modules/@types/body-parser": { @@ -1064,9 +1087,9 @@ } }, "node_modules/@types/eslint": { - "version": "8.44.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", - "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", + "version": "8.44.3", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.3.tgz", + "integrity": "sha512-iM/WfkwAhwmPff3wZuPLYiHX18HI24jU8k1ZSH7P8FHwxTjZ2P6CoX2wnF43oprR+YXJM6UUxATkNvyv/JHd+g==", "dev": true, "dependencies": { "@types/estree": "*", @@ -1074,9 +1097,9 @@ } }, "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "version": "3.7.5", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.5.tgz", + "integrity": "sha512-JNvhIEyxVW6EoMIFIvj93ZOywYFatlpu9deeH6eSx6PE3WHYvHaQtmHmQeNw7aA81bYGBPPQqdtBm6b1SsQMmA==", "dev": true, "dependencies": { "@types/eslint": "*", @@ -1084,15 +1107,15 @@ } }, "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz", + "integrity": "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==", "dev": true }, "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "version": "4.17.18", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.18.tgz", + "integrity": "sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ==", "dev": true, "dependencies": { "@types/body-parser": "*", @@ -1102,9 +1125,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.36", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.36.tgz", - "integrity": "sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q==", + "version": "4.17.37", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.37.tgz", + "integrity": "sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg==", "dev": true, "dependencies": { "@types/node": "*", @@ -1147,9 +1170,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.6.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.2.tgz", - "integrity": "sha512-Y+/1vGBHV/cYk6OI1Na/LHzwnlNCAfU3ZNGrc1LdRe/LAIbdDPTTv/HU3M7yXN448aTVDq3eKRm2cg7iKLb8gw==", + "version": "20.6.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.5.tgz", + "integrity": "sha512-2qGq5LAOTh9izcc0+F+dToFigBWiK1phKPt7rNhOqJSr35y8rlIBjDwGtFSgAI6MGIhjwOVNSQZVdJsZJ2uR1w==", "dev": true }, "node_modules/@types/qs": { @@ -1591,9 +1614,9 @@ "dev": true }, "node_modules/autoprefixer": { - "version": "10.4.15", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz", - "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==", + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", "dev": true, "funding": [ { @@ -1611,8 +1634,8 @@ ], "dependencies": { "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001520", - "fraction.js": "^4.2.0", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -1722,9 +1745,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.21.11", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.11.tgz", + "integrity": "sha512-xn1UXOKUz7DjdGlg9RrUr0GGiWzI97UQJnugHtH0OLDfJB7jMgoIkYvRIEO1l9EeEERVqeqLYOcFBW9ldjypbQ==", "dev": true, "funding": [ { @@ -1741,10 +1764,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", + "caniuse-lite": "^1.0.30001538", + "electron-to-chromium": "^1.4.526", "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -1822,9 +1845,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001534", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001534.tgz", - "integrity": "sha512-vlPVrhsCS7XaSh2VvWluIQEzVhefrUQcEsQWSS5A5V+dM07uv1qHeQzAOTGIMy9i3e9bH15+muvI/UHojVgS/Q==", + "version": "1.0.30001539", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001539.tgz", + "integrity": "sha512-hfS5tE8bnNiNvEOEkm8HElUHroYwlqMMENEzELymy77+tJ6m+gA2krtHl5hxJaj71OlpC2cHZbdSMX1/YEqEkA==", "dev": true, "funding": [ { @@ -2632,9 +2655,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.523", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.523.tgz", - "integrity": "sha512-9AreocSUWnzNtvLcbpng6N+GkXnCcBR80IQkxRC9Dfdyg4gaWNUPBujAHUpKkiUkoSoR9UlhA4zD/IgBklmhzg==", + "version": "1.4.528", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.528.tgz", + "integrity": "sha512-UdREXMXzLkREF4jA8t89FQjA8WHI6ssP38PMY4/4KhXFQbtImnghh4GkCgrtiZwLKUKVD2iTVXvDVQjfomEQuA==", "dev": true }, "node_modules/emoji-regex": { @@ -2977,9 +3000,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", "dev": true, "funding": [ { @@ -4457,9 +4480,9 @@ } }, "node_modules/postcss": { - "version": "8.4.29", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", - "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", + "version": "8.4.30", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.30.tgz", + "integrity": "sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==", "dev": true, "funding": [ { @@ -4576,9 +4599,9 @@ } }, "node_modules/postcss-color-functional-notation": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.0.tgz", - "integrity": "sha512-kaWTgnhRKFtfMF8H0+NQBFxgr5CGg05WGe07Mc1ld6XHwwRWlqSbHOW0zwf+BtkBQpsdVUu7+gl9dtdvhWMedw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.1.tgz", + "integrity": "sha512-IouVx77fASIjOChWxkvOjYGnYNKq286cSiKFJwWNICV9NP2xZWVOS9WOriR/8uIB2zt/44bzQyw4GteCLpP2SA==", "dev": true, "funding": [ { @@ -4591,7 +4614,7 @@ } ], "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^3.0.0", + "@csstools/postcss-progressive-custom-properties": "^3.0.1", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -4621,9 +4644,9 @@ } }, "node_modules/postcss-color-rebeccapurple": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-9.0.0.tgz", - "integrity": "sha512-RmUFL+foS05AKglkEoqfx+KFdKRVmqUAxlHNz4jLqIi7046drIPyerdl4B6j/RA2BSP8FI8gJcHmLRrwJOMnHw==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-9.0.1.tgz", + "integrity": "sha512-ds4cq5BjRieizVb2PnvbJ0omg9VCo2/KzluvoFZbxuGpsGJ5BQSD93CHBooinEtangCM5YqUOerGDl4xGmOb6Q==", "dev": true, "funding": [ { @@ -4680,9 +4703,9 @@ } }, "node_modules/postcss-custom-media": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.0.tgz", - "integrity": "sha512-NxDn7C6GJ7X8TsWOa8MbCdq9rLERRLcPfQSp856k1jzMreL8X9M6iWk35JjPRIb9IfRnVohmxAylDRx7n4Rv4g==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.1.tgz", + "integrity": "sha512-fil7cosvzlIAYmZJPtNFcTH0Er7a3GveEK4q5Y/L24eWQHmiw8Fv/E5DMkVpdbNjkGzJxrvowOSt/Il9HZ06VQ==", "dev": true, "funding": [ { @@ -4695,10 +4718,10 @@ } ], "dependencies": { - "@csstools/cascade-layer-name-parser": "^1.0.3", - "@csstools/css-parser-algorithms": "^2.3.0", - "@csstools/css-tokenizer": "^2.1.1", - "@csstools/media-query-list-parser": "^2.1.2" + "@csstools/cascade-layer-name-parser": "^1.0.4", + "@csstools/css-parser-algorithms": "^2.3.1", + "@csstools/css-tokenizer": "^2.2.0", + "@csstools/media-query-list-parser": "^2.1.4" }, "engines": { "node": "^14 || ^16 || >=18" @@ -4708,9 +4731,9 @@ } }, "node_modules/postcss-custom-properties": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.0.tgz", - "integrity": "sha512-q4VgtIKSy5+KcUvQ0WxTjDy9DZjQ5VCXAZ9+tT9+aPMbA0z6s2t1nMw0QHszru1ib5ElkXl9JUpYYU37VVUs7g==", + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.2.tgz", + "integrity": "sha512-2Coszybpo8lpLY24vy2CYv9AasiZ39/bs8Imv0pWMq55Gl8NWzfc24OAo3zIX7rc6uUJAqESnVOMZ6V6lpMjJA==", "dev": true, "funding": [ { @@ -4723,9 +4746,9 @@ } ], "dependencies": { - "@csstools/cascade-layer-name-parser": "^1.0.4", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", + "@csstools/cascade-layer-name-parser": "^1.0.5", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -4736,9 +4759,9 @@ } }, "node_modules/postcss-custom-selectors": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.4.tgz", - "integrity": "sha512-TU2xyUUBTlpiLnwyE2ZYMUIYB41MKMkBZ8X8ntkqRDQ8sdBLhFFsPgNcOliBd5+/zcK51C9hRnSE7hKUJMxQSw==", + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.5.tgz", + "integrity": "sha512-0UYtz7GG10bZrRiUdZ/2Flt+hp5p/WP0T7JgAPZ/Xhgb0wFjW/p7QOjE+M58S9Z3x11P9YaNPcrsoOGewWYkcw==", "dev": true, "funding": [ { @@ -4751,9 +4774,9 @@ } ], "dependencies": { - "@csstools/cascade-layer-name-parser": "^1.0.3", - "@csstools/css-parser-algorithms": "^2.3.0", - "@csstools/css-tokenizer": "^2.1.1", + "@csstools/cascade-layer-name-parser": "^1.0.4", + "@csstools/css-parser-algorithms": "^2.3.1", + "@csstools/css-tokenizer": "^2.2.0", "postcss-selector-parser": "^6.0.13" }, "engines": { @@ -4852,9 +4875,9 @@ } }, "node_modules/postcss-double-position-gradients": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.0.tgz", - "integrity": "sha512-wR8npIkrIVUTicUpCWSSo1f/g7gAEIH70FMqCugY4m4j6TX4E0T2Q5rhfO0gqv00biBZdLyb+HkW8x6as+iJNQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.1.tgz", + "integrity": "sha512-ogcHzfC5q4nfySyZyNF7crvK3/MRDTh+akzE+l7bgJUjVkhgfahBuI+ZAm/5EeaVSVKnCOgqtC6wTyUFgLVLTw==", "dev": true, "funding": [ { @@ -4867,7 +4890,7 @@ } ], "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^3.0.0", + "@csstools/postcss-progressive-custom-properties": "^3.0.1", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -4959,9 +4982,9 @@ } }, "node_modules/postcss-image-set-function": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-6.0.0.tgz", - "integrity": "sha512-bg58QnJexFpPBU4IGPAugAPKV0FuFtX5rHYNSKVaV91TpHN7iwyEzz1bkIPCiSU5+BUN00e+3fV5KFrwIgRocw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-6.0.1.tgz", + "integrity": "sha512-VlZncC9hhZ5tg0JllY4g6Z28BeoPO8DIkelioEEkXL0AA0IORlqYpTi2L8TUnl4YQrlwvBgxVy+mdZJw5R/cIQ==", "dev": true, "funding": [ { @@ -5000,15 +5023,6 @@ "postcss": "^8.0.0" } }, - "node_modules/postcss-initial": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", - "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", - "dev": true, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, "node_modules/postcss-js": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", @@ -5029,9 +5043,9 @@ } }, "node_modules/postcss-lab-function": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.3.tgz", - "integrity": "sha512-+0WxmblCb2Khfj9wpJQKd/9QhtHK/ImIqfnXX4HEoTDmjdtI6IUjXnC83bYX0CaHitpPjWnoQjoasW7qb1TCHw==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.5.tgz", + "integrity": "sha512-v1NG08v7tN9n76rA5j5HQ4sRu/kqXBuOFNAYhfHqbyDQ1WbsGKfPNN9VnJSSI3V0KIlShodYQPf3ORjMSo1w9g==", "dev": true, "funding": [ { @@ -5044,10 +5058,10 @@ } ], "dependencies": { - "@csstools/css-color-parser": "^1.3.1", - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/postcss-progressive-custom-properties": "^3.0.0" + "@csstools/css-color-parser": "^1.3.2", + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/postcss-progressive-custom-properties": "^3.0.1" }, "engines": { "node": "^14 || ^16 || >=18" @@ -5581,9 +5595,9 @@ } }, "node_modules/postcss-preset-env": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.1.3.tgz", - "integrity": "sha512-h8iPXykc4i/MDkbu8GuROt90mQJcj4//P49keGW+mcfs9xWeUZFotsT0m2YV9zpdCvSNJojOww1Os6BpVTpHbA==", + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.1.4.tgz", + "integrity": "sha512-k2scWtmYBZhjAzMJw8Fgc4hnfkZa4KpPjK0z6+tTAJ4/3ZAmaJJ1VBQ9T7OS0qvper8AyD+kqN2UB2tYFQ4eeA==", "dev": true, "funding": [ { @@ -5597,27 +5611,28 @@ ], "dependencies": { "@csstools/postcss-cascade-layers": "^4.0.0", - "@csstools/postcss-color-function": "^3.0.3", - "@csstools/postcss-color-mix-function": "^2.0.3", + "@csstools/postcss-color-function": "^3.0.4", + "@csstools/postcss-color-mix-function": "^2.0.4", "@csstools/postcss-exponential-functions": "^1.0.0", "@csstools/postcss-font-format-keywords": "^3.0.0", - "@csstools/postcss-gradients-interpolation-method": "^4.0.3", + "@csstools/postcss-gradients-interpolation-method": "^4.0.4", "@csstools/postcss-hwb-function": "^3.0.3", - "@csstools/postcss-ic-unit": "^3.0.0", - "@csstools/postcss-is-pseudo-class": "^4.0.1", + "@csstools/postcss-ic-unit": "^3.0.1", + "@csstools/postcss-initial": "^1.0.0", + "@csstools/postcss-is-pseudo-class": "^4.0.2", "@csstools/postcss-logical-float-and-clear": "^2.0.0", "@csstools/postcss-logical-resize": "^2.0.0", - "@csstools/postcss-logical-viewport-units": "^2.0.1", + "@csstools/postcss-logical-viewport-units": "^2.0.2", "@csstools/postcss-media-minmax": "^1.0.7", "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.2", "@csstools/postcss-nested-calc": "^3.0.0", - "@csstools/postcss-normalize-display-values": "^3.0.0", - "@csstools/postcss-oklab-function": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^3.0.0", - "@csstools/postcss-relative-color-syntax": "^2.0.3", + "@csstools/postcss-normalize-display-values": "^3.0.1", + "@csstools/postcss-oklab-function": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^3.0.1", + "@csstools/postcss-relative-color-syntax": "^2.0.4", "@csstools/postcss-scope-pseudo-class": "^3.0.0", "@csstools/postcss-stepped-value-functions": "^3.0.1", - "@csstools/postcss-text-decoration-shorthand": "^3.0.2", + "@csstools/postcss-text-decoration-shorthand": "^3.0.3", "@csstools/postcss-trigonometric-functions": "^3.0.1", "@csstools/postcss-unset-value": "^3.0.0", "autoprefixer": "^10.4.15", @@ -5625,24 +5640,23 @@ "css-blank-pseudo": "^6.0.0", "css-has-pseudo": "^6.0.0", "css-prefers-color-scheme": "^9.0.0", - "cssdb": "^7.7.1", + "cssdb": "^7.7.2", "postcss-attribute-case-insensitive": "^6.0.2", "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^6.0.0", + "postcss-color-functional-notation": "^6.0.1", "postcss-color-hex-alpha": "^9.0.2", - "postcss-color-rebeccapurple": "^9.0.0", - "postcss-custom-media": "^10.0.0", - "postcss-custom-properties": "^13.3.0", - "postcss-custom-selectors": "^7.1.4", + "postcss-color-rebeccapurple": "^9.0.1", + "postcss-custom-media": "^10.0.1", + "postcss-custom-properties": "^13.3.1", + "postcss-custom-selectors": "^7.1.5", "postcss-dir-pseudo-class": "^8.0.0", - "postcss-double-position-gradients": "^5.0.0", + "postcss-double-position-gradients": "^5.0.1", "postcss-focus-visible": "^9.0.0", "postcss-focus-within": "^8.0.0", "postcss-font-variant": "^5.0.0", "postcss-gap-properties": "^5.0.0", - "postcss-image-set-function": "^6.0.0", - "postcss-initial": "^4.0.1", - "postcss-lab-function": "^6.0.3", + "postcss-image-set-function": "^6.0.1", + "postcss-lab-function": "^6.0.4", "postcss-logical": "^7.0.0", "postcss-nesting": "^12.0.1", "postcss-opacity-percentage": "^2.0.0", @@ -6837,9 +6851,9 @@ } }, "node_modules/terser": { - "version": "5.19.4", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.4.tgz", - "integrity": "sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.20.0.tgz", + "integrity": "sha512-e56ETryaQDyebBwJIWYB2TT6f2EZ0fL0sW/JRXNMN26zZdKi2u/E/5my5lG6jNxym6qsrVXfFRmOdV42zlAgLQ==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -7143,9 +7157,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -7606,9 +7620,9 @@ "dev": true }, "node_modules/ws": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", - "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", "dev": true, "engines": { "node": ">=10.0.0" From 4cbfcfb3366c989927e11b7e8946289f0fa73bb9 Mon Sep 17 00:00:00 2001 From: JackNoordhuis Date: Mon, 25 Sep 2023 19:02:43 +1000 Subject: [PATCH 2/3] Publish Pages workflow: use package.json clean-install command and not npm ci * forgot the run >:) --- .github/workflows/pages-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pages-publish.yml b/.github/workflows/pages-publish.yml index 06e0777..a26ae1f 100644 --- a/.github/workflows/pages-publish.yml +++ b/.github/workflows/pages-publish.yml @@ -103,7 +103,7 @@ jobs: key: ${{ runner.os }}}-${{ env.NODE_VERSION }}-node_modules-${{ hashFiles('package.json') }} - name: Install dependencies - run: npm clean-install + run: npm run clean-install - name: Build example project run: npm run build-dist From c96d295365205053fa60313fa42ff8588c980880 Mon Sep 17 00:00:00 2001 From: JackNoordhuis Date: Mon, 25 Sep 2023 09:04:13 +0000 Subject: [PATCH 3/3] [create-pull-request] update tsc build dist files --- dist/Component.js | 41 +++++++ dist/Global.js | 29 +++++ dist/Plugin.js | 75 +++++++++++++ dist/Store.js | 201 +++++++++++++++++++++++++++++++++ dist/index.js | 13 +++ src/Component.ts | 161 --------------------------- src/Global.ts | 73 ------------ src/Plugin.ts | 109 ------------------ src/Store.ts | 256 ------------------------------------------- src/index.ts | 35 ------ types/Component.d.ts | 135 +++++++++++++++++++++++ types/Global.d.ts | 60 ++++++++++ types/Plugin.d.ts | 56 ++++++++++ types/Store.d.ts | 66 +++++++++++ types/index.d.ts | 12 ++ 15 files changed, 688 insertions(+), 634 deletions(-) create mode 100644 dist/Component.js create mode 100644 dist/Global.js create mode 100644 dist/Plugin.js create mode 100644 dist/Store.js create mode 100644 dist/index.js delete mode 100644 src/Component.ts delete mode 100644 src/Global.ts delete mode 100644 src/Plugin.ts delete mode 100644 src/Store.ts delete mode 100644 src/index.ts create mode 100644 types/Component.d.ts create mode 100644 types/Global.d.ts create mode 100644 types/Plugin.d.ts create mode 100644 types/Store.d.ts create mode 100644 types/index.d.ts diff --git a/dist/Component.js b/dist/Component.js new file mode 100644 index 0000000..d9eb78a --- /dev/null +++ b/dist/Component.js @@ -0,0 +1,41 @@ +/** + * Light-weight interface for class based components. + * + * Provides property declarations for Alpine magics that will exist when + * used as an Alpine component. + * + * Property declarations copied from @types/alpinejs. + * + * {@link https://www.npmjs.com/package/@types/alpinejs} + * + * @public + */ +var AlpineComponent = /** @class */ (function () { + function AlpineComponent() { + } + /** + * Declare an object as an x-bind property for this component. + * + * Use this method to define properties for use with x-bind: + * ```typescript + * protected myBinding = this.binding({ + * ["@click.prevent"]() { console.log("click prevented!") } + * }); + * ``` + * + * @protected + * + * @template HiddenKeys Define accessible properties (protected/private) + * that are not included by `keyof` + * + * @param obj The object for use with x-bind + * + * @return The same object passed to {@link obj} + */ + AlpineComponent.prototype.binding = function (obj) { + return obj; + }; + return AlpineComponent; +}()); +export { AlpineComponent }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0NvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFxRUE7Ozs7Ozs7Ozs7O0dBV0c7QUFDSDtJQUFBO0lBK0VBLENBQUM7SUF2QkE7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQWtCRztJQUNPLGlDQUFPLEdBQWpCLFVBQWtELEdBQXVEO1FBQ3hHLE9BQU8sR0FBRyxDQUFDO0lBQ1osQ0FBQztJQUVGLHNCQUFDO0FBQUQsQ0FBQyxBQS9FRCxJQStFQyJ9 \ No newline at end of file diff --git a/dist/Global.js b/dist/Global.js new file mode 100644 index 0000000..914352e --- /dev/null +++ b/dist/Global.js @@ -0,0 +1,29 @@ +/** + * Check if an {@link Alpine} object has the components properties. + * + * @public + * + * @param obj The Alpine object to check + * + * @return True if component properties are injected, false otherwise. + */ +export function satisfiesAlpineWithComponents(obj) { + // @ts-ignore + return !!(obj.Components && obj.component); +} +/** + * Cast an {@link Alpine} object to {@link AlpineWithComponents} if it + * has the injected properties. + * + * @public + * + * @param obj The Alpine object to cast + * + * @return The object cast to {@link AlpineWithComponents} if properties are + * injected, null otherwise. + */ +export function castToAlpineWithComponents(obj) { + if (obj === void 0) { obj = window.Alpine; } + return satisfiesAlpineWithComponents(obj) ? obj : null; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2xvYmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0dsb2JhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQkE7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsNkJBQTZCLENBQUMsR0FBVztJQUN4RCxhQUFhO0lBQ2IsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSwwQkFBMEIsQ0FBQyxHQUEyQjtJQUEzQixvQkFBQSxFQUFBLE1BQWMsTUFBTSxDQUFDLE1BQU07SUFDckUsT0FBTyw2QkFBNkIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQXVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzlFLENBQUMifQ== \ No newline at end of file diff --git a/dist/Plugin.js b/dist/Plugin.js new file mode 100644 index 0000000..48405e6 --- /dev/null +++ b/dist/Plugin.js @@ -0,0 +1,75 @@ +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +import { ComponentStore } from './Store'; +export var AlpineComponents; +(function (AlpineComponents) { + /** + * Default bootstrap options. + * + * Assumes production environment. + * + * @public + */ + AlpineComponents.defaultOptions = { + components: {}, + bootstrapAlpine: false, + startAlpine: true, + logErrors: false + }; + /** + * Bootstrap the components package. + * + * @public + * + * @param options Provided options (defaults applied to missing values {@link defaultOptions}.) + * @param alpine The Alpine instance to use (defaults to window.Alpine or creates Alpine when + * the bootstrapAlpine option is set) + */ + function bootstrap(options, alpine) { + if (options === void 0) { options = AlpineComponents.defaultOptions; } + if (alpine === void 0) { alpine = window.Alpine; } + var opts = __assign(__assign({}, AlpineComponents.defaultOptions), options); + if (opts.bootstrapAlpine && alpine !== undefined) { + if (opts.logErrors) { + console.error('Cannot bootstrap Alpine when window.Alpine is already defined.'); + } + return; + } + Promise.resolve(opts.bootstrapAlpine ? + import('alpinejs').then(function (imp) { return imp.default; }) : alpine).then(function (alpine) { + if (opts.bootstrapAlpine) { + window.Alpine = alpine; + } + window.AlpineComponents = new ComponentStore(alpine, opts.components, opts.logErrors); + if (opts.startAlpine) { + alpine.start(); + } + }); + } + AlpineComponents.bootstrap = bootstrap; +})(AlpineComponents || (AlpineComponents = {})); +/** + * Export a function to be used with `Alpine.plugin()`. + * + * @public + * + * Calls {@link AlpineComponents.bootstrap} with sensible options. + * + * @param alpine + */ +export function componentsPlugin(alpine) { + AlpineComponents.bootstrap({ + bootstrapAlpine: false, + startAlpine: false + }, alpine); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUVBLE9BQU8sRUFFTixjQUFjLEVBQ2QsTUFBTSxTQUFTLENBQUM7QUFFakIsTUFBTSxLQUFXLGdCQUFnQixDQXFGaEM7QUFyRkQsV0FBaUIsZ0JBQWdCO0lBNEJoQzs7Ozs7O09BTUc7SUFDVSwrQkFBYyxHQUFZO1FBQ3RDLFVBQVUsRUFBRSxFQUFFO1FBRWQsZUFBZSxFQUFFLEtBQUs7UUFDdEIsV0FBVyxFQUFFLElBQUk7UUFFakIsU0FBUyxFQUFFLEtBQUs7S0FDaEIsQ0FBQztJQUVGOzs7Ozs7OztPQVFHO0lBQ0gsU0FBZ0IsU0FBUyxDQUN4QixPQUEwQyxFQUMxQyxNQUFxQztRQURyQyx3QkFBQSxFQUFBLFVBQTRCLCtCQUFjO1FBQzFDLHVCQUFBLEVBQUEsU0FBd0IsTUFBTSxDQUFDLE1BQU07UUFFckMsSUFBTSxJQUFJLHlCQUNOLGlCQUFBLGNBQWMsR0FDZCxPQUFPLENBQ1YsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQ2pELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFDO2FBQ2hGO1lBQ0QsT0FBTztTQUNQO1FBRUQsT0FBTyxDQUFDLE9BQU8sQ0FDZCxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDckIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLEdBQUcsSUFBSyxPQUFBLEdBQUcsQ0FBQyxPQUFPLEVBQVgsQ0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FDdkQsQ0FBQyxJQUFJLENBQUMsVUFBQyxNQUFxQjtZQUM1QixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ3pCLE1BQU0sQ0FBQyxNQUFNLEdBQWlDLE1BQU0sQ0FBQzthQUNyRDtZQUVELE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFdEYsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNyQixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDZjtRQUNGLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQTlCZSwwQkFBUyxZQThCeEIsQ0FBQTtBQUVGLENBQUMsRUFyRmdCLGdCQUFnQixLQUFoQixnQkFBZ0IsUUFxRmhDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsTUFBc0I7SUFDdEQsZ0JBQWdCLENBQUMsU0FBUyxDQUFDO1FBQzFCLGVBQWUsRUFBRSxLQUFLO1FBQ3RCLFdBQVcsRUFBRSxLQUFLO0tBQ2xCLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDWixDQUFDIn0= \ No newline at end of file diff --git a/dist/Store.js b/dist/Store.js new file mode 100644 index 0000000..7066f9a --- /dev/null +++ b/dist/Store.js @@ -0,0 +1,201 @@ +var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +}; +import { AlpineComponent } from './Component'; +/** + * @see https://www.w3schools.com/js/js_reserved.asp + * + * @internal + */ +var ReservedNames = ['abstract', 'arguments', 'await', 'boolean', 'break', 'byte', 'case', + 'catch', 'char', 'class', 'const', 'continue', 'debugger', 'default', 'delete', 'do', 'double', 'else', + 'enum', 'eval', 'export', 'extends', 'false', 'final', 'finally', 'float', 'for', 'function', 'goto', + 'if', 'implements', 'import', 'in', 'instanceof', 'int', 'interface', 'let', 'long', 'native', 'new', + 'null', 'package', 'private', 'protected', 'public', 'return', 'short', 'static', 'super', 'switch', + 'this', 'throw', 'throws', 'transient', 'true', 'try', 'typeof', 'var', 'void', 'volatile', 'while', + 'with', 'yield']; +/** + * Internal component registration failure reasons. + * + * @internal + */ +var RegisterComponentFailure; +(function (RegisterComponentFailure) { + RegisterComponentFailure[RegisterComponentFailure["GenericMustHaveFunctionAsSecond"] = 0] = "GenericMustHaveFunctionAsSecond"; + RegisterComponentFailure[RegisterComponentFailure["NameMustBeProvidedForComponentWithNoDefault"] = 1] = "NameMustBeProvidedForComponentWithNoDefault"; + RegisterComponentFailure[RegisterComponentFailure["UnknownArgumentTypes"] = 2] = "UnknownArgumentTypes"; + RegisterComponentFailure[RegisterComponentFailure["ReservedName"] = 3] = "ReservedName"; +})(RegisterComponentFailure || (RegisterComponentFailure = {})); +var ComponentStore = /** @class */ (function () { + function ComponentStore(alpinejs, components, logErrors) { + var _this = this; + if (components === void 0) { components = {}; } + if (logErrors === void 0) { logErrors = false; } + this.logErrors = logErrors; + this.initialized = false; + this.components = {}; + this.alpine = alpinejs; + this.alpine.Components = this; + this.alpine.component = this.component; + Object.entries(components).forEach(function (_a) { + var name = _a[0], component = _a[1]; + _this.register(name, component); + }); + window.addEventListener('alpine:init', function () { + _this.init(); + }); + } + ComponentStore.prototype.init = function () { + var _this = this; + if (this.initialized) { + return; + } + document.dispatchEvent(new CustomEvent('alpine-components:init')); + Object.entries(this.components) + .forEach(function (_a) { + var name = _a[0]; + return _this.registerConstructorAsAlpineData(name); + }); + this.initialized = true; + }; + /** + * Retrieve a registered component constructor. + * + * @param name The component name + * + * @return ComponentConstructor + * + * If registered, returns a callable that accepts the component constructor arguments + * and creates the component object. Returns undefined if not registered. + */ + ComponentStore.prototype.component = function (name) { + // @ts-ignore + return this.components[name]; + }; + ComponentStore.prototype.registerAll = function (components) { + var _this = this; + Object.entries(components) + .forEach(function (_a) { + var name = _a[0], component = _a[1]; + return _this.register(name, component); + }); + }; + ComponentStore.prototype.register = function ( + // @ts-expect-error TS3244 + nameOrComponentClass, constructorOrComponentName) { + if (constructorOrComponentName === void 0) { constructorOrComponentName = ''; } + var component; + if (typeof nameOrComponentClass === 'string') { // register generic object (normal alpine data) + if (typeof constructorOrComponentName === 'string') { + this.logRegisterFailure(RegisterComponentFailure.GenericMustHaveFunctionAsSecond); + return; + } + component = ComponentStore.getObjectData(nameOrComponentClass, constructorOrComponentName); + } + else if (typeof nameOrComponentClass === 'function') { // register class as component + component = ComponentStore.getClassData(nameOrComponentClass, constructorOrComponentName); + if (component.name === "") { + this.logRegisterFailure(RegisterComponentFailure.NameMustBeProvidedForComponentWithNoDefault); + } + } + else { + this.logRegisterFailure(RegisterComponentFailure.UnknownArgumentTypes); + return; + } + if (ReservedNames.includes(component.name)) { + this.logRegisterFailure(RegisterComponentFailure.ReservedName); + } + this.components[component.name] = component.constructor; + if (this.initialized) { + this.registerConstructorAsAlpineData(component.name); + } + }; + /** + * Register a component to Alpine through Alpine.data(). + * + * @param name The name of the component (must already be registered to the store.) + */ + ComponentStore.prototype.registerConstructorAsAlpineData = function (name) { + this.alpine.data(name, this.component(name)); + }; + ComponentStore.getObjectData = function (name, component) { + return { + name: name, + constructor: ((component.prototype instanceof AlpineComponent) ? + // @ts-ignore + makeAlpineConstructor(component) : component) + }; + }; + ComponentStore.getClassData = function (component, name) { + var resolvedName = (name !== undefined ? name : component.prototype.name); + return { + name: resolvedName, + constructor: makeAlpineConstructor(component) + }; + }; + ComponentStore.prototype.logRegisterFailure = function (reason) { + if (!this.logErrors) { + return; + } + switch (reason) { + case RegisterComponentFailure.GenericMustHaveFunctionAsSecond: + console.error("Second argument must be a constructor function for component."); + break; + case RegisterComponentFailure.NameMustBeProvidedForComponentWithNoDefault: + // should be impossible because we fall back to prototype name + console.error("Component name must be provided when class doesn't specify a default."); + break; + case RegisterComponentFailure.UnknownArgumentTypes: + console.error("Cannot register component with provided argument types. Check Typescript definitions for usage."); + break; + case RegisterComponentFailure.ReservedName: + console.error("Cannot register component with name matching a reserved keyword."); + break; + } + }; + return ComponentStore; +}()); +export { ComponentStore }; +/** + * Copy prototype functions and object properties to an empty object. + * + * @param instance The object to copy functions and properties from + */ +export function transformToAlpineData(instance) { + var methodNames = []; + for (var prototype = Object.getPrototypeOf(instance); prototype.constructor.name !== 'Object'; prototype = Object.getPrototypeOf(prototype)) { + Object.getOwnPropertyNames(prototype).forEach(function (name) { + if (methodNames.includes(name)) { + return; + } + methodNames.push(name); + }); + } + return __spreadArray(__spreadArray([], methodNames, true), Object.getOwnPropertyNames(instance) // properties + , true).reduce(function (obj, name) { + // @ts-ignore + obj[name] = instance[name]; + return obj; + }, {}); +} +/** + * Transform a class constructor into an alpine constructor function. + * + * @param component The class constructor + */ +export function makeAlpineConstructor(component) { + return function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return transformToAlpineData(new (component.bind.apply(component, __spreadArray([void 0], args, false)))()); + }; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBSUEsT0FBTyxFQUFDLGVBQWUsRUFBa0MsTUFBTSxhQUFhLENBQUM7QUFFN0U7Ozs7R0FJRztBQUNILElBQU0sYUFBYSxHQUFHLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTTtJQUMxRixPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTTtJQUN0RyxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTTtJQUNwRyxJQUFJLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSztJQUNwRyxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRyxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRO0lBQ3BHLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPO0lBQ25HLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztBQXFCbEI7Ozs7R0FJRztBQUNILElBQUssd0JBS0o7QUFMRCxXQUFLLHdCQUF3QjtJQUM1Qiw2SEFBK0IsQ0FBQTtJQUMv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 \ No newline at end of file diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 0000000..6cbf7c1 --- /dev/null +++ b/dist/index.js @@ -0,0 +1,13 @@ +/** + * Export functions and types. + */ +export { AlpineComponent } from './Component'; +export { ComponentStore, transformToAlpineData, makeAlpineConstructor } from './Store'; +export * as Globals from './Global'; +export { AlpineComponents, componentsPlugin } from './Plugin'; +/** + * Alpine plugin as default export. + */ +import { componentsPlugin } from './Plugin'; +export default componentsPlugin; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBUU4sZUFBZSxFQUNmLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sRUFFTixjQUFjLEVBQ2QscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixNQUFNLFNBQVMsQ0FBQztBQUVqQixPQUFPLEtBQUssT0FBTyxNQUFNLFVBQVUsQ0FBQztBQUVwQyxPQUFPLEVBQ04sZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixNQUFNLFVBQVUsQ0FBQztBQUdsQjs7R0FFRztBQUNILE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMxQyxlQUFlLGdCQUFnQixDQUFDIn0= \ No newline at end of file diff --git a/src/Component.ts b/src/Component.ts deleted file mode 100644 index fab0602..0000000 --- a/src/Component.ts +++ /dev/null @@ -1,161 +0,0 @@ -/** - * Type definition for known class constructors. - * - * @public - */ -export type KnownClassConstructor = new (...args: any[]) => T; -/** - * Type definition for known generic constructors. - * - * @public - */ -export type KnownGenericConstructor = (...args: any[]) => T; -/** - * Type definition for supported constructor functions. - * - * @public - */ -export type KnownConstructor = KnownGenericConstructor| - // @ts-expect-error TS2344 - KnownClassConstructor; - -/** - * Type definition for alpine component constructors. - * - * @public - */ -export type AlpineComponentConstructor = (...args: any[]) => any; - -/** - * Copied from @types/alpinejs because it isn't exported. - * - * {@link https://www.npmjs.com/package/@types/alpinejs} - * - * @public - */ -export declare interface AlpineDataContext { - /** - * Will be executed before Alpine initializes teh rest of the component. - */ - init?(): void; - [stateKey: string]: any; -} - -/** - * Copied from @types/alpinejs because it isn't exported. - * - * {@link https://www.npmjs.com/package/@types/alpinejs} - * - * @public - */ -export declare type AlpineData = AlpineDataContext | string | number | boolean; - -/** - * Type used to define properties that will exist on an x-bind object at runtime. - * - * @template T The component type - * @template Keys The properties to expose to the context (defaults to everything - * accessible with `keyof`) - * @template HiddenKeys Define accessible properties (protected/private) that are - * not included by `keyof` - */ -export type AlpineBindingContext< - T extends AlpineComponent, - Keys extends keyof T = keyof T, - HiddenKeys extends string = '' -> = Record | (Pick & { - [K in HiddenKeys]: string | number | boolean; -}); - -/** - * Light-weight interface for class based components. - * - * Provides property declarations for Alpine magics that will exist when - * used as an Alpine component. - * - * Property declarations copied from @types/alpinejs. - * - * {@link https://www.npmjs.com/package/@types/alpinejs} - * - * @public - */ -export abstract class AlpineComponent implements AlpineDataContext { - - /** - * Access to current Alpine data. - */ - declare $data: this; - - /** - * Retrieve the current DOM node. - */ - declare $el: HTMLElement; - - /** - * Retrieve DOM elements marked with x-ref inside the component. - */ - declare $refs: Record; - - /** - * Access registered global Alpine stores. - */ - declare $store: AlpineData; - - /** - * Dispatch browser events. - * - * @param event the event name - * @param data an event-dependent value associated with the event, the value is then available to the handler using the CustomEvent.detail property - */ - declare $dispatch: (event: string, data?: any) => void; - - /** - * Generate an element's ID and ensure that it won't conflict with other IDs of the same name on the same page. - * - * @param name the name of the id - * @param key suffix on the end of the generated ID, usually helpful for the purpose of identifying id in a loop - */ - declare $id: (name: string, key?: number | string) => string; - - /** - * Execute a given expression AFTER Alpine has made its reactive DOM updates. - * - * @param callback a callback that will be fired after Alpine finishes updating the DOM - */ - declare $nextTick: (callback?: () => void) => Promise; - - /** - * Fire the given callback when the value in the property is changed. - * - * @param property the component property - * @param callback a callback that will fire when a given property is changed - */ - declare $watch: ( - property: K, - callback: (newValue: V, oldValue: V) => void, - ) => void; - - /** - * Declare an object as an x-bind property for this component. - * - * Use this method to define properties for use with x-bind: - * ```typescript - * protected myBinding = this.binding({ - * ["@click.prevent"]() { console.log("click prevented!") } - * }); - * ``` - * - * @protected - * - * @template HiddenKeys Define accessible properties (protected/private) - * that are not included by `keyof` - * - * @param obj The object for use with x-bind - * - * @return The same object passed to {@link obj} - */ - protected binding(obj: AlpineBindingContext) { - return obj; - } - -} diff --git a/src/Global.ts b/src/Global.ts deleted file mode 100644 index 0b6c4bf..0000000 --- a/src/Global.ts +++ /dev/null @@ -1,73 +0,0 @@ -/** - * Type declarations for Alpine and browser window global. - */ -import type {Alpine as AlpineType} from 'alpinejs'; -import type {ComponentStore} from './Store'; -import type {AlpineComponentConstructor} from './Component'; - -/** - * Define the properties we add to the `window.Alpine` object. - * - * @public - */ -export declare interface AlpineComponentMixins { - Components: ComponentStore; - component: (name: string) => AlpineComponentConstructor; -} - -/** - * Expose the properties we add to the `window.Alpine` object. - * - * @public - */ -export declare type AlpineWithComponents = AlpineType&AlpineComponentMixins; - -/** - * Expose the properties we add to the `window.Alpine` object. - * - * @public - */ -export declare type Alpine = AlpineType|AlpineWithComponents; - -/** - * Check if an {@link Alpine} object has the components properties. - * - * @public - * - * @param obj The Alpine object to check - * - * @return True if component properties are injected, false otherwise. - */ -export function satisfiesAlpineWithComponents(obj: Alpine): boolean { - // @ts-ignore - return !!(obj.Components && obj.component); -} - -/** - * Cast an {@link Alpine} object to {@link AlpineWithComponents} if it - * has the injected properties. - * - * @public - * - * @param obj The Alpine object to cast - * - * @return The object cast to {@link AlpineWithComponents} if properties are - * injected, null otherwise. - */ -export function castToAlpineWithComponents(obj: Alpine = window.Alpine): AlpineWithComponents|null { - return satisfiesAlpineWithComponents(obj) ? obj : null; -} - -declare global { - - /** - * Expose window.Alpine and window.AlpineComponents globals. - * - * @public - */ - interface Window { - Alpine: AlpineWithComponents; - AlpineComponents: ComponentStore; - } - -} diff --git a/src/Plugin.ts b/src/Plugin.ts deleted file mode 100644 index 6bc6947..0000000 --- a/src/Plugin.ts +++ /dev/null @@ -1,109 +0,0 @@ -import type Alpine from 'alpinejs'; -import type * as Globals from './Global'; -import { - type ComponentList, - ComponentStore -} from './Store'; - -export namespace AlpineComponents { - - /** - * Bootstrap options. - * - * @public - */ - export interface Options { - /** - * List of named components to register. - */ - components: ComponentList, - - /** - * Create Alpine object and inject into window.Alpine? - */ - bootstrapAlpine: boolean; - /** - * Call Alpine.start()? - */ - startAlpine: boolean; - - /** - * Log errors to console? - */ - logErrors: boolean; - } - - /** - * Default bootstrap options. - * - * Assumes production environment. - * - * @public - */ - export const defaultOptions: Options = { - components: {}, - - bootstrapAlpine: false, - startAlpine: true, - - logErrors: false - }; - - /** - * Bootstrap the components package. - * - * @public - * - * @param options Provided options (defaults applied to missing values {@link defaultOptions}.) - * @param alpine The Alpine instance to use (defaults to window.Alpine or creates Alpine when - * the bootstrapAlpine option is set) - */ - export function bootstrap( - options: Partial = defaultOptions, - alpine: typeof Alpine = window.Alpine - ): void { - const opts: Options = { - ...defaultOptions, - ...options - }; - - if (opts.bootstrapAlpine && alpine !== undefined) { - if (opts.logErrors) { - console.error('Cannot bootstrap Alpine when window.Alpine is already defined.'); - } - return; - } - - Promise.resolve( - opts.bootstrapAlpine ? - import('alpinejs').then((imp) => imp.default) : alpine - ).then((alpine: typeof Alpine): void => { - if (opts.bootstrapAlpine) { - window.Alpine = alpine; - } - - window.AlpineComponents = new ComponentStore(alpine, opts.components, opts.logErrors); - - if (opts.startAlpine) { - alpine.start(); - } - }); - } - -} - -/** - * Export a function to be used with `Alpine.plugin()`. - * - * @public - * - * Calls {@link AlpineComponents.bootstrap} with sensible options. - * - * @param alpine - */ -export function componentsPlugin(alpine: Globals.Alpine) { - AlpineComponents.bootstrap({ - bootstrapAlpine: false, - startAlpine: false - }, alpine); -} diff --git a/src/Store.ts b/src/Store.ts deleted file mode 100644 index 7e62333..0000000 --- a/src/Store.ts +++ /dev/null @@ -1,256 +0,0 @@ -import type Alpine from 'alpinejs'; -import type * as Impl from './Component'; -import type * as Globals from './Global'; - -import {AlpineComponent, type AlpineComponentConstructor} from './Component'; - -/** - * @see https://www.w3schools.com/js/js_reserved.asp - * - * @internal - */ -const ReservedNames = ['abstract', 'arguments', 'await', 'boolean', 'break', 'byte', 'case', - 'catch', 'char', 'class', 'const', 'continue', 'debugger', 'default', 'delete', 'do', 'double', 'else', - 'enum', 'eval', 'export', 'extends', 'false', 'final', 'finally', 'float', 'for', 'function', 'goto', - 'if', 'implements', 'import', 'in', 'instanceof', 'int', 'interface', 'let', 'long', 'native', 'new', - 'null', 'package', 'private', 'protected', 'public', 'return', 'short', 'static', 'super', 'switch', - 'this', 'throw', 'throws', 'transient', 'true', 'try', 'typeof', 'var', 'void', 'volatile', 'while', - 'with', 'yield']; - -/** - * Type definition for list of named component constructors. - * - * @public - */ -export type ComponentList = { - [name: string]: Impl.KnownConstructor -}; - -/** - * Internal type for component registration. - * - * @internal - */ -type ComponentConstructorData = { - name: string, - constructor: Impl.AlpineComponentConstructor -}; - -/** - * Internal component registration failure reasons. - * - * @internal - */ -enum RegisterComponentFailure { - GenericMustHaveFunctionAsSecond, - NameMustBeProvidedForComponentWithNoDefault, - UnknownArgumentTypes, - ReservedName -} - -export class ComponentStore { - private initialized: boolean = false; - - private alpine: Globals.AlpineWithComponents; - - private components: Record = {}; - - constructor( - alpinejs: typeof Alpine, - components: ComponentList = {}, - private readonly logErrors: boolean = false - ) { - this.alpine = alpinejs; - this.alpine.Components = this; - this.alpine.component = this.component; - - Object.entries(components).forEach(([name, component]): void => { - this.register(name, component); - }); - - window.addEventListener('alpine:init', (): void => { - this.init(); - }); - } - - private init(): void { - if (this.initialized) { - return; - } - - document.dispatchEvent(new CustomEvent('alpine-components:init')); - - Object.entries(this.components) - .forEach(([name]) => - this.registerConstructorAsAlpineData(name)); - - this.initialized = true; - } - - /** - * Retrieve a registered component constructor. - * - * @param name The component name - * - * @return ComponentConstructor - * - * If registered, returns a callable that accepts the component constructor arguments - * and creates the component object. Returns undefined if not registered. - */ - component(name: string): Impl.AlpineComponentConstructor { - // @ts-ignore - return this.components[name]; - } - - registerAll(components: ComponentList): void { - Object.entries(components) - .forEach(([name, component]) => - this.register(name, component)); - } - - /** - * Register a generic object (alpine data) as a component. - * - * @param name The name of the component (registered to alpine for use with x-data.) - * @param component The function that returns component data. - */ - register(name: string, component: Impl.KnownConstructor): void; - - /** - * Register a class inheriting from {@link Impl.AlpineComponent} as a component. - * - * @param component The name/symbol of the class to register as a component. - * @param name The name of the component (registered to alpine for use with x-data.) - */ - register(component: Impl.KnownClassConstructor, name?: string): void; - - register( - // @ts-expect-error TS3244 - nameOrComponentClass: string|Impl.KnownConstructor|Impl.KnownClassConstructor, - constructorOrComponentName: Impl.KnownConstructor|string = '' - ): void { - let component: ComponentConstructorData; - - if (typeof nameOrComponentClass === 'string') { // register generic object (normal alpine data) - if (typeof constructorOrComponentName === 'string') { - this.logRegisterFailure(RegisterComponentFailure.GenericMustHaveFunctionAsSecond); - return; - } - component = ComponentStore.getObjectData(nameOrComponentClass, constructorOrComponentName); - } else if (typeof nameOrComponentClass === 'function') { // register class as component - component = ComponentStore.getClassData(>nameOrComponentClass, constructorOrComponentName); - if (component.name === "") { - this.logRegisterFailure(RegisterComponentFailure.NameMustBeProvidedForComponentWithNoDefault); - } - } else { - this.logRegisterFailure(RegisterComponentFailure.UnknownArgumentTypes); - return; - } - - if (ReservedNames.includes(component.name)) { - this.logRegisterFailure(RegisterComponentFailure.ReservedName); - } - - this.components[component.name] = component.constructor; - - if (this.initialized) { - this.registerConstructorAsAlpineData(component.name); - } - } - - /** - * Register a component to Alpine through Alpine.data(). - * - * @param name The name of the component (must already be registered to the store.) - */ - private registerConstructorAsAlpineData(name: string): void { - this.alpine.data(name, this.component(name)); - } - - private static getObjectData( - name: string, - component: Impl.KnownConstructor - ): ComponentConstructorData { - return { - name: name, - constructor: ((component.prototype instanceof AlpineComponent) ? - // @ts-ignore - makeAlpineConstructor(component) : component) - }; - } - - private static getClassData( - component: Impl.KnownClassConstructor, - name?: string - ): ComponentConstructorData { - const resolvedName: string = (name !== undefined ? name : component.prototype.name); - - return { - name: resolvedName, - constructor: makeAlpineConstructor(component) - }; - } - - private logRegisterFailure(reason: RegisterComponentFailure): void { - if (!this.logErrors) { - return; - } - - switch (reason) { - case RegisterComponentFailure.GenericMustHaveFunctionAsSecond: - console.error(`Second argument must be a constructor function for component.`); - break; - case RegisterComponentFailure.NameMustBeProvidedForComponentWithNoDefault: - // should be impossible because we fall back to prototype name - console.error(`Component name must be provided when class doesn't specify a default.`); - break; - case RegisterComponentFailure.UnknownArgumentTypes: - console.error(`Cannot register component with provided argument types. Check Typescript definitions for usage.`); - break; - case RegisterComponentFailure.ReservedName: - console.error(`Cannot register component with name matching a reserved keyword.`); - break; - } - } - -} - -/** - * Copy prototype functions and object properties to an empty object. - * - * @param instance The object to copy functions and properties from - */ -export function transformToAlpineData(instance: T): object { - let methodNames: string[] = []; - for ( - let prototype = Object.getPrototypeOf(instance); - prototype.constructor.name !== 'Object'; - prototype = Object.getPrototypeOf(prototype) - ) { - Object.getOwnPropertyNames(prototype).forEach((name: string): void => { - if (methodNames.includes(name)) { - return; - } - methodNames.push(name); - }); - } - - return [ - ...methodNames, // methods - ...Object.getOwnPropertyNames(instance) // properties - ].reduce((obj: {}, name: string) => { - // @ts-ignore - obj[name] = instance[name]; - - return obj; - }, {}); -} - -/** - * Transform a class constructor into an alpine constructor function. - * - * @param component The class constructor - */ -export function makeAlpineConstructor(component: Impl.KnownClassConstructor): Impl.AlpineComponentConstructor { - return (...args: any[]) => transformToAlpineData(new component(...args)); -} diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index ca546e5..0000000 --- a/src/index.ts +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Export functions and types. - */ - -export { - type AlpineBindingContext, - type AlpineComponentConstructor, - type AlpineData, - type AlpineDataContext, - type KnownConstructor, - type KnownClassConstructor, - type KnownGenericConstructor, - AlpineComponent -} from './Component'; - -export { - type ComponentList, - ComponentStore, - transformToAlpineData, - makeAlpineConstructor -} from './Store'; - -export * as Globals from './Global'; - -export { - AlpineComponents, - componentsPlugin -} from './Plugin'; - - -/** - * Alpine plugin as default export. - */ -import {componentsPlugin} from './Plugin'; -export default componentsPlugin; diff --git a/types/Component.d.ts b/types/Component.d.ts new file mode 100644 index 0000000..8f6ce9d --- /dev/null +++ b/types/Component.d.ts @@ -0,0 +1,135 @@ +/** + * Type definition for known class constructors. + * + * @public + */ +export type KnownClassConstructor = new (...args: any[]) => T; +/** + * Type definition for known generic constructors. + * + * @public + */ +export type KnownGenericConstructor = (...args: any[]) => T; +/** + * Type definition for supported constructor functions. + * + * @public + */ +export type KnownConstructor = KnownGenericConstructor | KnownClassConstructor; +/** + * Type definition for alpine component constructors. + * + * @public + */ +export type AlpineComponentConstructor = (...args: any[]) => any; +/** + * Copied from @types/alpinejs because it isn't exported. + * + * {@link https://www.npmjs.com/package/@types/alpinejs} + * + * @public + */ +export declare interface AlpineDataContext { + /** + * Will be executed before Alpine initializes teh rest of the component. + */ + init?(): void; + [stateKey: string]: any; +} +/** + * Copied from @types/alpinejs because it isn't exported. + * + * {@link https://www.npmjs.com/package/@types/alpinejs} + * + * @public + */ +export declare type AlpineData = AlpineDataContext | string | number | boolean; +/** + * Type used to define properties that will exist on an x-bind object at runtime. + * + * @template T The component type + * @template Keys The properties to expose to the context (defaults to everything + * accessible with `keyof`) + * @template HiddenKeys Define accessible properties (protected/private) that are + * not included by `keyof` + */ +export type AlpineBindingContext = Record | (Pick & { + [K in HiddenKeys]: string | number | boolean; +}); +/** + * Light-weight interface for class based components. + * + * Provides property declarations for Alpine magics that will exist when + * used as an Alpine component. + * + * Property declarations copied from @types/alpinejs. + * + * {@link https://www.npmjs.com/package/@types/alpinejs} + * + * @public + */ +export declare abstract class AlpineComponent implements AlpineDataContext { + /** + * Access to current Alpine data. + */ + $data: this; + /** + * Retrieve the current DOM node. + */ + $el: HTMLElement; + /** + * Retrieve DOM elements marked with x-ref inside the component. + */ + $refs: Record; + /** + * Access registered global Alpine stores. + */ + $store: AlpineData; + /** + * Dispatch browser events. + * + * @param event the event name + * @param data an event-dependent value associated with the event, the value is then available to the handler using the CustomEvent.detail property + */ + $dispatch: (event: string, data?: any) => void; + /** + * Generate an element's ID and ensure that it won't conflict with other IDs of the same name on the same page. + * + * @param name the name of the id + * @param key suffix on the end of the generated ID, usually helpful for the purpose of identifying id in a loop + */ + $id: (name: string, key?: number | string) => string; + /** + * Execute a given expression AFTER Alpine has made its reactive DOM updates. + * + * @param callback a callback that will be fired after Alpine finishes updating the DOM + */ + $nextTick: (callback?: () => void) => Promise; + /** + * Fire the given callback when the value in the property is changed. + * + * @param property the component property + * @param callback a callback that will fire when a given property is changed + */ + $watch: (property: K, callback: (newValue: V, oldValue: V) => void) => void; + /** + * Declare an object as an x-bind property for this component. + * + * Use this method to define properties for use with x-bind: + * ```typescript + * protected myBinding = this.binding({ + * ["@click.prevent"]() { console.log("click prevented!") } + * }); + * ``` + * + * @protected + * + * @template HiddenKeys Define accessible properties (protected/private) + * that are not included by `keyof` + * + * @param obj The object for use with x-bind + * + * @return The same object passed to {@link obj} + */ + protected binding(obj: AlpineBindingContext): AlpineBindingContext; +} diff --git a/types/Global.d.ts b/types/Global.d.ts new file mode 100644 index 0000000..973da58 --- /dev/null +++ b/types/Global.d.ts @@ -0,0 +1,60 @@ +/** + * Type declarations for Alpine and browser window global. + */ +import type { Alpine as AlpineType } from 'alpinejs'; +import type { ComponentStore } from './Store'; +import type { AlpineComponentConstructor } from './Component'; +/** + * Define the properties we add to the `window.Alpine` object. + * + * @public + */ +export declare interface AlpineComponentMixins { + Components: ComponentStore; + component: (name: string) => AlpineComponentConstructor; +} +/** + * Expose the properties we add to the `window.Alpine` object. + * + * @public + */ +export declare type AlpineWithComponents = AlpineType & AlpineComponentMixins; +/** + * Expose the properties we add to the `window.Alpine` object. + * + * @public + */ +export declare type Alpine = AlpineType | AlpineWithComponents; +/** + * Check if an {@link Alpine} object has the components properties. + * + * @public + * + * @param obj The Alpine object to check + * + * @return True if component properties are injected, false otherwise. + */ +export declare function satisfiesAlpineWithComponents(obj: Alpine): boolean; +/** + * Cast an {@link Alpine} object to {@link AlpineWithComponents} if it + * has the injected properties. + * + * @public + * + * @param obj The Alpine object to cast + * + * @return The object cast to {@link AlpineWithComponents} if properties are + * injected, null otherwise. + */ +export declare function castToAlpineWithComponents(obj?: Alpine): AlpineWithComponents | null; +declare global { + /** + * Expose window.Alpine and window.AlpineComponents globals. + * + * @public + */ + interface Window { + Alpine: AlpineWithComponents; + AlpineComponents: ComponentStore; + } +} diff --git a/types/Plugin.d.ts b/types/Plugin.d.ts new file mode 100644 index 0000000..0a83d57 --- /dev/null +++ b/types/Plugin.d.ts @@ -0,0 +1,56 @@ +import type Alpine from 'alpinejs'; +import type * as Globals from './Global'; +import { type ComponentList } from './Store'; +export declare namespace AlpineComponents { + /** + * Bootstrap options. + * + * @public + */ + interface Options { + /** + * List of named components to register. + */ + components: ComponentList; + /** + * Create Alpine object and inject into window.Alpine? + */ + bootstrapAlpine: boolean; + /** + * Call Alpine.start()? + */ + startAlpine: boolean; + /** + * Log errors to console? + */ + logErrors: boolean; + } + /** + * Default bootstrap options. + * + * Assumes production environment. + * + * @public + */ + const defaultOptions: Options; + /** + * Bootstrap the components package. + * + * @public + * + * @param options Provided options (defaults applied to missing values {@link defaultOptions}.) + * @param alpine The Alpine instance to use (defaults to window.Alpine or creates Alpine when + * the bootstrapAlpine option is set) + */ + function bootstrap(options?: Partial, alpine?: typeof Alpine): void; +} +/** + * Export a function to be used with `Alpine.plugin()`. + * + * @public + * + * Calls {@link AlpineComponents.bootstrap} with sensible options. + * + * @param alpine + */ +export declare function componentsPlugin(alpine: Globals.Alpine): void; diff --git a/types/Store.d.ts b/types/Store.d.ts new file mode 100644 index 0000000..695e678 --- /dev/null +++ b/types/Store.d.ts @@ -0,0 +1,66 @@ +import type Alpine from 'alpinejs'; +import type * as Impl from './Component'; +import { AlpineComponent } from './Component'; +/** + * Type definition for list of named component constructors. + * + * @public + */ +export type ComponentList = { + [name: string]: Impl.KnownConstructor; +}; +export declare class ComponentStore { + private readonly logErrors; + private initialized; + private alpine; + private components; + constructor(alpinejs: typeof Alpine, components?: ComponentList, logErrors?: boolean); + private init; + /** + * Retrieve a registered component constructor. + * + * @param name The component name + * + * @return ComponentConstructor + * + * If registered, returns a callable that accepts the component constructor arguments + * and creates the component object. Returns undefined if not registered. + */ + component(name: string): Impl.AlpineComponentConstructor; + registerAll(components: ComponentList): void; + /** + * Register a generic object (alpine data) as a component. + * + * @param name The name of the component (registered to alpine for use with x-data.) + * @param component The function that returns component data. + */ + register(name: string, component: Impl.KnownConstructor): void; + /** + * Register a class inheriting from {@link Impl.AlpineComponent} as a component. + * + * @param component The name/symbol of the class to register as a component. + * @param name The name of the component (registered to alpine for use with x-data.) + */ + register(component: Impl.KnownClassConstructor, name?: string): void; + /** + * Register a component to Alpine through Alpine.data(). + * + * @param name The name of the component (must already be registered to the store.) + */ + private registerConstructorAsAlpineData; + private static getObjectData; + private static getClassData; + private logRegisterFailure; +} +/** + * Copy prototype functions and object properties to an empty object. + * + * @param instance The object to copy functions and properties from + */ +export declare function transformToAlpineData(instance: T): object; +/** + * Transform a class constructor into an alpine constructor function. + * + * @param component The class constructor + */ +export declare function makeAlpineConstructor(component: Impl.KnownClassConstructor): Impl.AlpineComponentConstructor; diff --git a/types/index.d.ts b/types/index.d.ts new file mode 100644 index 0000000..e4004f6 --- /dev/null +++ b/types/index.d.ts @@ -0,0 +1,12 @@ +/** + * Export functions and types. + */ +export { type AlpineBindingContext, type AlpineComponentConstructor, type AlpineData, type AlpineDataContext, type KnownConstructor, type KnownClassConstructor, type KnownGenericConstructor, AlpineComponent } from './Component'; +export { type ComponentList, ComponentStore, transformToAlpineData, makeAlpineConstructor } from './Store'; +export * as Globals from './Global'; +export { AlpineComponents, componentsPlugin } from './Plugin'; +/** + * Alpine plugin as default export. + */ +import { componentsPlugin } from './Plugin'; +export default componentsPlugin;