@pixelated-tech/components 3.13.16 → 3.14.1
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/admin/site-health/google.api.integration.js +5 -4
- package/dist/components/admin/site-health/site-health-cloudwatch.integration.js +3 -2
- package/dist/components/admin/site-health/site-health-dependency-vulnerabilities.js +1 -3
- package/dist/components/config/crypto.js +17 -1
- package/dist/components/general/404.js +1 -1
- package/dist/components/general/cache-manager.js +19 -2
- package/dist/components/general/callout.js +1 -1
- package/dist/components/general/carousel.drag.js +21 -24
- package/dist/components/general/carousel.js +3 -3
- package/dist/components/general/countup.js +1 -1
- package/dist/components/general/intersection-observer.js +4 -0
- package/dist/components/general/metadata.functions.js +2 -2
- package/dist/components/general/proxy-handler.js +2 -2
- package/dist/components/general/semantic.js +3 -6
- package/dist/components/general/sitemap.js +2 -1
- package/dist/components/general/smartimage.js +2 -4
- package/dist/components/general/styleguide.js +1 -1
- package/dist/components/general/tiles.js +2 -2
- package/dist/components/general/timeline.js +1 -1
- package/dist/components/general/utilities.js +68 -0
- package/dist/components/integrations/contentful.delivery.js +16 -16
- package/dist/components/integrations/contentful.items.components.js +2 -11
- package/dist/components/integrations/flickr.js +7 -4
- package/dist/components/integrations/google.reviews.components.js +3 -0
- package/dist/components/integrations/googleplaces.js +144 -0
- package/dist/components/integrations/socialcard.js +5 -2
- package/dist/components/integrations/wordpress.components.js +2 -1
- package/dist/components/shoppingcart/ebay.components.js +5 -5
- package/dist/components/shoppingcart/ebay.functions.js +5 -3
- package/dist/components/shoppingcart/paypal.js +1 -1
- package/dist/components/shoppingcart/shipping.to.json +3 -4
- package/dist/components/shoppingcart/shoppingcart.components.js +7 -5
- package/dist/components/shoppingcart/shoppingcart.css +1 -1
- package/dist/components/shoppingcart/shoppingcart.functions.js +5 -14
- package/dist/components/sitebuilder/config/ConfigEngine.js +2 -2
- package/dist/components/sitebuilder/config/google-fonts.js +3 -3
- package/dist/components/sitebuilder/form/formcomponents.js +151 -0
- package/dist/components/sitebuilder/form/formutils.js +3 -0
- package/dist/components/sitebuilder/page/lib/pageStorageContentful.js +2 -2
- package/dist/config/pixelated.config.json.enc +1 -1
- package/dist/data/form.json +18 -0
- package/dist/index.adminserver.js +1 -3
- package/dist/index.js +1 -1
- package/dist/index.server.js +1 -0
- package/dist/scripts/create-pixelated-app.js +187 -79
- package/dist/scripts/create-pixelated-app.json +56 -1
- package/dist/scripts/pixelated-eslint-plugin.js +142 -0
- package/dist/scripts/release.sh +14 -1
- package/dist/scripts/update.sh +2 -0
- package/dist/types/components/admin/deploy/deployment.integration.d.ts +1 -0
- package/dist/types/components/admin/deploy/deployment.integration.d.ts.map +1 -1
- package/dist/types/components/admin/site-health/google.api.integration.d.ts.map +1 -1
- package/dist/types/components/admin/site-health/site-health-cloudwatch.integration.d.ts.map +1 -1
- package/dist/types/components/config/config.types.d.ts +24 -0
- package/dist/types/components/config/config.types.d.ts.map +1 -1
- package/dist/types/components/config/crypto.d.ts +1 -0
- package/dist/types/components/config/crypto.d.ts.map +1 -1
- package/dist/types/components/general/404.d.ts.map +1 -1
- package/dist/types/components/general/cache-manager.d.ts +16 -2
- package/dist/types/components/general/cache-manager.d.ts.map +1 -1
- package/dist/types/components/general/callout.d.ts.map +1 -1
- package/dist/types/components/general/carousel.drag.d.ts.map +1 -1
- package/dist/types/components/general/intersection-observer.d.ts.map +1 -1
- package/dist/types/components/general/sitemap.d.ts.map +1 -1
- package/dist/types/components/general/smartimage.d.ts.map +1 -1
- package/dist/types/components/general/utilities.d.ts +37 -0
- package/dist/types/components/general/utilities.d.ts.map +1 -1
- package/dist/types/components/integrations/contentful.delivery.d.ts +16 -16
- package/dist/types/components/integrations/contentful.items.components.d.ts.map +1 -1
- package/dist/types/components/integrations/flickr.d.ts.map +1 -1
- package/dist/types/components/integrations/google.reviews.components.d.ts.map +1 -1
- package/dist/types/components/integrations/googleplaces.d.ts +61 -0
- package/dist/types/components/integrations/googleplaces.d.ts.map +1 -0
- 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.functions.d.ts.map +1 -1
- package/dist/types/components/shoppingcart/shoppingcart.components.d.ts.map +1 -1
- package/dist/types/components/shoppingcart/shoppingcart.functions.d.ts +2 -2
- package/dist/types/components/shoppingcart/shoppingcart.functions.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/form/formcomponents.d.ts +22 -0
- package/dist/types/components/sitebuilder/form/formcomponents.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/form/formutils.d.ts.map +1 -1
- package/dist/types/index.adminserver.d.ts +1 -3
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.server.d.ts +1 -0
- package/dist/types/scripts/create-pixelated-app.d.ts +3 -0
- package/dist/types/scripts/create-pixelated-app.d.ts.map +1 -1
- package/dist/types/scripts/pixelated-eslint-plugin.d.ts +20 -0
- package/dist/types/stories/integrations/contentful.items.stories.d.ts.map +1 -0
- package/dist/types/stories/integrations/contentful.stories.d.ts.map +1 -0
- package/dist/types/stories/integrations/google.reviews.stories.d.ts.map +1 -0
- package/dist/types/stories/integrations/googlesearch.stories.d.ts.map +1 -0
- package/dist/types/stories/integrations/gravatar.stories.d.ts.map +1 -0
- package/dist/types/stories/integrations/instagram.stories.d.ts.map +1 -0
- package/dist/types/stories/integrations/wordpress.stories.d.ts.map +1 -0
- package/dist/types/test/test-utils.d.ts +2 -0
- package/dist/types/test/test-utils.d.ts.map +1 -1
- package/dist/types/tests/404.test.d.ts +2 -0
- package/dist/types/tests/404.test.d.ts.map +1 -0
- package/dist/types/tests/carousel.drag.test.d.ts +2 -0
- package/dist/types/tests/carousel.drag.test.d.ts.map +1 -0
- package/dist/types/tests/carouselDrag.test.d.ts +2 -0
- package/dist/types/tests/carouselDrag.test.d.ts.map +1 -0
- package/dist/types/tests/componentAnalysis.test.d.ts +2 -0
- package/dist/types/tests/componentAnalysis.test.d.ts.map +1 -0
- package/dist/types/tests/componentDiscovery.test.d.ts +2 -0
- package/dist/types/tests/componentDiscovery.test.d.ts.map +1 -0
- package/dist/types/tests/componentMap.test.d.ts +2 -0
- package/dist/types/tests/componentMap.test.d.ts.map +1 -0
- package/dist/types/tests/contentful.items.components.test.d.ts +2 -0
- package/dist/types/tests/contentful.items.components.test.d.ts.map +1 -0
- package/dist/types/tests/contentful.management.test.d.ts +2 -0
- package/dist/types/tests/contentful.management.test.d.ts.map +1 -0
- package/dist/types/tests/contentfulManagement.test.d.ts +2 -0
- package/dist/types/tests/contentfulManagement.test.d.ts.map +1 -0
- package/dist/types/tests/countup.test.d.ts +2 -0
- package/dist/types/tests/countup.test.d.ts.map +1 -0
- package/dist/types/tests/crypto.test.d.ts +2 -0
- package/dist/types/tests/crypto.test.d.ts.map +1 -0
- package/dist/types/tests/deployment.integration.test.d.ts +2 -0
- package/dist/types/tests/deployment.integration.test.d.ts.map +1 -0
- package/dist/types/tests/ebay.components.test.d.ts +2 -0
- package/dist/types/tests/ebay.components.test.d.ts.map +1 -0
- package/dist/types/tests/ebayComponents.test.d.ts +2 -0
- package/dist/types/tests/ebayComponents.test.d.ts.map +1 -0
- package/dist/types/tests/flickr.test.d.ts +2 -0
- package/dist/types/tests/flickr.test.d.ts.map +1 -0
- package/dist/types/tests/formgoogleplacesinput.test.d.ts +2 -0
- package/dist/types/tests/formgoogleplacesinput.test.d.ts.map +1 -0
- package/dist/types/tests/formutils.test.d.ts +2 -0
- package/dist/types/tests/formutils.test.d.ts.map +1 -0
- package/dist/types/tests/formvalidator.test.d.ts +2 -0
- package/dist/types/tests/formvalidator.test.d.ts.map +1 -0
- package/dist/types/tests/gemini-api.client.test.d.ts +2 -0
- package/dist/types/tests/gemini-api.client.test.d.ts.map +1 -0
- package/dist/types/tests/gemini-api.server.test.d.ts +2 -0
- package/dist/types/tests/gemini-api.server.test.d.ts.map +1 -0
- package/dist/types/tests/geminiApi.test.d.ts +2 -0
- package/dist/types/tests/geminiApi.test.d.ts.map +1 -0
- package/dist/types/tests/google.reviews.components.test.d.ts +2 -0
- package/dist/types/tests/google.reviews.components.test.d.ts.map +1 -0
- package/dist/types/tests/googleanalytics.test.d.ts +2 -0
- package/dist/types/tests/googleanalytics.test.d.ts.map +1 -0
- package/dist/types/tests/googlemap.test.d.ts +2 -0
- package/dist/types/tests/googlemap.test.d.ts.map +1 -0
- package/dist/types/tests/gravatar.functions.test.d.ts +2 -0
- package/dist/types/tests/gravatar.functions.test.d.ts.map +1 -0
- package/dist/types/tests/hubspot.components.test.d.ts +2 -0
- package/dist/types/tests/hubspot.components.test.d.ts.map +1 -0
- package/dist/types/tests/image-utils.test.d.ts +2 -0
- package/dist/types/tests/image-utils.test.d.ts.map +1 -0
- package/dist/types/tests/instagram.components.test.d.ts +2 -0
- package/dist/types/tests/instagram.components.test.d.ts.map +1 -0
- package/dist/types/tests/instagram.functions.test.d.ts +2 -0
- package/dist/types/tests/instagram.functions.test.d.ts.map +1 -0
- package/dist/types/tests/intersection-observer.test.d.ts +2 -0
- package/dist/types/tests/intersection-observer.test.d.ts.map +1 -0
- package/dist/types/tests/metadata.functions.test.d.ts +2 -0
- package/dist/types/tests/metadata.functions.test.d.ts.map +1 -0
- package/dist/types/tests/metadataComponents.test.d.ts +2 -0
- package/dist/types/tests/metadataComponents.test.d.ts.map +1 -0
- package/dist/types/tests/page-storage.test.d.ts +2 -0
- package/dist/types/tests/page-storage.test.d.ts.map +1 -0
- package/dist/types/tests/pageStorageContentful.test.d.ts +2 -0
- package/dist/types/tests/pageStorageContentful.test.d.ts.map +1 -0
- package/dist/types/tests/pageStorageLocal.test.d.ts +2 -0
- package/dist/types/tests/pageStorageLocal.test.d.ts.map +1 -0
- package/dist/types/tests/pixelated.test.d.ts +2 -0
- package/dist/types/tests/pixelated.test.d.ts.map +1 -0
- package/dist/types/tests/propTypeIntrospection.test.d.ts +2 -0
- package/dist/types/tests/propTypeIntrospection.test.d.ts.map +1 -0
- package/dist/types/tests/save-route-example.test.d.ts +2 -0
- package/dist/types/tests/save-route-example.test.d.ts.map +1 -0
- package/dist/types/tests/saveRouteExample.test.d.ts +2 -0
- package/dist/types/tests/saveRouteExample.test.d.ts.map +1 -0
- package/dist/types/tests/seoConstants.test.d.ts +2 -0
- package/dist/types/tests/seoConstants.test.d.ts.map +1 -0
- package/dist/types/tests/site-health-accessibility.test.d.ts +2 -0
- package/dist/types/tests/site-health-accessibility.test.d.ts.map +1 -0
- package/dist/types/tests/site-health-cloudwatch.integration.test.d.ts +2 -0
- package/dist/types/tests/site-health-cloudwatch.integration.test.d.ts.map +1 -0
- package/dist/types/tests/site-health-dependency-vulnerabilities.test.d.ts +2 -0
- package/dist/types/tests/site-health-dependency-vulnerabilities.test.d.ts.map +1 -0
- package/dist/types/tests/site-health-github.test.d.ts +2 -0
- package/dist/types/tests/site-health-github.test.d.ts.map +1 -0
- package/dist/types/tests/site-health-google-analytics.integration.test.d.ts +2 -0
- package/dist/types/tests/site-health-google-analytics.integration.test.d.ts.map +1 -0
- package/dist/types/tests/site-health-google-analytics.test.d.ts +2 -0
- package/dist/types/tests/site-health-google-analytics.test.d.ts.map +1 -0
- package/dist/types/tests/site-health-google-search-console.integration.test.d.ts +2 -0
- package/dist/types/tests/site-health-google-search-console.integration.test.d.ts.map +1 -0
- package/dist/types/tests/site-health-google-search-console.test.d.ts +2 -0
- package/dist/types/tests/site-health-google-search-console.test.d.ts.map +1 -0
- package/dist/types/tests/site-health-mock-context.test.d.ts +2 -0
- package/dist/types/tests/site-health-mock-context.test.d.ts.map +1 -0
- package/dist/types/tests/site-health-on-site-seo.test.d.ts +2 -0
- package/dist/types/tests/site-health-on-site-seo.test.d.ts.map +1 -0
- package/dist/types/tests/site-health-performance.test.d.ts +2 -0
- package/dist/types/tests/site-health-performance.test.d.ts.map +1 -0
- package/dist/types/tests/site-health-security.integration.test.d.ts +2 -0
- package/dist/types/tests/site-health-security.integration.test.d.ts.map +1 -0
- package/dist/types/tests/site-health-security.test.d.ts +2 -0
- package/dist/types/tests/site-health-security.test.d.ts.map +1 -0
- package/dist/types/tests/site-health-seo.test.d.ts +2 -0
- package/dist/types/tests/site-health-seo.test.d.ts.map +1 -0
- package/dist/types/tests/site-health-uptime.integration.test.d.ts +2 -0
- package/dist/types/tests/site-health-uptime.integration.test.d.ts.map +1 -0
- package/dist/types/tests/site-health-uptime.test.d.ts +2 -0
- package/dist/types/tests/site-health-uptime.test.d.ts.map +1 -0
- package/dist/types/tests/siteHealthGaIntegration.test.d.ts +2 -0
- package/dist/types/tests/siteHealthGaIntegration.test.d.ts.map +1 -0
- package/dist/types/tests/siteHealthGscIntegration.test.d.ts +2 -0
- package/dist/types/tests/siteHealthGscIntegration.test.d.ts.map +1 -0
- package/dist/types/tests/spotify.components.test.d.ts +2 -0
- package/dist/types/tests/spotify.components.test.d.ts.map +1 -0
- package/dist/types/tests/spotify.functions.test.d.ts +2 -0
- package/dist/types/tests/spotify.functions.test.d.ts.map +1 -0
- package/dist/types/tests/test-utils.d.ts +7 -0
- package/dist/types/tests/test-utils.d.ts.map +1 -0
- package/dist/types/tests/usePageBuilder.test.d.ts +2 -0
- package/dist/types/tests/usePageBuilder.test.d.ts.map +1 -0
- package/package.json +34 -30
- package/dist/components/admin/site-health/site-health-google-analytics.integration.js +0 -6
- package/dist/components/admin/site-health/site-health-google-search-console.integration.js +0 -6
- package/dist/components/general/proxy-csp-listener.js +0 -20
- package/dist/scripts/create-pixelated-app-template-mapper.js +0 -80
- package/dist/types/components/admin/site-health/site-health-google-analytics.integration.d.ts +0 -6
- package/dist/types/components/admin/site-health/site-health-google-analytics.integration.d.ts.map +0 -1
- package/dist/types/components/admin/site-health/site-health-google-search-console.integration.d.ts +0 -6
- package/dist/types/components/admin/site-health/site-health-google-search-console.integration.d.ts.map +0 -1
- package/dist/types/components/general/proxy-csp-listener.d.ts +0 -15
- package/dist/types/components/general/proxy-csp-listener.d.ts.map +0 -1
- package/dist/types/scripts/create-pixelated-app-template-mapper.d.ts +0 -5
- package/dist/types/scripts/create-pixelated-app-template-mapper.d.ts.map +0 -1
- package/dist/types/stories/general/callout.many.stories.d.ts +0 -7
- package/dist/types/stories/general/callout.many.stories.d.ts.map +0 -1
- package/dist/types/stories/general/contentful.item.stories.d.ts +0 -12
- package/dist/types/stories/general/contentful.item.stories.d.ts.map +0 -1
- package/dist/types/stories/general/contentful.items.stories.d.ts.map +0 -1
- package/dist/types/stories/general/contentful.stories.d.ts.map +0 -1
- package/dist/types/stories/general/global-error.stories.d.ts +0 -26
- package/dist/types/stories/general/global-error.stories.d.ts.map +0 -1
- package/dist/types/stories/general/google.reviews.stories.d.ts.map +0 -1
- package/dist/types/stories/general/googleanalytics.stories.d.ts +0 -14
- package/dist/types/stories/general/googleanalytics.stories.d.ts.map +0 -1
- package/dist/types/stories/general/googlesearch.stories.d.ts.map +0 -1
- package/dist/types/stories/general/gravatar.stories.d.ts.map +0 -1
- package/dist/types/stories/general/instagram.stories.d.ts.map +0 -1
- package/dist/types/stories/general/loading.stories.d.ts +0 -11
- package/dist/types/stories/general/loading.stories.d.ts.map +0 -1
- package/dist/types/stories/general/metadata.stories.d.ts +0 -25
- package/dist/types/stories/general/metadata.stories.d.ts.map +0 -1
- package/dist/types/stories/general/schema.stories.d.ts +0 -62
- package/dist/types/stories/general/schema.stories.d.ts.map +0 -1
- package/dist/types/stories/general/sitemap.stories.d.ts +0 -8
- package/dist/types/stories/general/sitemap.stories.d.ts.map +0 -1
- package/dist/types/stories/general/wordpress.stories.d.ts.map +0 -1
- package/dist/types/stories/integrations/schema-podcast.stories.d.ts +0 -45
- package/dist/types/stories/integrations/schema-podcast.stories.d.ts.map +0 -1
- /package/dist/types/stories/{general → integrations}/contentful.items.stories.d.ts +0 -0
- /package/dist/types/stories/{general → integrations}/contentful.stories.d.ts +0 -0
- /package/dist/types/stories/{general → integrations}/google.reviews.stories.d.ts +0 -0
- /package/dist/types/stories/{general → integrations}/googlesearch.stories.d.ts +0 -0
- /package/dist/types/stories/{general → integrations}/gravatar.stories.d.ts +0 -0
- /package/dist/types/stories/{general → integrations}/instagram.stories.d.ts +0 -0
- /package/dist/types/stories/{general → integrations}/wordpress.stories.d.ts +0 -0
|
@@ -18,7 +18,7 @@ function validatePageName(name) {
|
|
|
18
18
|
export async function listContentfulPages(config) {
|
|
19
19
|
// Map management-style config to delivery apiProps for the CDN-based read helper
|
|
20
20
|
const apiProps = {
|
|
21
|
-
base_url: 'https://cdn.contentful.com',
|
|
21
|
+
base_url: config.base_url || 'https://cdn.contentful.com',
|
|
22
22
|
space_id: config.space_id,
|
|
23
23
|
environment: config.environment || 'master',
|
|
24
24
|
delivery_access_token: config.delivery_access_token,
|
|
@@ -45,7 +45,7 @@ export async function loadContentfulPage(name, config) {
|
|
|
45
45
|
}
|
|
46
46
|
// Use delivery API for reads
|
|
47
47
|
const apiProps = {
|
|
48
|
-
base_url: 'https://cdn.contentful.com',
|
|
48
|
+
base_url: config.base_url || 'https://cdn.contentful.com',
|
|
49
49
|
space_id: config.space_id,
|
|
50
50
|
environment: config.environment || 'master',
|
|
51
51
|
delivery_access_token: config.delivery_access_token,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
pxl:v1:
|
|
1
|
+
pxl:v1:f5acd15a1c2ad9b70597c5cf:f5b05491e993840f9a4966148ba78627:13eadc864008b51c8b4b279b9eefd183d16af6cea44c38b4aa5dbe927a001ef4f108b3f5a74fed1a13c86649f1b25adc4e18cfdad3ed322f3c4fe8f55efbde59941f31aa1de85aa2b25aae4bfe48f6ead0b659366278aa88c69137ab9e224aa09757be7ae44a2f7659fb7954df2c8a250fbe2dbf8b5591e2382b2a7937a3c49898476fe412022e9679feaae15f1b67ca3baa44b08122877a541d81ff6588cb50ecc16fc0785f34856c2e06809bd88f1b571ffd92c968b1e1fb18fceca98a1f32a5ccdb7f653b8274579a24ccee99d911a46e5da66109bcfb7461fbd3a5af92b705a471958dc87305e32480913d2eae98f3b8a1ce129b2b4c4eaa6e5c89466e91293207952e4de97a39deecc4011a0b32ca6e92b5b1161e9090af75f02e5b8a43c05569433aef7210d202329a897fd8ca227d843c3eeaa12464006e18b3b69c0a1e1e6878d49f5f0e3bda91dd31a9281ee41eb253be56bf05f679e0b7e252e1a7b1d06c0baa0c6ef16b2a9d70473e0941c4c821fbc3fe3c432f1125fa3b9893d61bf8566f235c0bb9685da0ff33bcca5870c9b7ed466e3bd2116d3e705222344057a4a13fe8ee99f40588a02de5bb67e9c43c012fa5808446e356f74ea8c42d65f9fb7bddcfafd3f56f3d17101eb9b3c06957bdc76ec5ce07cbcf53fb8ace5d5a3d4f18db650d6aaab38424fe008d323f0b1bedef33a0a8086c1d325a32a4c581989512892c1ed801222d25938fad3cf5eebd7c6fc115e9b8dcf7fc2188849b7ef038ed834a6ab2a50c510d47cc9ff4d36c4cb8abfcb25601aff8e378c6b10bedaea7e14be1d2662ee3aeeda97523995e6d42f0531b473e6aa0bb363af3f3bd507a5d683dcad2ef2826f7c570a72aeddeab1e1efda823b27f78ad5da590640122e6fba89caa6a8c9d9aed22d0a1c087a2922e115feb44f2f715a161308fa208390fa0b17a457d47943b3bbf9362662147371b303bf7ddd0ad09b56dc7ee1291aeec7687bafe88bc394fd5eaaf5e2ce5926172c6dbbcfa402d85dbdf14da2a818e3cff84605205b3a9b907cf9b62d4d3f37dad0e0c2846ad20209366b7230db8283ce83ac80f1fb8796b1385f5bda68b2f93c3d64f970f12fc3a054b8c44f74a42167f09337bc9624cf89cb136d57bdc5e5a55a45ee672854845943498c49d273fbfb171efe142d84453404d15e3f967270b10a9395b43928a34f719467a848a972ae747aa3fb30c3b4bfff41fb8c68d84808075b59218c68661df6db584e70f3cc0031f7b99974cfe5d9d7ca958efe3602d09b2ae528d958a9b898a2c3525ee9a26cd48bab64828b3e69c962268a49cc152bac4425a0fab758c303ea467a8cbc571692b18dff2e071e0c6d99b681e4511e5d217fd3f3e3b455794297d4b2a0d338807c742729b475e3acc6f7854cb66aaa763f840d91be86b40486bc6bcd3758130bfa02f7ef1f08c8bde1b8301e707f7370a71c46593739fe70fd3ae9e5441df33558aac04a95bed54e47e4cd4ff1b7d8d03086cee14a45ea5117019afe15a6a7bcc866139987036f9a09ab12a058131c274250951c7c530bcf8e4a2e2dad370f92276aadbc4f15cc48460ba72665035e231260687680590918878c14324b47d37017cc9f253e5080c8f24317c6437648d8d0ff691bacb80508364a5e3e4f46699027377fdb650eef9331d6d5448da63fca6e30789de7b18c3ff44626f621216b83109d14a661a98d4d3164e6d70891790e164c79a50fcd20c1a7144eb3e8902a46562391e89eac46a977170a11285381f7141fd1a57ad7d47e3ccfdb7f39ef0fdc0fdef9d1e651bc051319eda410b890e4d1808de41203e0331331cf110cd77ff6e8f2e37f58ca33e79913789f69d0ae5487edbc6c8befd60266c8f15170125afdaca8e4e02d8d5055540b3f4966470e5dbb3032799fd78d2db708ff34d0671236a3296befb86273cefb0b1c538b600f7128359ead6521e68d5bca46a5cbe4aa17c2e85a55d7c4c0be8a47137db064c3436f0a571b8759387ab67175296ca9db5f7ff1c91ba2e711015dd18305953a2b6d35aef11d2410887742c874291fba6f59bd423e470f3737af63de945034d13c2e99c9cda396697a62f555df62fe108541e5945c474fd8cf2b09433582f240b23e9811050427a491c1f3d6ec517a8da0c534ef1e82eeb6768dab11cd72271dda7c7c8a195c8159b6949eddd6ddec07b98b8c801a2a8bc9d33044c9e758cd8f0cdf03163ca596a28411a6890b065b8d01181375586a908355d489fce7f8389688f5bd680227e39927e0a18e73592ffb660bbf47a2100f4e23e4add399c1fef82f35d87f2fc78ad567defb74c045e2373c5a79ee6932271177410359509a43635df1bb65a121da9a5822920bd36be8a4cfd47cec21247996064585d8e36c61cf06b41a2d0568762417133fc78e74dae161fbcc93472532c3cd67608b1a45ac5474667faf31e451fd35d7f997e8f45e8634b71788529ce0f829ea0c2e131e1922f8598c89ce24063a6b016317b956c7df3e5bdc0d53db01b70b92445d9db0911123e2e7ab17fdb101a39be21d30c410e116e7f75350f4f4d9c68fa3f0ba031e6a0c4614d778ff010884b687028420ec8548d1ad16a7571f45ba3e6f7610995eacd6ab9140521eb4b3d56a5320b9f58774e9144519e310f8bad7a6668dada8ae96247a93539846ab0c74507768d367958caf5d90dffd23b6b03da6b04bb88207f749a2ca7a505b96c6f334f6f2bdd35e1d293cdcac8dc71b9819e9dfbc7519347de68a4cdeb65beb6d2ab98d9ae7f2218a18c76d6041654ee8d9b538b404f5404a3eb0d37640c7bb092cb9fb37a50efb5a4afc971dac518d1672e29128bacc572b4eb67b82258afed1aa824dda2fa012512d42d663fd1e4d9b313eef138a0b280f9ee58515773ab97a5e2f34ec8efa3ded652854fc9b004f3d89f0fb6bfcca19cef5908fc5d347b956293000ea290c927da01b65d31bbe79f85993602cf77b7f9ea064fe2591a8381e6c85c84fdb1b0653113b62ed23ac91d74cca0cf5c37c1999bf1c5f2f24191484c8be09f2a8e5d5bebf3415069d5b3200bba5d7fd06182798fa2d2cec88e2ecc4ce8277ba007017f56290d351723768416bea212d930db5e0c2d59bbc979769784ce882288ecff26697567123a7570b5f5b7d759a84d27f22bd7e2fa76fbb34431b4973a1aa8f870d719056352767b7c593ec1dbd0a2c311c6e5bb4b7115252df638dbbdb02216b1c5a9affc1167bd57153957d8968058a4b16e54703fbfd8e142c9037a3ea452c80d033f3e343395c8fbab29a96d3796ae520f97fe095a8b1f4fbca9a72f2cea4833fcdc308fac8412d0d015ff4baa037cd8694bd5cb5ca32584a98eccd85e847a4efc32f3f827786589c38b491d7ae5d5afead669d8f3e90d9e9fa6c3fe2bbb6f3494c85cca743aef4b4682754a672eabcfe671d03e8a242fd28a147c96e89883f1791de74c8fb08b7b24b03494a8bb36ee7961e2669ec74830bc205331fdc448d44706a993db925be4df34fa9a5e055773930609cd9fabaa36cf52bd5569173e8444a9d5370ab4053e5adf1a78682b1e444c3799fb1a09239404c9bc410d75a6ab3bd31aeb02376a9bce00b99ab6530797745ec14898430a19903d36824a8d4b3b12e7272f3e0440220d1f6e2ec2a58cb1d36f2c51abc6afe32229bdcc23593a49ae5655f3619f592585922dd9465ee6bcc6801c1fa8081a9d52011c2626f654287850862c750eaa4ffecfaf5aeae4ae173fb085ae269a44de5ea5e595c3fb2ddbc06b7a403cd6c52f999f64b7782b7d932f8340e9a41d0353d7c49636d16f03d6a9c56d461bf07ff8184ac61b0f6416c5c091c8c4e8cd057ed73161b96ad9d23fb50209a578226c7a0e79fbb5e4bc5b136fe37665d3746cf0c343629459d8cccbbe28097d6168d94f4895b702a77366dfe31379ffb9a61c841c9b09fb0257dd162519279057bdd44b39c995410a41c1dbef376005fc07cd3f172fa27c2ebfbb9ca10dc8854936b9c61b2966d351c0c8d873612d706bbeefe8d788176f6c2779890b9bfdc05576eacd1ca1f2f7603d0fe2282d10dcae2ce886e5d4adadab4a97127a626db5372720c9be33a2c670eed1dc46496065569f030d17daac5003a124a32053c03ffe4a69689e18451a8614cdf8dce27f610b0110b1ba115d8255e620a8f617d88c483e1ba5d46ddb3cab1b2290bc3896d7c6c2faf71c25d4cd5808ac9720e1432bfe6f134d14eb0697c194c5fc3c0ad6cdd164a3504c60d4a72252e1053bc69bbc0292bc93aa50aa5c31e694c2e7c50280540b64df800243fcaee6a70874eb3635931bbf3f9fe301577c4e52a4e7599e358b75984029028a6e791f5a934d4fa8404f0b7b89da5b252cc5e123b10e37d8b1625be2020698d9766d7f94a1421822b27982770549355f91f45fa5686b02e67645f7b75af3b34dcbcf42dd7fd39f32d2822b1a1c934a356b79c8bdec020b7336f1cb34dfe990768b95da771ca7948d52d37205bf012ef4ae1d7dee2b48530907cd924aac6d44bcc2a77177f0743396bb84d9bba6b036465a9e49565efeecc79ae793ebcec3ca8d7b148182918f5e71f305dfa387841fe47b0f3c891fb2d3d0373f4f1a45c51e574ceaa0f433f1b70a900097fbb00077e183d98da74201bb3fbee97c4f0a4e4892773391a33135bf43d78b48a86749bfb27fc82e068c008f53dbba9d948c9045f4159778a83c67acf84f5d4213607b349258b6448dc3fa8634be0eacddef4f96bbf3b93103dbd4672b89b07314c2614bfa6eeab30d417f3ee36cf6ff29331a504b5bde23e28b419b32b5492c98bb7b0d3a3ebfa055230a3c518d8648a371f4e36a6e3dc96adea09b9b9ec536d264e402d2af74073a44aed65c578b67aea227965b1be367f0116fc51f40f61311c49328e9d7843b1553cb7f5e5f0af2ea5bb6c90a5dc0748cdf8f35c79015e8e734596c81f468e16001b02ad9b81c643b74dd289bead40d687f47c7befcc7fd4f4f73edb2c13ea1d78035cfa9c759d3b189e05a90d276feddf53747f7e55595e7f706af78a7e1db0eaed7a44575f5b3d43b21162ac26e1f47a7954aab77f3a8436941d05d5dbeea386c5ffb3122e9e311c5d4d8f3d0d9133e027bf321220f245a789493e7e340d97d0657da3b6091f389d58265ce7d562cdcdece89d89d5aa6ee05e0768dfbc66517210755fc998450b52dfba14bb1979177210f75d8214d1dd0d853bde2f03dbd6e20b0abb9ea9ec21f7d10624744c63cd4f2fe44db1e6f3ef727c5d18c00c5150d23e7b0c82aba9a8e86ba8fb2eaa3d6db6215718cd31e6df6918c48e5637f91eaf3534e610ba2c309aabf2e08ee776b4ba0e6082328bd28e72adc9c88e802218d4f191bea53f3367f482bc317797de99dec32fa9d3c2cc4fe2504ea51493604b14508806a3fd6491cc5edca57392bdbaadd12565d0941c817806d5f137f2f2a03c925b3248e952b051ae5944c2c24fc671a675cb7f92b5a65446ee32d7c34be3b850ae5d8292c565bf3b291841cf7f680094b653e5eba5f273b0fa8eca16ebc622bd28f957b2fdff3a3dd1551016ac4ad8bcb95ebf3934af61528a09d743aadd75229eb29500b8fdf80aa6149d14933d069e60b536729620866e54d06b7f1ebec27feee263f7ea8690dec42ca71477ed364dd77b5298986f6d437ec261b5c7421aa2fe62cf88a9608a5ee8a9ae6ca21b9af780d6ad006c385ffc2b4265e96d952a176ab7be7e9ea400402886db2b9240d03ead2000dedda11002c948bcbd9acb3452247
|
package/dist/data/form.json
CHANGED
|
@@ -370,6 +370,24 @@
|
|
|
370
370
|
"tooltip" : "Add tags by typing and pressing Enter or comma"
|
|
371
371
|
}
|
|
372
372
|
},
|
|
373
|
+
{
|
|
374
|
+
"component" : "FormHoneypot",
|
|
375
|
+
"props" : {
|
|
376
|
+
"id" : "winnie",
|
|
377
|
+
"name" : "website"
|
|
378
|
+
}
|
|
379
|
+
},
|
|
380
|
+
{
|
|
381
|
+
"component" : "FormGooglePlacesInput",
|
|
382
|
+
"props" : {
|
|
383
|
+
"id" : "delivery_address",
|
|
384
|
+
"name" : "delivery_address",
|
|
385
|
+
"placeholder" : "Enter delivery address",
|
|
386
|
+
"label" : "Delivery Address (Google Places) : ",
|
|
387
|
+
"tooltip" : "Start typing to see address suggestions from Google Places",
|
|
388
|
+
"display" : "horizontal"
|
|
389
|
+
}
|
|
390
|
+
},
|
|
373
391
|
{
|
|
374
392
|
"component" : "FormButton",
|
|
375
393
|
"props" : {
|
|
@@ -8,9 +8,6 @@ export * from './components/admin/site-health/site-health-axe-core.integration';
|
|
|
8
8
|
export * from './components/admin/site-health/site-health-cloudwatch.integration';
|
|
9
9
|
export * from './components/admin/site-health/site-health-core-web-vitals.integration';
|
|
10
10
|
export * from './components/admin/site-health/site-health-github.integration';
|
|
11
|
-
export * from './components/admin/site-health/site-health-google-analytics.integration';
|
|
12
|
-
export * from './components/general/cache-manager';
|
|
13
|
-
export * from './components/admin/site-health/site-health-google-search-console.integration';
|
|
14
11
|
export * from './components/admin/site-health/site-health-indicators';
|
|
15
12
|
export * from './components/admin/site-health/site-health-on-site-seo.integration';
|
|
16
13
|
export * from './components/admin/site-health/site-health-security.integration';
|
|
@@ -18,4 +15,5 @@ export * from './components/admin/site-health/site-health-types';
|
|
|
18
15
|
export * from './components/admin/site-health/site-health-uptime.integration';
|
|
19
16
|
export * from './components/admin/site-health/site-health-utils';
|
|
20
17
|
export * from './components/admin/sites/sites.integration';
|
|
18
|
+
export * from './components/general/cache-manager';
|
|
21
19
|
export * from './components/integrations/contentful.management';
|
package/dist/index.js
CHANGED
|
@@ -24,7 +24,6 @@ export * from './components/general/menu-simple';
|
|
|
24
24
|
export * from './components/general/metadata.components';
|
|
25
25
|
export * from './components/general/metadata.functions';
|
|
26
26
|
export * from './components/general/microinteractions';
|
|
27
|
-
export * from './components/general/proxy-csp-listener';
|
|
28
27
|
export * from './components/general/modal';
|
|
29
28
|
export * from './components/general/nerdjoke';
|
|
30
29
|
export * from './components/general/recipe';
|
|
@@ -53,6 +52,7 @@ export * from './components/integrations/flickr';
|
|
|
53
52
|
export * from './components/integrations/gemini-api.client';
|
|
54
53
|
export * from './components/integrations/google.reviews.components';
|
|
55
54
|
export * from './components/integrations/google.reviews.functions';
|
|
55
|
+
export * from './components/integrations/googleplaces';
|
|
56
56
|
export * from './components/integrations/googleanalytics';
|
|
57
57
|
export * from './components/integrations/googlemap';
|
|
58
58
|
export * from './components/integrations/googlesearch';
|
package/dist/index.server.js
CHANGED
|
@@ -21,6 +21,7 @@ export * from './components/integrations/contentful.delivery';
|
|
|
21
21
|
export * from './components/integrations/contentful.management';
|
|
22
22
|
export * from './components/integrations/flickr';
|
|
23
23
|
export * from './components/integrations/gemini-api.server';
|
|
24
|
+
export * from './components/integrations/googleplaces';
|
|
24
25
|
export * from './components/integrations/googlemap';
|
|
25
26
|
export * from './components/integrations/google.reviews.functions';
|
|
26
27
|
export * from './components/integrations/gravatar.functions';
|
|
@@ -49,7 +49,6 @@ import { promisify } from 'util';
|
|
|
49
49
|
import readline from 'readline/promises';
|
|
50
50
|
import { stdin as input, stdout as output } from 'process';
|
|
51
51
|
import { fileURLToPath } from 'url';
|
|
52
|
-
import { loadManifest, findTemplateForSlug, pruneTemplateDirs, printAvailableTemplates } from './create-pixelated-app-template-mapper.js';
|
|
53
52
|
import { AmplifyClient, CreateAppCommand, CreateBranchCommand, UpdateAppCommand, UpdateBranchCommand } from '@aws-sdk/client-amplify';
|
|
54
53
|
|
|
55
54
|
const __filename = fileURLToPath(import.meta.url);
|
|
@@ -70,6 +69,51 @@ async function exists(p) {
|
|
|
70
69
|
}
|
|
71
70
|
}
|
|
72
71
|
|
|
72
|
+
// Template manifest utilities
|
|
73
|
+
export async function loadManifest(baseDir = path.resolve(__dirname)) {
|
|
74
|
+
const manifestPath = path.resolve(baseDir, 'create-pixelated-app.json');
|
|
75
|
+
try {
|
|
76
|
+
if (await exists(manifestPath)) {
|
|
77
|
+
const txt = await fs.readFile(manifestPath, 'utf8');
|
|
78
|
+
return JSON.parse(txt);
|
|
79
|
+
}
|
|
80
|
+
} catch (e) {
|
|
81
|
+
// ignore parse/read errors
|
|
82
|
+
}
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export function findTemplateForSlug(manifest, slug) {
|
|
87
|
+
if (!manifest || !Array.isArray(manifest.templates)) return null;
|
|
88
|
+
slug = (slug || '').toLowerCase();
|
|
89
|
+
for (const t of manifest.templates) {
|
|
90
|
+
// Skip templates that have action: "ignore" (metadata routes in Admin section)
|
|
91
|
+
if (t.action === 'ignore') continue;
|
|
92
|
+
if (!t.aliases || !Array.isArray(t.aliases)) continue;
|
|
93
|
+
for (let a of t.aliases) {
|
|
94
|
+
a = a.toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '');
|
|
95
|
+
if (a === slug) return t;
|
|
96
|
+
}
|
|
97
|
+
// also fuzzy match (e.g., 'about-us' -> 'about')
|
|
98
|
+
for (let a of t.aliases) {
|
|
99
|
+
a = a.toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '');
|
|
100
|
+
if (slug === a || slug.startsWith(a + '-') || slug.endsWith('-' + a) || slug.includes('-' + a + '-')) return t;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export function printAvailableTemplates(manifest) {
|
|
107
|
+
if (!manifest || !Array.isArray(manifest.templates) || manifest.templates.length === 0) return;
|
|
108
|
+
console.log('\nAvailable templates:');
|
|
109
|
+
for (const t of manifest.templates) {
|
|
110
|
+
// Skip templates in Admin section (marked with action: "ignore")
|
|
111
|
+
if (t.action === 'ignore') continue;
|
|
112
|
+
const aliases = Array.isArray(t.aliases) ? t.aliases.join(', ') : '';
|
|
113
|
+
console.log(` - ${t.name}${aliases ? ': ' + aliases : ''}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
73
117
|
async function countFiles(src) {
|
|
74
118
|
let total = 0;
|
|
75
119
|
async function walk(p) {
|
|
@@ -245,7 +289,8 @@ export async function createAndPushRemote(destPath, siteName, defaultOwner) {
|
|
|
245
289
|
const tmpDir = path.join(destPath, '.px-scripts');
|
|
246
290
|
const tmpFile = path.join(tmpDir, 'get_github_token.ts');
|
|
247
291
|
await fs.mkdir(tmpDir, { recursive: true });
|
|
248
|
-
const
|
|
292
|
+
const configModulePath = path.resolve(destPath, 'src', 'components', 'config', 'config');
|
|
293
|
+
const tmpContent = `import('${configModulePath}').then(m => {
|
|
249
294
|
const cfg = m.getFullPixelatedConfig();
|
|
250
295
|
// Only print the github object (or null) as JSON to stdout
|
|
251
296
|
console.log(JSON.stringify(cfg?.github || null));
|
|
@@ -550,121 +595,184 @@ async function main() {
|
|
|
550
595
|
}
|
|
551
596
|
|
|
552
597
|
|
|
553
|
-
// Pages
|
|
554
|
-
console.log(`\nStep ${stepNumber++}: Page
|
|
598
|
+
// Pages selection: ask which pages user wants (from template or custom new pages)
|
|
599
|
+
console.log(`\nStep ${stepNumber++}: Page Selection`);
|
|
555
600
|
console.log('================================================================================\n');
|
|
556
601
|
if (manifest && Array.isArray(manifest.templates) && manifest.templates.length) {
|
|
557
602
|
printAvailableTemplates(manifest);
|
|
558
603
|
}
|
|
559
|
-
const pagesInput = (await rl.question('Pages
|
|
560
|
-
let
|
|
561
|
-
let existingPages = ['humans.txt', 'styleguide'];
|
|
604
|
+
const pagesInput = (await rl.question('Pages you want (comma-separated, e.g. about,contact,custom-legal) [leave blank to skip]: ')).trim();
|
|
605
|
+
let wantedPages = [];
|
|
562
606
|
if (pagesInput) {
|
|
563
607
|
const raw = pagesInput.split(',').map(s => s.trim()).filter(Boolean);
|
|
564
|
-
// sanitize and normalize
|
|
565
608
|
const seen = new Set();
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
}
|
|
572
|
-
let slug = r.trim().toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '');
|
|
573
|
-
if (!slug) continue;
|
|
574
|
-
if (seen.has(slug)) continue;
|
|
609
|
+
|
|
610
|
+
// Normalize each input
|
|
611
|
+
for (const userInput of raw) {
|
|
612
|
+
const slug = userInput.toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '');
|
|
613
|
+
if (!slug || seen.has(slug)) continue;
|
|
575
614
|
seen.add(slug);
|
|
615
|
+
|
|
616
|
+
// Check if it's a template page
|
|
576
617
|
const matchedTemplate = findTemplateForSlug(manifest, slug);
|
|
577
|
-
|
|
618
|
+
const isTemplate = !!matchedTemplate;
|
|
619
|
+
|
|
620
|
+
wantedPages.push({
|
|
621
|
+
slug,
|
|
622
|
+
displayName: userInput.trim(),
|
|
623
|
+
isTemplate,
|
|
624
|
+
matchedTemplate
|
|
625
|
+
});
|
|
578
626
|
}
|
|
579
627
|
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
console.log(` - ${p.slug} (
|
|
628
|
+
if (wantedPages.length) {
|
|
629
|
+
console.log('\nSummary of pages:');
|
|
630
|
+
const templatePages = wantedPages.filter(p => p.isTemplate);
|
|
631
|
+
const customPages = wantedPages.filter(p => !p.isTemplate);
|
|
632
|
+
|
|
633
|
+
if (templatePages.length) {
|
|
634
|
+
console.log(' - Template pages:');
|
|
635
|
+
for (const p of templatePages) {
|
|
636
|
+
console.log(` - ${p.slug} (from template: ${p.matchedTemplate.name})`);
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
if (customPages.length) {
|
|
640
|
+
console.log(' - Custom pages (new):');
|
|
641
|
+
for (const p of customPages) {
|
|
642
|
+
console.log(` - ${p.slug}`);
|
|
589
643
|
}
|
|
590
644
|
}
|
|
591
645
|
}
|
|
592
|
-
|
|
646
|
+
|
|
647
|
+
const proceedPages = (await rl.question('Proceed with these pages? (Y/n): ')) || 'y';
|
|
593
648
|
if (proceedPages.toLowerCase() === 'y' || proceedPages.toLowerCase() === 'yes') {
|
|
594
|
-
// perform creation
|
|
595
|
-
const templatePagesHome = path.join(templatePath, 'src', 'app', '(pages)', '(home)');
|
|
596
649
|
const siteRoutesFile = path.join(destPath, 'src', 'app', 'data', 'routes.json');
|
|
597
650
|
let routesJson = null;
|
|
651
|
+
|
|
598
652
|
try {
|
|
599
653
|
routesJson = JSON.parse(await fs.readFile(siteRoutesFile, 'utf8'));
|
|
600
|
-
// Ensure siteInfo exists and set its name to the root display name
|
|
601
654
|
routesJson.siteInfo = routesJson.siteInfo || {};
|
|
602
655
|
routesJson.siteInfo.name = rootDisplayName;
|
|
603
656
|
} catch (e) {
|
|
604
|
-
console.
|
|
657
|
+
console.error('❌ Failed to read routes.json:', e?.message || e);
|
|
658
|
+
process.exit(1);
|
|
605
659
|
}
|
|
606
660
|
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
661
|
+
const templatePagesHome = path.join(templatePath, 'src', 'app', '(pages)', '(home)');
|
|
662
|
+
const pagesDir = path.join(destPath, 'src', 'app', '(pages)');
|
|
663
|
+
const wantedSlugs = new Set(wantedPages.map(p => p.slug));
|
|
664
|
+
|
|
665
|
+
// Process wanted pages: rename templates or create custom pages
|
|
666
|
+
for (const p of wantedPages) {
|
|
667
|
+
if (p.isTemplate) {
|
|
668
|
+
// Get the actual template folder name (e.g., "about")
|
|
669
|
+
const templateFolderName = path.basename(p.matchedTemplate.src);
|
|
670
|
+
const oldPath = path.join(pagesDir, templateFolderName);
|
|
671
|
+
const newPath = path.join(pagesDir, p.slug);
|
|
672
|
+
|
|
673
|
+
// Rename if user requested a different name
|
|
674
|
+
if (templateFolderName !== p.slug) {
|
|
675
|
+
try {
|
|
676
|
+
await fs.rename(oldPath, newPath);
|
|
677
|
+
console.log(`Renamed ${templateFolderName} → ${p.slug}`);
|
|
678
|
+
|
|
679
|
+
// Update component name in page.tsx
|
|
680
|
+
const pageFile = path.join(newPath, 'page.tsx');
|
|
681
|
+
let content = await fs.readFile(pageFile, 'utf8');
|
|
682
|
+
const compName = p.displayName.replace(/[^a-zA-Z0-9]+/g, ' ').split(/\s+/).map(s => s.charAt(0).toUpperCase() + s.slice(1)).join('') + 'Page';
|
|
683
|
+
content = content.replace(/export default function\s+\w+\s*\(/, `export default function ${compName}(`);
|
|
684
|
+
await fs.writeFile(pageFile, content, 'utf8');
|
|
685
|
+
console.log(` - Updated component name to ${compName}`);
|
|
686
|
+
|
|
687
|
+
// Update route path in routes.json
|
|
688
|
+
const route = routesJson.routes.find(r => r.path === `/${templateFolderName}`);
|
|
689
|
+
if (route) {
|
|
690
|
+
route.path = `/${p.slug}`;
|
|
691
|
+
route.name = p.displayName.split(/\s+/).map(s => s.charAt(0).toUpperCase() + s.slice(1)).join(' ');
|
|
692
|
+
console.log(` - Updated route path to /${p.slug}`);
|
|
693
|
+
}
|
|
694
|
+
} catch (e) {
|
|
695
|
+
console.error(`❌ Failed to rename ${templateFolderName} to ${p.slug}:`, e?.message || e);
|
|
696
|
+
process.exit(1);
|
|
697
|
+
}
|
|
617
698
|
}
|
|
618
699
|
} else {
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
if (!routesJson.routes.some(r => r.path === candidatePath)) {
|
|
638
|
-
routesJson.routes.push({
|
|
639
|
-
"name": p.displayName.split(/\s+/).map(s=>s.charAt(0).toUpperCase()+s.slice(1)).join(' '),
|
|
640
|
-
"path": candidatePath,
|
|
700
|
+
// Create custom page from default template
|
|
701
|
+
try {
|
|
702
|
+
const targetDir = path.join(pagesDir, p.slug);
|
|
703
|
+
await copyRecursive(templatePagesHome, targetDir);
|
|
704
|
+
console.log(`Created custom page ${p.slug}`);
|
|
705
|
+
|
|
706
|
+
// Update component name in page.tsx
|
|
707
|
+
const pageFile = path.join(targetDir, 'page.tsx');
|
|
708
|
+
let content = await fs.readFile(pageFile, 'utf8');
|
|
709
|
+
const compName = p.displayName.replace(/[^a-zA-Z0-9]+/g, ' ').split(/\s+/).map(s => s.charAt(0).toUpperCase() + s.slice(1)).join('') + 'Page';
|
|
710
|
+
content = content.replace(/export default function\s+\w+\s*\(/, `export default function ${compName}(`);
|
|
711
|
+
await fs.writeFile(pageFile, content, 'utf8');
|
|
712
|
+
console.log(` - Updated component name to ${compName}`);
|
|
713
|
+
|
|
714
|
+
// Add route entry
|
|
715
|
+
const newRoute = {
|
|
716
|
+
"name": p.displayName.split(/\s+/).map(s => s.charAt(0).toUpperCase() + s.slice(1)).join(' '),
|
|
717
|
+
"path": `/${p.slug}`,
|
|
641
718
|
"title": `${rootDisplayName} - ${p.displayName}`,
|
|
642
719
|
"description": "",
|
|
643
720
|
"keywords": ""
|
|
644
|
-
}
|
|
645
|
-
|
|
646
|
-
console.log(` -
|
|
721
|
+
};
|
|
722
|
+
routesJson.routes.push(newRoute);
|
|
723
|
+
console.log(` - Added route /${p.slug}`);
|
|
724
|
+
} catch (e) {
|
|
725
|
+
console.error(`❌ Failed to create custom page ${p.slug}:`, e?.message || e);
|
|
726
|
+
process.exit(1);
|
|
647
727
|
}
|
|
648
728
|
}
|
|
649
729
|
}
|
|
650
730
|
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
731
|
+
// Delete unwanted template pages
|
|
732
|
+
// The Admin section (an object with nested routes for metadata pages) is in routesJson.routes
|
|
733
|
+
// but doesn't have folders in the (pages) directory, so it's never encountered by fs.readdir().
|
|
734
|
+
// We can safely delete page folders without worrying about removing the Admin section.
|
|
735
|
+
try {
|
|
736
|
+
const existingFolders = await fs.readdir(pagesDir);
|
|
737
|
+
const foldersToDelete = [];
|
|
738
|
+
|
|
739
|
+
for (const folderName of existingFolders) {
|
|
740
|
+
if (!wantedSlugs.has(folderName)) {
|
|
741
|
+
const folderTemplate = findTemplateForSlug(manifest, folderName);
|
|
742
|
+
if (folderTemplate) {
|
|
743
|
+
foldersToDelete.push(folderName);
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
// Delete unwanted folders and their routes
|
|
749
|
+
for (const folderName of foldersToDelete) {
|
|
750
|
+
try {
|
|
751
|
+
const folderPath = path.join(pagesDir, folderName);
|
|
752
|
+
await fs.rm(folderPath, { recursive: true });
|
|
753
|
+
console.log(`Deleted template page ${folderName}`);
|
|
754
|
+
|
|
755
|
+
// Remove the corresponding route from routes.json
|
|
756
|
+
routesJson.routes = routesJson.routes.filter(r => r.path !== `/${folderName}`);
|
|
757
|
+
} catch (e) {
|
|
758
|
+
console.warn(`⚠️ Failed to delete ${folderName}:`, e?.message || e);
|
|
759
|
+
}
|
|
655
760
|
}
|
|
761
|
+
} catch (e) {
|
|
762
|
+
// readdir might fail if pages dir doesn't exist, but that's OK
|
|
763
|
+
console.warn(`⚠️ Could not read pages directory for cleanup:`, e?.message || e);
|
|
656
764
|
}
|
|
657
765
|
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
766
|
+
// Write final routes.json
|
|
767
|
+
try {
|
|
768
|
+
await fs.writeFile(siteRoutesFile, JSON.stringify(routesJson, null, '\t'), 'utf8');
|
|
769
|
+
console.log('✅ routes.json updated.');
|
|
770
|
+
} catch (e) {
|
|
771
|
+
console.error('❌ Failed to write routes.json:', e?.message || e);
|
|
772
|
+
process.exit(1);
|
|
665
773
|
}
|
|
666
774
|
} else {
|
|
667
|
-
console.log('Skipping page
|
|
775
|
+
console.log('Skipping page selection.');
|
|
668
776
|
}
|
|
669
777
|
}
|
|
670
778
|
|
|
@@ -10,6 +10,11 @@
|
|
|
10
10
|
"aliases": ["blog", "blog-posts", "news", "updates", "articles"],
|
|
11
11
|
"src": "../../pixelated-template/src/app/(pages)/blog"
|
|
12
12
|
},
|
|
13
|
+
{
|
|
14
|
+
"name": "Blog Calendar",
|
|
15
|
+
"aliases": ["blogcalendar", "blog-calendar", "calendar", "event-calendar", "events"],
|
|
16
|
+
"src": "../../pixelated-template/src/app/(pages)/blogcalendar"
|
|
17
|
+
},
|
|
13
18
|
{
|
|
14
19
|
"name": "Contact",
|
|
15
20
|
"aliases": ["contact", "contact-us", "contact-us-page", "contactus", "support", "get-in-touch", "reach-out", "get-in-touch"],
|
|
@@ -22,10 +27,40 @@
|
|
|
22
27
|
"src": "../../pixelated-template/src/app/(pages)/faqs",
|
|
23
28
|
"associated_files": ["src/app/data/faqs.json"]
|
|
24
29
|
},
|
|
30
|
+
{
|
|
31
|
+
"name": "Global Error",
|
|
32
|
+
"aliases": ["global-error", "globalerror", "error-boundary"],
|
|
33
|
+
"action": "ignore"
|
|
34
|
+
},
|
|
25
35
|
{
|
|
26
36
|
"name": "Humans.txt",
|
|
27
37
|
"aliases": ["humans", "humans-txt", "humans.txt", "humansfile", "humansfile.txt", "humanstext"],
|
|
28
|
-
"
|
|
38
|
+
"action": "ignore"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"name": "Loading",
|
|
42
|
+
"aliases": ["loading", "skeleton", "loader"],
|
|
43
|
+
"action": "ignore"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"name": "Manifest",
|
|
47
|
+
"aliases": ["manifest", "manifest.json", "manifest-json", "webmanifest"],
|
|
48
|
+
"action": "ignore"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"name": "Not Found",
|
|
52
|
+
"aliases": ["not-found", "notfound", "404", "error-404"],
|
|
53
|
+
"action": "ignore"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"name": "Partners",
|
|
57
|
+
"aliases": ["partners", "partner", "affiliates", "integration-partners", "integrations", "collaborators"],
|
|
58
|
+
"src": "../../pixelated-template/src/app/(pages)/partners"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"name": "Podcast",
|
|
62
|
+
"aliases": ["podcast", "podcasts", "audio", "episodes", "show"],
|
|
63
|
+
"src": "../../pixelated-template/src/app/(pages)/podcast"
|
|
29
64
|
},
|
|
30
65
|
{
|
|
31
66
|
"name": "Projects",
|
|
@@ -33,15 +68,35 @@
|
|
|
33
68
|
"our-projects", "our-project", "case-studies", "examples", "showcase", "samples"],
|
|
34
69
|
"src": "../../pixelated-template/src/app/(pages)/projects"
|
|
35
70
|
},
|
|
71
|
+
{
|
|
72
|
+
"name": "Robots",
|
|
73
|
+
"aliases": ["robots", "robots.txt", "robots-txt"],
|
|
74
|
+
"action": "ignore"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"name": "Security.txt",
|
|
78
|
+
"aliases": ["security", "security.txt", "securitytxt", "security-txt", "well-known", "securityfile", "securityfile.txt", "wellknown"],
|
|
79
|
+
"action": "ignore"
|
|
80
|
+
},
|
|
36
81
|
{
|
|
37
82
|
"name": "Services",
|
|
38
83
|
"aliases": ["services", "service", "our-services", "services-page", "offerings", "solutions", "products"],
|
|
39
84
|
"src": "../../pixelated-template/src/app/(pages)/services"
|
|
40
85
|
},
|
|
86
|
+
{
|
|
87
|
+
"name": "Sitemap",
|
|
88
|
+
"aliases": ["sitemap", "sitemap.xml", "sitemap-xml"],
|
|
89
|
+
"action": "ignore"
|
|
90
|
+
},
|
|
41
91
|
{
|
|
42
92
|
"name": "Style Guide",
|
|
43
93
|
"aliases": ["styleguide", "style-guide", "design-system", "ui-kit", "pattern-library"],
|
|
44
94
|
"src": "../../pixelated-template/src/app/(pages)/styleguide"
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"name": "Updates",
|
|
98
|
+
"aliases": ["updates", "update", "changelog"],
|
|
99
|
+
"src": "../../pixelated-template/src/app/(pages)/updates"
|
|
45
100
|
}
|
|
46
101
|
]
|
|
47
102
|
}
|