@pixelated-tech/components 3.9.12 → 3.9.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/general/callout.js +0 -1
- package/dist/components/general/markdown.js +0 -1
- package/dist/components/general/recipe.js +0 -1
- package/dist/components/integrations/contentful.items.components.js +0 -1
- package/dist/components/integrations/socialcard.js +0 -12
- package/dist/components/shoppingcart/ebay.components.js +0 -1
- package/dist/components/shoppingcart/shoppingcart.components.js +1 -3
- package/dist/config/pixelated.config.json.enc +1 -1
- package/dist/scripts/build.sh +21 -8
- package/dist/scripts/create-pixelated-app-template-mapper.js +80 -0
- package/dist/scripts/create-pixelated-app.js +471 -0
- package/dist/scripts/create-pixelated-app.json +32 -0
- package/dist/scripts/release.sh +9 -3
- package/dist/types/components/general/404.d.ts.map +1 -1
- package/dist/types/components/general/callout.d.ts.map +1 -1
- package/dist/types/components/general/markdown.d.ts.map +1 -1
- package/dist/types/components/general/menu-accordion.d.ts.map +1 -1
- package/dist/types/components/general/recipe.d.ts.map +1 -1
- package/dist/types/components/general/resume.d.ts.map +1 -1
- package/dist/types/components/general/timeline.d.ts.map +1 -1
- package/dist/types/components/integrations/contentful.items.components.d.ts.map +1 -1
- package/dist/types/components/integrations/socialcard.d.ts.map +1 -1
- package/dist/types/components/integrations/wordpress.components.d.ts.map +1 -1
- package/dist/types/components/shoppingcart/ebay.components.d.ts.map +1 -1
- package/dist/types/components/shoppingcart/shoppingcart.components.d.ts.map +1 -1
- package/dist/types/scripts/create-pixelated-app-template-mapper.d.ts +5 -0
- package/dist/types/scripts/create-pixelated-app-template-mapper.d.ts.map +1 -0
- package/dist/types/scripts/create-pixelated-app.d.ts +12 -0
- package/dist/types/scripts/create-pixelated-app.d.ts.map +1 -0
- package/dist/types/tests/config-vault.test.d.ts +2 -0
- package/dist/types/tests/config-vault.test.d.ts.map +1 -0
- package/dist/types/tests/create-pixelated-app-template-mapper.test.d.ts +2 -0
- package/dist/types/tests/create-pixelated-app-template-mapper.test.d.ts.map +1 -0
- package/dist/types/tests/create-pixelated-app.cli.test.d.ts +2 -0
- package/dist/types/tests/create-pixelated-app.cli.test.d.ts.map +1 -0
- package/dist/types/tests/create-pixelated-app.test.d.ts +2 -0
- package/dist/types/tests/create-pixelated-app.test.d.ts.map +1 -0
- package/dist/types/tests/generate-site-images.test.d.ts +2 -0
- package/dist/types/tests/generate-site-images.test.d.ts.map +1 -0
- package/dist/types/tests/pixelated-eslint-plugin.test.d.ts +2 -0
- package/dist/types/tests/pixelated-eslint-plugin.test.d.ts.map +1 -0
- package/dist/types/tests/shell-scripts.test.d.ts +2 -0
- package/dist/types/tests/shell-scripts.test.d.ts.map +1 -0
- package/dist/types/tests/validate-exports.test.d.ts +2 -0
- package/dist/types/tests/validate-exports.test.d.ts.map +1 -0
- package/package.json +7 -6
- package/dist/scripts/validate-exports.cjs +0 -280
- package/dist/types/scripts/validate-exports.d.cts +0 -2
- package/dist/types/scripts/validate-exports.d.cts.map +0 -1
|
@@ -64,7 +64,6 @@ cloudinaryTransforms */ }) {
|
|
|
64
64
|
? _jsx("a", { href: url, target: target, rel: target == "_blank" ? "noopener noreferrer" : "", children: _jsx(SmartImage, { src: img, title: title ?? imgAlt ?? undefined, alt: imgAlt ?? title ?? "", aboveFold: aboveFold, cloudinaryEnv: config?.cloudinary?.product_env ?? undefined, cloudinaryDomain: config?.cloudinary?.baseUrl ?? undefined, cloudinaryTransforms: config?.cloudinary?.transforms ?? undefined, suppressHydrationWarning: true }) })
|
|
65
65
|
: (url && imgClick)
|
|
66
66
|
? _jsx(SmartImage, { src: img, title: title ?? imgAlt ?? undefined, alt: imgAlt ?? title ?? "", onClick: (event) => imgClick(event, url), aboveFold: aboveFold, cloudinaryEnv: config?.cloudinary?.product_env ?? undefined, cloudinaryDomain: config?.cloudinary?.baseUrl ?? undefined, cloudinaryTransforms: config?.cloudinary?.transforms ?? undefined, suppressHydrationWarning: true })
|
|
67
|
-
/* <img src={img} title={title ?? imgAlt ?? undefined} alt={imgAlt ?? title ?? undefined} onClick={(event) => imgClick(event, url)} /> */
|
|
68
67
|
: _jsx(SmartImage, { src: img, title: title ?? imgAlt ?? undefined, alt: imgAlt ?? title ?? "", aboveFold: aboveFold, cloudinaryEnv: config?.cloudinary?.product_env ?? undefined, cloudinaryDomain: config?.cloudinary?.baseUrl ?? undefined, cloudinaryTransforms: config?.cloudinary?.transforms ?? undefined, suppressHydrationWarning: true }) }) : null;
|
|
69
68
|
return (_jsx("div", { id: friendlyTitle ? "callout-" + friendlyTitle : undefined, className: "callout" +
|
|
70
69
|
(variant ? " " + variant : "") +
|
|
@@ -19,7 +19,6 @@ export function Markdown(props) {
|
|
|
19
19
|
.replace(/^#{2}\s(.*$)/gim, '<h2>$1</h2>') // h2 tag
|
|
20
20
|
.replace(/^#{1}\s(.*$)/gim, '<h1>$1</h1>') // h1 tag
|
|
21
21
|
.replace(/(=|-|\*){3}/gim, '<hr />') // horizontal rule
|
|
22
|
-
// .replace(/!\[(.*?)\]\((.*?)\)/gim, "<img alt='$1' title='$1' src='$2' />") // images
|
|
23
22
|
.replace(/!\[(.*?)\]\((.*?)\)/gim, _jsx(SmartImage, { alt: '$1', title: '$1', src: '$2', cloudinaryEnv: config?.cloudinary?.product_env, cloudinaryDomain: config?.cloudinary?.baseUrl, cloudinaryTransforms: config?.cloudinary?.transforms })) // images
|
|
24
23
|
.replace(/\[([^[]+)\]\((.*)\)/gim, '<a href="$2">$1</a>') // links
|
|
25
24
|
.replace(/^\*{1}\s+(.*$)/gim, '<ul><li>$1</li></ul>') // unordered list
|
|
@@ -152,7 +152,6 @@ export function RecipeBookItem(props) {
|
|
|
152
152
|
const recipe = props.recipeData;
|
|
153
153
|
const ingredients = recipe.ingredients.map((ingredient, iKey) => _jsx("li", { className: "p-ingredient", children: ingredient }, iKey));
|
|
154
154
|
const instructions = recipe.instructions.map((instruction, iKey) => _jsx("li", { className: "p-instruction", children: instruction }, iKey));
|
|
155
|
-
/* ? <img className='u-photo' src={recipe.photo} title={recipe.name} alt={recipe.name} /> */
|
|
156
155
|
const recipeImage = (recipe.photo.length > 0
|
|
157
156
|
? _jsx(SmartImage, { className: 'u-photo', src: recipe.photo, title: recipe.name, alt: recipe.name, cloudinaryEnv: config?.cloudinary?.product_env ?? undefined, cloudinaryDomain: config?.cloudinary?.baseUrl ?? undefined, cloudinaryTransforms: config?.cloudinary?.transforms ?? undefined })
|
|
158
157
|
: null);
|
|
@@ -128,7 +128,6 @@ export function ContentfulListItem(props) {
|
|
|
128
128
|
: thisItem.fields.imageUrl;
|
|
129
129
|
const config = usePixelatedConfig();
|
|
130
130
|
const imgComponent = _jsx(SmartImage, { src: itemImage, title: thisItem.fields.title, alt: thisItem.fields.title, cloudinaryEnv: config?.cloudinary?.product_env ?? undefined, cloudinaryDomain: config?.cloudinary?.baseUrl ?? undefined, cloudinaryTransforms: config?.cloudinary?.transforms ?? undefined });
|
|
131
|
-
// <img src={itemImage} title={thisItem.fields.title} alt={thisItem.fields.title} />
|
|
132
131
|
return (_jsxs("div", { className: "contentful-item row-12col", children: [_jsx("div", { className: "contentful-item-photo grid-s1-e5", children: itemURL
|
|
133
132
|
? _jsx("a", { href: itemURL, target: itemURLTarget, rel: "noopener noreferrer", children: imgComponent })
|
|
134
133
|
: (imgComponent) }), _jsxs("div", { className: "contentful-item-body grid-s5-e13", children: [_jsx("div", { className: "contentful-item-header", children: itemURL
|
|
@@ -165,18 +165,6 @@ export function SocialCards(props) {
|
|
|
165
165
|
let myNewCard = {};
|
|
166
166
|
const item = items[prop];
|
|
167
167
|
myNewCard = item;
|
|
168
|
-
/* ===== FIX FOR DESCRIPTION ===== */
|
|
169
|
-
/* if (item.description) {
|
|
170
|
-
if (item.description.length > 500) {
|
|
171
|
-
const doc = html2dom(item.description)
|
|
172
|
-
const itemDescription = doc.innerHTML
|
|
173
|
-
myNewCard.description = itemDescription
|
|
174
|
-
}
|
|
175
|
-
} else {
|
|
176
|
-
const myImgBase = item.thumbnail
|
|
177
|
-
const myImgTag = '<img src="' + myImgBase + '" alt="' + item.title + '" title="' + item.title + '">'
|
|
178
|
-
myNewCard.description = '<p>' + myImgTag + item.title + '</p>'
|
|
179
|
-
} */
|
|
180
168
|
/* ===== FIX FOR SOURCE ===== */
|
|
181
169
|
if (!(item.source)) {
|
|
182
170
|
myNewCard.source = new URL(myURL).hostname;
|
|
@@ -143,7 +143,6 @@ export function EbayListItem(props) {
|
|
|
143
143
|
shoppingCartItem.itemURL = itemURL;
|
|
144
144
|
const config = usePixelatedConfig();
|
|
145
145
|
const itemImageComponent = _jsx(SmartImage, { src: itemImage, title: thisItem.title, alt: thisItem.title, cloudinaryEnv: props.cloudinaryProductEnv ?? undefined, cloudinaryDomain: config?.cloudinary?.baseUrl ?? undefined, cloudinaryTransforms: config?.cloudinary?.transforms ?? undefined });
|
|
146
|
-
// <img src={itemImage} title={thisItem.title} alt={thisItem.title} />
|
|
147
146
|
return (_jsxs("div", { className: "ebayItem row-12col", children: [_jsx("div", { className: "ebayItemPhoto grid-s1-e5", children: itemURL
|
|
148
147
|
? _jsx("a", { href: itemURL, target: itemURLTarget, rel: "noopener noreferrer", children: itemImageComponent })
|
|
149
148
|
: (itemImageComponent) }), _jsxs("div", { className: "ebayItemBody grid-s5-e13", children: [_jsx("div", { className: "ebayItemHeader", children: itemURL
|
|
@@ -177,9 +177,7 @@ export function ShoppingCartItem(props) {
|
|
|
177
177
|
return (_jsxs("div", { className: "pixCartItem row-12col", children: [_jsx("div", { className: "pixCartItemPhoto grid-s1-e4", children: thisItem.itemURL && thisItem.itemImageURL
|
|
178
178
|
? _jsx("a", { href: thisItem.itemURL, target: thisItemTarget, rel: "noopener noreferrer", children: _jsx(SmartImage, { src: thisItem.itemImageURL, alt: thisItem.itemTitle, cloudinaryEnv: config?.cloudinary?.product_env, cloudinaryDomain: config?.cloudinary?.baseUrl, cloudinaryTransforms: config?.cloudinary?.transforms }) })
|
|
179
179
|
: thisItem.itemImageURL
|
|
180
|
-
? (
|
|
181
|
-
/* <img src={thisItem.itemImageURL} title={thisItem.itemTitle} alt={thisItem.itemTitle} /> */
|
|
182
|
-
_jsx(SmartImage, { src: thisItem.itemImageURL, title: thisItem.itemTitle, alt: thisItem.itemTitle, cloudinaryEnv: config?.cloudinary?.product_env, cloudinaryDomain: config?.cloudinary?.baseUrl, cloudinaryTransforms: config?.cloudinary?.transforms }))
|
|
180
|
+
? (_jsx(SmartImage, { src: thisItem.itemImageURL, title: thisItem.itemTitle, alt: thisItem.itemTitle, cloudinaryEnv: config?.cloudinary?.product_env, cloudinaryDomain: config?.cloudinary?.baseUrl, cloudinaryTransforms: config?.cloudinary?.transforms }))
|
|
183
181
|
: _jsx(_Fragment, {}) }), _jsxs("div", { className: "grid-s4-e11", children: [_jsx("div", { className: "pixCartItemHeader", children: _jsx("span", { children: thisItem.itemURL
|
|
184
182
|
? _jsx("a", { href: thisItem.itemURL, target: thisItemTarget, rel: "noopener noreferrer", children: _jsx("h2", { className: "", children: thisItem.itemTitle }) })
|
|
185
183
|
: _jsx("h2", { className: "", children: thisItem.itemTitle }) }) }), _jsxs("div", { className: "pixCartItemDetails grid12", children: [_jsx("br", {}), _jsxs("div", { children: [_jsx("b", { children: "Item ID: " }), thisItem.itemID] }), _jsxs("div", { children: [_jsx("b", { children: "Quantity: " }), thisItem.itemQuantity] }), _jsx("br", {}), _jsx("div", { children: _jsx(FormButton, { className: "pixCartButton", type: "button", id: `btn-rm-${thisItem.itemID}`, text: "Remove Item From Cart", onClick: () => removeFromShoppingCart(thisItem) }) })] })] }), _jsx("div", { className: "grid-s11-e13", children: _jsx("div", { className: "pixCartItemPrice", children: formatAsUSD(thisItem.itemCost) }) })] }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
pxl:v1:
|
|
1
|
+
pxl:v1:1c69961284965ad54bac7b9d:721a75e24a21a214f51e32fd3b6f1c32:88ffc96a10b338e1849d2d858df1b7204395ea0e4a850a3c3cd5d68a97a8aa202474c9e06a599513428e00b0d3262b37d567a4303e79478758f2c3f420e760a3308951149c67435c401d8a319e641b439a7175eaca2015bb6b986958a5af935a90bee8e535897d0a1c7a193d42b3f585cf255d903ea33cf5960254a367ca507dc9b4cbac145f635161a375b4e3c1cf963526ef090ba7aa8648e196a66fff6fa4b4c053d242680a66accdb91934819a8785407bf170f7d592426dc311a17360a6b492669382b3048a0d24e827921a014e3f5600439bdfe049486781d44fb9ba1d6d29d0da1318f34c9570af6c15381796446dbd284e5bc8ca9ddb23b6ef9e88804866537a463d0f8a21f63c5c9ec4afeea986a56cfe27d9751210016cd7e0a745f38f31d85b0ae973cc183561c1edf4f14a2bdcabceeba9d13e52c682d0140b86a7966a1a0c189b60880e2f4180d396da00747ee5a32dfdd96f20b4409a0d5a28338c5744885a9b685ac3b09f5e87c91506d54cc89a875b576764947c3fa9d6c4dd55c5a85d1feea41ab511707f4873fe88338adda3910e528f6554abd12b2dd695ab825adf9dfb7f9c2f024dc34eb8d0e3c23c0cc664949016d0d72de2e14685b3786abdadc1fac65d4ed3fe0e8539dde9689ac470d3ad6d5cea8f33e5098fc21c4b870617c52ca32a9d8733ca06bea5abeac03e21f85b0df620cfb0a469ac2b59c338e3cecf82a94ad291d2d1e54c09cb0002632f841859e8220fdde6c1a2037f80d6d2f207ac14cecf313bb185b1c334c128d5618b5528ec489f89ee6d279778c0e80894d1650013bb7e9c4254a13d5af6b4f79d2f81fb47f10d0e49a1b5a45a8a90d36916af3f4acf550fe28253d9ef5356e86e4e5afe6717e19af70de7ccf4bffe1608f61bd2bf44aca5ea8c1f83f12a7c46b390241777e4792d065ee1401d7721df98213352329be1fa867b004360071d44f50a531b971a5dc470a7fd6c106b9f7c4563af71949350fe25d456008d9e5568138261008aa1789ac08f3377b0f807840a6c296d473cac9e1ef7f5fc4ce1e2d4910bfc8fd9523d9d0b9ea515b41ab191862b8f417b1143bf15db195777708b4bebe639b717ad37455641680c6b875c225494c9af0c8c65eb92017e3e1c72eecd107ab6e7badd99c7a1bb039e85f82475c3ccf9cf9c8810d474b749a4bbe16c7a8f1bc2673a737d58f186c3a88c78bec1f687eba2a1e5e05edc5d3fd2be17573cd57664389d829e411e2655dbe16b88a2bcfcaf09fb265bc53f93aefeb249480c9eabd342e24ff9d505cf686820a1d368b259770b401d35c5617ac6508bd8a1ca6ffb233e4f8b4a74335e7118fe98fee97f85abfaaa4d7e8ceec81595e69a6c32c62b34409b9e845bdc58e13ff48a09446c06004b3b6f5e74a53bba29e8d660b14beabf333bd598d66ed5bba07d195e74ea9f85630d932adcc87b9f37a1e2d2640a157e575c343b2f454074c2b911976862361df439fff5b259064e24981184f0da66282196cf6c7201eaa45d8218e76f2ffb34aab39945252b6f3d204add8ab65abde55ad304e8cf43505e105d1e0cf61bec9986f9d1afd3901602c3f683326639c87247eda13b3adb7edcd90b239efa34c7454b0555567dfbe25d2aa03f2458dabe0337d0eefa74ffce3e993fbcf585b0ee8cd8cae087131df95fb753267d66f64ca21f7b9d93cc7784a24b6e89c9380bd1b5532a583dcef3b0f1faed210d07822e5e912c4767dec72904f049d603209c929a882385ca581d7ae0ce3e665d23813d9f93ded8c4b5aefcb1cbc7cac8e8b2e2bb1674e6c4890865bc36fcee5b118ca98f186201291b6ea32e8775b9722e45b0d5e58dbe34dc2779c15fc641cc575cc3ee32c38c6d49ca47d331ec2400f9323223452a3cdffaf85fc62f70097e8d2f6df367b20b6dbb22e1ec3f5f7f45a82a74a90ea2560e7bf53e08869650aa419b713a90a1255f7c7dc54d07517eb0d749c1c416bd016d9015eaa1361d103e8f77256fdf3430075fca1e6dbdf1692cdbbcec6ec01733c4736669b8a291766733ef134d0c3efada713c5625d5071ee5e0f0e09544a960f5db9104eba1140df6faf98bad81bb407766c96218211c90c776a2b32dcca75701ee503ded7e973cd0aa05d7075fd08f11f9d694062e649df99b4596d7aee40fa9f5bfd323d553b6366a517fbbe52a95cdaf4196edb77281d878c5c3338198a7c968c27c6cbb39e833e873dd8738a7b783533cdbb20b52b63c47c926c88f48880fa86655ca77cd5d415c92fa1920ac46324908712a3273afea6e142e1f18a84f9bd9123fdd50fe5118e7810d2d984f90e6c7dde9d67c180b883673b2b1492cf12040247cbd31a197d842819324ad86bae553c9e13d71d3608d76a265759fc78c07ff2645017765e3ade15d28f9ecf3fbfd1f30f0875eaa7c9d15ba66b1f344bd33652bb13075da616cd5663e617c659506b1be855a20eae0dccbfedc17ba8a9f0c7de146eeb32c517df67b97075b6e803fc24679888370aacffcb47eb6727e8a07e4b899684ffa07e2b6a5010e1a3e708052c405d1f9a649226eeb146d3c0236d2f911ef5aef9780aaac56dbe216f8b0bc78528c4be189eebe24c32a8657cd1d9012778c604e428e22a8d40eb4963d2be2bb82dbf028080e118949f0a6916f2a277d3b1c50bf07290a9b2a91f2442c6e85a7f2749b1ce6a900bb13c760ca607042126af4d10339f22da68327a00ac88632a9e83f256dc9e0f19ad4f9da27217191d4fe5da064f068545d3e471b5ede002400a98cb9badf3b2e90fa7c70152fc3264821f3d427c6e79092f374c07ca2ec9d0e482ef416fef56f5289e000ae6004d00acf6c908c0a550deec9ba4c0e163a7eb30c3bacc2fbcc59979abff1e7028ab5b54f96aaaabfd1fb43491231533322a559bcea6c67c3476550087f9252b0a1a2885357c48c5db379fa8e925a885142a5a6d061e8b564064fec78e6288e0193ab1d462ec91ad2c28b623eb9f511b4a881077837ef5ec3782ed70cf1c409015f59f61ab6712c314bd29c5e9ca3e02b762b18244fe3859506cf03f7c5e986ca2b8e911a40069be3e7219abc8bb7e9ba93db1d0ce32dea6922635076ab22dcb92fe36523290357263efee8f8e6369303bac95872d4969a9fc889ab07d34c5799c19dd0b488df464338371909b0cc2c88daf724bf37baa077126a980134263d9e7ff25bc55df37c132196470d93fd49aef005dff3452ed2a4f43555844dc5abc126103c6938a4b707f16fffad4eca44075c30392703dd50845dccca2020334c25f6f4684f7af0099b34a640ca79314d574c6a8166f928320a09e12912b553da4b5209631c5029986a065fd18ded9510fd141ea4a480c79a62d945a88721c955aca8ecc71f34be2ccd9839ed03213bd7d3c29958b2d5391056c6891ba7ad5998e62689c484e65fcf45eed6f3f1f10cb9cbb53497630fa60dad2e912b8cec5f4bbd273b1e017f0988b17861478745ccec258e06cf14f25e885ef206f58311e841d5b0aef770f75c312d8e599d152cd261bc4e5bf30099accec7141800928c3dde4e0c8e317d445f0a1bf6836fcac83775196eda2417f8a62b0e408361914a8dc2f2d1bae3e2eba5507bb6683b81640ddb118e31704e6e98b92759b24ee16edab80476d675351592d453fa5d1c53a1c6b7876f99ca0f19e32a5f5f232d81436f6c783b491f2452369f2c1a82e55a3e4446cbaa1a4c01c096b50ba281937f96159e011dadd4962375bfd7dda240422235dbed036cc02af47651d3aec11bae6e36cba06e35ebc682a118eddea02c02a587aec038fc986bf91ab49afbb946ef6a12e194226a72d2da8fd0453bfc0f7e85b71e23726581e39239805f7f61d555a313259ad956e365f93325e525178dcca1e533c63d1c61b3c61de521339161599246a3899cd1033fa0fa56cd3892a1d630e28f71d82dd99df49c29ac5f9b183432b0f3bcc24e1ae1f106ed1815eb5e4ec15e974c46cf97411a281a211ece4a7fef76c7b8fb533dd565fd52016ed384824835a928861a3ffc5f26c93adec06ba1e83e1696c5115875c8d1046cd3148db8fb39f4c806ff201a33f89999a3704ed399ae9e95327bb3ff2f4cc1c457ada0e51444b1525d52ff1f0fd19b1a18622b2d4ddc48ab75227b29b51f0957968cb02c5ed6645b8500ce6be40a21097aca4d91ac6b15c1f52f8f7b93d6392a8490d0acf6d827931561c758df0080c46ac51e437b55216bd3e90337583856124e1953d8774dfef08851c0123f6cb2e028b3dc3591bdfe85a569d4c951b78428292adf8e246e5cb7cbce87182845ec6a9b20bdea150918b4bd2d09300a245ba1e4e1b3f2bf91a5bf783f2b2da234e95d680ddd28814d6b41169464d298d167c8964989d7ae22c176080440e43ac4210707ab050e3b1446753edf6c96fb8ea7142dcffee11683c86303fe5c5d8767a80639f2f3ae474ba00201b66879bb507fb0ce681d8ff1cca1139ed9dde6a1d86e8b9ef6942d9fe3a5782aff51b4c57bff863382e2b7ed4123be0a30510db43c220bc0dfb4a4e14e4ccdd2ac3cd65fe9a85809fba4ebcb0f6338fa2cb77c6635aeb7adfd48b681c797a12d3f0bf89f93fe63287ba97b5e6f538582399722e9a05812033fbbbb67e0106f70a01aa00f5db9e3fd70d5b7829d6b669e67722c61ff3e3e352dce9ea3529087d9a1057bc8a1681f860075ca0f9583638f3a2c9d50fe5cb4346055b4d7fecc86a168ec22116628bfebc70324595f2de3e2b840f0e4649d4681290579e04efcb7e59c69ab4fb43b36d17d50c074db04fbf16e05b2b2f667361c19b04daa4c5558f19361c94a881fb846656b9be6bfcd7ded25fc50d945627e4daa609075429289222c2b6587503e8af937bb95622019059422210bc5ba07054feb42b2c3252455730362b74fcaa62b90e617b5269e8f423308cfdea64b023fc7d0c8d2efcb9f64a026affa76124aa816133b36ad8641cd31c4db1e9ead3398fda11e02d41b85036f68bffd50eda2a2132e9453c837558551c5709c871fe086c85af86259acc94735d5acdf987d976b547039c8d40754e89adf7897049b020dd37b69b3e304e9a0f56a126857edbc0f79e3a12b68da4cb5d4e99ba9ae0eff5a9035bc6ebe22c1456db00e
|
package/dist/scripts/build.sh
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
set -euo pipefail
|
|
3
3
|
|
|
4
|
+
step=1
|
|
5
|
+
|
|
6
|
+
|
|
4
7
|
# Centralized build script for pixelated-components
|
|
5
8
|
# Replaces the inline build command in package.json
|
|
6
|
-
|
|
7
9
|
echo ""
|
|
8
10
|
echo "================================================="
|
|
9
11
|
echo "🔨 Starting centralized build process"
|
|
10
12
|
echo "================================================="
|
|
11
13
|
echo ""
|
|
12
14
|
|
|
13
|
-
step=1
|
|
14
15
|
|
|
15
16
|
echo ""
|
|
16
17
|
echo "Step $((step++)): Validate Exports"
|
|
@@ -18,18 +19,21 @@ echo "================================================="
|
|
|
18
19
|
# directly run the validate script instead of npm wrapper
|
|
19
20
|
npx tsx src/scripts/validate-exports.js
|
|
20
21
|
|
|
22
|
+
|
|
21
23
|
echo ""
|
|
22
24
|
echo "Step $((step++)): Clean previous build"
|
|
23
25
|
echo "================================================="
|
|
24
26
|
rm -rf dist
|
|
25
27
|
echo "✅ Removed previous dist/ directory"
|
|
26
28
|
|
|
29
|
+
|
|
27
30
|
echo ""
|
|
28
31
|
echo "Step $((step++)): TypeScript build"
|
|
29
32
|
echo "================================================="
|
|
30
33
|
npx tsc --project tsconfig.json
|
|
31
34
|
echo "✅ TypeScript compilation completed"
|
|
32
35
|
|
|
36
|
+
|
|
33
37
|
echo ""
|
|
34
38
|
echo "Step $((step++)): Copy assets (rsync equivalent)"
|
|
35
39
|
echo "================================================="
|
|
@@ -37,12 +41,14 @@ echo "================================================="
|
|
|
37
41
|
(cd src && tar -cf - $(find . -name "*.css" -o -name "*.scss" -o -name "*.json") scripts/) | tar -C dist -xf - || true
|
|
38
42
|
echo "✅ Copied assets to dist/ completed"
|
|
39
43
|
|
|
44
|
+
|
|
40
45
|
echo ""
|
|
41
46
|
echo "Step $((step++)): Prune unnecessary tsc output"
|
|
42
47
|
echo "================================================="
|
|
43
48
|
rm -rf dist/{images,stories,test,tests} || true
|
|
44
49
|
echo "✅ Pruned unnecessary files from dist/"
|
|
45
50
|
|
|
51
|
+
|
|
46
52
|
# Ensure encrypted config is present in dist (if available in src)
|
|
47
53
|
# This moves the responsibility of placing pixelated.config.json.enc into the build step
|
|
48
54
|
echo ""
|
|
@@ -50,7 +56,6 @@ echo "Step $((step++)): Ensure encrypted config is in dist (if available)"
|
|
|
50
56
|
echo "================================================="
|
|
51
57
|
DIST_DIR="dist"
|
|
52
58
|
ENC_DEST="$DIST_DIR/config/pixelated.config.json.enc"
|
|
53
|
-
PLAIN_DIST_CFG="$DIST_DIR/config/pixelated.config.json"
|
|
54
59
|
|
|
55
60
|
config_paths=("src/app/config/pixelated.config.json" "src/config/pixelated.config.json" "src/pixelated.config.json")
|
|
56
61
|
found_enc=false
|
|
@@ -64,7 +69,19 @@ for src in "${config_paths[@]}"; do
|
|
|
64
69
|
fi
|
|
65
70
|
done
|
|
66
71
|
|
|
72
|
+
if [ "$found_enc" = false ]; then
|
|
73
|
+
echo "ℹ️ No source .enc found in src; build did not place encrypted config. If you expect an encoded config, run 'npm run config:encrypt' and re-run build."
|
|
74
|
+
else
|
|
75
|
+
echo "✅ Encrypted config ensured in dist"
|
|
76
|
+
fi
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
67
80
|
# Remove plaintext config from dist if present (avoid shipping plaintext)
|
|
81
|
+
echo ""
|
|
82
|
+
echo "Step $((step++)): Ensure decrypted config is NOT in dist"
|
|
83
|
+
echo "================================================="
|
|
84
|
+
PLAIN_DIST_CFG="$DIST_DIR/config/pixelated.config.json"
|
|
68
85
|
if [ -f "$PLAIN_DIST_CFG" ]; then
|
|
69
86
|
echo "⚠️ Found plaintext config in dist at $PLAIN_DIST_CFG — removing it to avoid accidental publish."
|
|
70
87
|
rm -f "$PLAIN_DIST_CFG"
|
|
@@ -73,11 +90,7 @@ else
|
|
|
73
90
|
echo "ℹ️ No plaintext config found in dist."
|
|
74
91
|
fi
|
|
75
92
|
|
|
76
|
-
|
|
77
|
-
echo "ℹ️ No source .enc found in src; build did not place encrypted config. If you expect an encoded config, run 'npm run config:encrypt' and re-run build."
|
|
78
|
-
else
|
|
79
|
-
echo "✅ Encrypted config ensured in dist"
|
|
80
|
-
fi
|
|
93
|
+
|
|
81
94
|
|
|
82
95
|
echo ""
|
|
83
96
|
echo "================================================="
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
|
|
4
|
+
async function exists(p) {
|
|
5
|
+
try {
|
|
6
|
+
await fs.access(p);
|
|
7
|
+
return true;
|
|
8
|
+
} catch (e) {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export async function loadManifest(baseDir = path.resolve(__dirname)) {
|
|
14
|
+
const manifestPath = path.resolve(baseDir, 'create-pixelated-app.json');
|
|
15
|
+
try {
|
|
16
|
+
if (await exists(manifestPath)) {
|
|
17
|
+
const txt = await fs.readFile(manifestPath, 'utf8');
|
|
18
|
+
return JSON.parse(txt);
|
|
19
|
+
}
|
|
20
|
+
} catch (e) {
|
|
21
|
+
// ignore parse/read errors
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function findTemplateForSlug(manifest, slug) {
|
|
27
|
+
if (!manifest || !Array.isArray(manifest.templates)) return null;
|
|
28
|
+
slug = (slug || '').toLowerCase();
|
|
29
|
+
for (const t of manifest.templates) {
|
|
30
|
+
if (!t.aliases || !Array.isArray(t.aliases)) continue;
|
|
31
|
+
for (let a of t.aliases) {
|
|
32
|
+
a = a.toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '');
|
|
33
|
+
if (a === slug) return t;
|
|
34
|
+
}
|
|
35
|
+
// also fuzzy match (e.g., 'about-us' -> 'about')
|
|
36
|
+
for (let a of t.aliases) {
|
|
37
|
+
a = a.toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '');
|
|
38
|
+
if (slug === a || slug.startsWith(a + '-') || slug.endsWith('-' + a) || slug.includes('-' + a + '-')) return t;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export async function pruneTemplateDirs(manifest, destPath, requestedSlugs = []) {
|
|
45
|
+
const removed = [];
|
|
46
|
+
if (!manifest || !Array.isArray(manifest.templates)) return removed;
|
|
47
|
+
const requested = new Set((requestedSlugs || []).map(s => s.toString()));
|
|
48
|
+
for (const t of manifest.templates) {
|
|
49
|
+
const folderName = path.basename(t.src);
|
|
50
|
+
const candidateDir = path.join(destPath, 'src', 'app', '(pages)', folderName);
|
|
51
|
+
if (await exists(candidateDir) && !requested.has(folderName)) {
|
|
52
|
+
// remove the template page folder
|
|
53
|
+
await fs.rm(candidateDir, { recursive: true, force: true });
|
|
54
|
+
removed.push(folderName);
|
|
55
|
+
// remove any associated files defined in the manifest (relative to site root)
|
|
56
|
+
if (Array.isArray(t.associated_files)) {
|
|
57
|
+
for (const rel of t.associated_files) {
|
|
58
|
+
const candidateFile = path.join(destPath, rel);
|
|
59
|
+
try {
|
|
60
|
+
if (await exists(candidateFile)) {
|
|
61
|
+
await fs.rm(candidateFile, { recursive: true, force: true });
|
|
62
|
+
}
|
|
63
|
+
} catch (e) {
|
|
64
|
+
// ignore individual failures
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return removed;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export function printAvailableTemplates(manifest) {
|
|
74
|
+
if (!manifest || !Array.isArray(manifest.templates) || manifest.templates.length === 0) return;
|
|
75
|
+
console.log('\nAvailable templates:');
|
|
76
|
+
for (const t of manifest.templates) {
|
|
77
|
+
const aliases = Array.isArray(t.aliases) ? t.aliases.join(', ') : '';
|
|
78
|
+
console.log(` - ${t.name}${aliases ? ': ' + aliases : ''}`);
|
|
79
|
+
}
|
|
80
|
+
}
|