construct-hub-webapp 0.1.415 → 0.1.419
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/README.md +1 -0
- package/build/asset-manifest.json +10 -10
- package/build/index.html +1 -1
- package/build/static/js/{6.ca3456ca.chunk.js → 6.8a76d46f.chunk.js} +2 -2
- package/build/static/js/6.8a76d46f.chunk.js.map +1 -0
- package/build/static/js/{7.f1806927.chunk.js → 7.7551dbb7.chunk.js} +2 -2
- package/build/static/js/{7.f1806927.chunk.js.map → 7.7551dbb7.chunk.js.map} +1 -1
- package/build/static/js/main.abd99000.chunk.js +2 -0
- package/build/static/js/main.abd99000.chunk.js.map +1 -0
- package/build/static/js/{runtime-main.b8868b3c.js → runtime-main.711672af.js} +2 -2
- package/build/static/js/{runtime-main.b8868b3c.js.map → runtime-main.711672af.js.map} +1 -1
- package/package.json +1 -1
- package/build/static/js/6.ca3456ca.chunk.js.map +0 -1
- package/build/static/js/main.40e21094.chunk.js +0 -2
- package/build/static/js/main.40e21094.chunk.js.map +0 -1
package/README.md
CHANGED
|
@@ -5,18 +5,18 @@
|
|
|
5
5
|
"static/js/1.de94dd4f.chunk.js": "/static/js/1.de94dd4f.chunk.js",
|
|
6
6
|
"static/js/1.de94dd4f.chunk.js.map": "/static/js/1.de94dd4f.chunk.js.map",
|
|
7
7
|
"main.css": "/static/css/main.1e6d8b38.chunk.css",
|
|
8
|
-
"main.js": "/static/js/main.
|
|
9
|
-
"main.js.map": "/static/js/main.
|
|
10
|
-
"runtime-main.js": "/static/js/runtime-main.
|
|
11
|
-
"runtime-main.js.map": "/static/js/runtime-main.
|
|
8
|
+
"main.js": "/static/js/main.abd99000.chunk.js",
|
|
9
|
+
"main.js.map": "/static/js/main.abd99000.chunk.js.map",
|
|
10
|
+
"runtime-main.js": "/static/js/runtime-main.711672af.js",
|
|
11
|
+
"runtime-main.js.map": "/static/js/runtime-main.711672af.js.map",
|
|
12
12
|
"static/js/4.91a3f4bb.chunk.js": "/static/js/4.91a3f4bb.chunk.js",
|
|
13
13
|
"static/js/4.91a3f4bb.chunk.js.map": "/static/js/4.91a3f4bb.chunk.js.map",
|
|
14
14
|
"static/js/5.fb19ba3d.chunk.js": "/static/js/5.fb19ba3d.chunk.js",
|
|
15
15
|
"static/js/5.fb19ba3d.chunk.js.map": "/static/js/5.fb19ba3d.chunk.js.map",
|
|
16
|
-
"static/js/6.
|
|
17
|
-
"static/js/6.
|
|
18
|
-
"static/js/7.
|
|
19
|
-
"static/js/7.
|
|
16
|
+
"static/js/6.8a76d46f.chunk.js": "/static/js/6.8a76d46f.chunk.js",
|
|
17
|
+
"static/js/6.8a76d46f.chunk.js.map": "/static/js/6.8a76d46f.chunk.js.map",
|
|
18
|
+
"static/js/7.7551dbb7.chunk.js": "/static/js/7.7551dbb7.chunk.js",
|
|
19
|
+
"static/js/7.7551dbb7.chunk.js.map": "/static/js/7.7551dbb7.chunk.js.map",
|
|
20
20
|
"static/js/8.73c2c7f3.chunk.js": "/static/js/8.73c2c7f3.chunk.js",
|
|
21
21
|
"static/js/8.73c2c7f3.chunk.js.map": "/static/js/8.73c2c7f3.chunk.js.map",
|
|
22
22
|
"static/js/9.8b744886.chunk.js": "/static/js/9.8b744886.chunk.js",
|
|
@@ -44,9 +44,9 @@
|
|
|
44
44
|
"static/js/5.fb19ba3d.chunk.js.LICENSE.txt": "/static/js/5.fb19ba3d.chunk.js.LICENSE.txt"
|
|
45
45
|
},
|
|
46
46
|
"entrypoints": [
|
|
47
|
-
"static/js/runtime-main.
|
|
47
|
+
"static/js/runtime-main.711672af.js",
|
|
48
48
|
"static/js/5.fb19ba3d.chunk.js",
|
|
49
49
|
"static/css/main.1e6d8b38.chunk.css",
|
|
50
|
-
"static/js/main.
|
|
50
|
+
"static/js/main.abd99000.chunk.js"
|
|
51
51
|
]
|
|
52
52
|
}
|
package/build/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="description" content="Construct Hub helps developers find open-source construct libraries for use with AWS CDK, CDK8s, CDKTf and other construct-based tools."/><meta name="viewport" content="width=device-width,initial-scale=1"/><link rel="icon" href="/favicon.ico"/><meta name="theme-color" content="#ffffff"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>Construct Hub</title><script>var AWSMA={config:{customPageview:!0}}</script><script src="https://a0.awsstatic.com/s_code/js/3.0/awshome_s_code.js"></script><link href="/static/css/main.1e6d8b38.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script src="/static/js/runtime-main.
|
|
1
|
+
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="description" content="Construct Hub helps developers find open-source construct libraries for use with AWS CDK, CDK8s, CDKTf and other construct-based tools."/><meta name="viewport" content="width=device-width,initial-scale=1"/><link rel="icon" href="/favicon.ico"/><meta name="theme-color" content="#ffffff"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>Construct Hub</title><script>var AWSMA={config:{customPageview:!0}}</script><script src="https://a0.awsstatic.com/s_code/js/3.0/awshome_s_code.js"></script><link href="/static/css/main.1e6d8b38.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script src="/static/js/runtime-main.711672af.js"></script><script src="/static/js/5.fb19ba3d.chunk.js"></script><script src="/static/js/main.abd99000.chunk.js"></script></body></html>
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[6],{246:function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var a=n(0),c=n(263),r={contribute:{event:{name:"Contribute Load"}},home:{event:{name:"Home Load"}},faq:{event:{name:"Frequently Asked Questions Load"}},packageProfile:{event:{name:"Package Profile Load"}},search:{event:{name:"Search Load"}},siteTerms:{event:{name:"Site Terms Load"}},notFound:{page:{pageType:"errorPage"},event:{name:"404 Page Load"}}},i=n(122),o=n(1),s=function(e){var t=e.children,n=e.meta,s=e.pageName,l=Object(i.b)(r[s]);Object(a.useEffect)((function(){l()}),[l]);var d=n.suffix,u=void 0===d||d,b=n.title,j=n.description,f=u?"".concat(b," - Construct Hub"):b;return Object(o.jsxs)(o.Fragment,{children:[Object(o.jsxs)(c.a,{children:[!1,Object(o.jsx)("meta",{content:"width=device-width, initial-scale=1",name:"viewport"}),Object(o.jsx)("meta",{charSet:"utf-8"}),Object(o.jsx)("title",{children:f}),Object(o.jsx)("meta",{content:f,property:"og:title"}),Object(o.jsx)("meta",{content:f,name:"twitter:title"}),Object(o.jsx)("meta",{content:"summary",name:"twitter:card"}),Object(o.jsx)("meta",{content:j,name:"description"}),Object(o.jsx)("meta",{content:j,property:"og:description"}),Object(o.jsx)("meta",{content:j,name:"twitter:description"})]}),t]})}},256:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return o}));var a=n(6),c=n(14),r=n(126),i=function(e){return!e||e.length<1?[]:e.reduce((function(e,t){return t.highlight?[].concat(Object(c.a)(e),[t.highlight]):e}),[])},o=function(e){for(var t=e.packageTags,n=e.keywords,i=new Array,o=new Set,s=0,l=[].concat(Object(c.a)(function(e){return(null!==e&&void 0!==e?e:[]).filter((function(e){var t;return Boolean(null===(t=e.keyword)||void 0===t?void 0:t.label)})).map((function(e){var t;return Object(a.a)(Object(a.a)({},e),{},{id:null===(t=e.keyword)||void 0===t?void 0:t.label})}))}(t)),Object(c.a)(function(e){return!e||e.length<1?[]:e.filter((function(e){return Boolean(e)&&!r.a.has(e)})).map((function(e){return{id:e,keyword:{label:e}}}))}(n)));s<l.length;s++){var d=l[s],u=d.keyword.label.toLowerCase();o.has(u)||(i.push(d),o.add(u))}return i}},257:function(e,t,n){"use strict";n.d(t,"c",(function(){return c})),n.d(t,"b",(function(){return r})),n.d(t,"d",(function(){return i})),n.d(t,"a",(function(){return o}));var a=n(13),c=function(e,t){return t?"".concat(t,"/").concat(e):e},r=function(e,t,n){var r="".concat(a.a.PACKAGES_PREFIX,"/"),i=c(e,n),o="/v".concat(t);return"".concat(r).concat(i).concat(o)},i=function(e){var t=e;return(t.startsWith("~")||t.startsWith("^"))&&(t=t.substring(1)),t},o=function(e,t){var n=e.packages.filter((function(e){return e.name===t}));return n.length>1?n.sort((function(e,t){var n=new Date(e.metadata.date);return new Date(t.metadata.date).getTime()-n.getTime()}))[0]:n[0]}},262:function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var a=n(0),c=n(22),r=function(){var e=Object(c.h)().search;return Object(a.useMemo)((function(){return new URLSearchParams(e)}),[e])}},269:function(e,t,n){"use strict";n.d(t,"a",(function(){return c}));var a=n(74),c=function(e){var t=Object(a.b)().data;return(null!==t&&void 0!==t?t:{})[e]}},270:function(e,t,n){"use strict";n.d(t,"a",(function(){return j}));var a=n(5),c=n(0),r=n(22),i=n(121),o=n(13),s=n(262),l=i.d.TypeScript,d="preferred-language",u=function(e){return null!=e&&i.e.has(e)},b=function(e){if(u(e))return e;try{var t,n=null!==(t=localStorage.getItem(d))&&void 0!==t?t:"";if(u(n))return n}catch(a){}return l},j=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.updateUrl,n=e.updateSaved,i=Object(r.h)(),l=i.pathname,j=i.hash,f=Object(r.g)(),h=f.replace,m=Object(s.a)(),O=m.get(o.b.LANGUAGE),g=Object(c.useState)((function(){return b(O)})),p=Object(a.a)(g,2),x=p[0],v=p[1];Object(c.useEffect)((function(){u(O)&&O!==x&&v(O)}),[O]),Object(c.useEffect)((function(){O!==x&&t&&(m.set(o.b.LANGUAGE,x),h({pathname:l,hash:j,search:m.toString()}))}),[x,t]);var w=Object(c.useCallback)((function(e){if(v(e),n)try{localStorage.setItem(d,e)}catch(t){}}),[n]);return Object(c.useMemo)((function(){return[x,w]}),[x,w])}},281:function(e,t,n){"use strict";var a;n.d(t,"b",(function(){return a})),n.d(t,"a",(function(){return X})),function(e){e.Wide="wide"}(a||(a={}));var c=n(0),r=n(390),i=n(153),o=n(213),s=n(236),l=n(231),d=n(207),u=n(636),b=n(91),j=n(89),f=n(49),h=n(282),m=n(63),O=Object(m.a)("packageCard",["author","description","downloads","languages","published","title","version","comment","wideContainer"]),g=n(1),p=function(e){var t=e["data-testid"],n=e.tooltip,a=e.value;return Object(g.jsx)(l.a,{hasArrow:!0,isDisabled:!n,label:n,placement:"left",children:Object(g.jsx)(d.a,{"data-testid":t,fontSize:"xs",zIndex:1,children:a})})},x=function(){var e,t,n,a=U(),c=a.author,r=a.metadata.date,i=a.name,o=Object(b.b)().data,s=null===o||void 0===o||null===(e=o.packages)||void 0===e||null===(t=e[i])||void 0===t||null===(n=t.downloads)||void 0===n?void 0:n.npm,l="string"===typeof c?c:c.name,d=new Date(r);return Object(g.jsxs)(g.Fragment,{children:[void 0!==s&&Object(g.jsx)(p,{"data-testid":O.downloads,tooltip:"Download numbers are periodically sourced from the NPM registry",value:"".concat(s.toLocaleString()," weekly downloads")}),Object(g.jsx)(p,{"data-testid":O.published,value:Object(g.jsx)(h.a,{date:d,fontSize:"xs",formattedDate:Object(u.a)(d,{addSuffix:!0})})}),Object(g.jsx)(p,{"data-testid":O.author,value:Object(g.jsxs)(g.Fragment,{children:["By"," ",Object(g.jsx)(f.a,{color:"blue.500",to:Object(j.c)({query:l}),children:l})]})})]})},v=n(5),w=n(223),y=n(34),k=n(270),S=n(128),C=function(e){var t=e.comment;return Object(g.jsxs)(d.a,{"data-testid":O.comment,fontSize:"md",lineHeight:"tall",noOfLines:4,children:[Object(g.jsxs)(d.a,{as:"span",color:"blue.500",fontWeight:"bold",children:["Editor's note:"," "]}),t]})},D=function(){var e=Object(k.a)(),t=Object(v.a)(e,1)[0],n=U(),a=n.description,c=n.comment,i=n.metadata.constructFramework,s=n.name,l=n.version,u=null===i||void 0===i?void 0:i.name,b=null===i||void 0===i?void 0:i.majorVersion;return Object(g.jsxs)(g.Fragment,{children:[Object(g.jsx)(r.b,{as:y.b,to:Object(j.a)({name:s,version:l,language:t}),children:Object(g.jsxs)(o.a,{align:"center",children:[Object(g.jsx)(S.a,{majorVersion:b,mr:2,name:u}),Object(g.jsx)(w.a,{as:"h3",color:"blue.800","data-testid":O.title,fontSize:"md",fontWeight:"bold",wordBreak:"normal",children:s})]})}),c?Object(g.jsx)(C,{comment:c}):Object(g.jsx)(d.a,{color:"blue.800","data-testid":O.description,fontSize:"md",lineHeight:"tall",noOfLines:4,children:a||"No description available."})]})},T=n(6),H=n(203),z=n(256),A=n(283),W=function(){var e,t,n=(null!==(e=null===(t=U())||void 0===t?void 0:t.metadata)&&void 0!==e?e:{}).packageTags,a=void 0===n?[]:n,c=Object(z.a)(a),r=Object(v.a)(c,1)[0];return Object(g.jsx)(H.a,{fontSize:"xs",children:Object(g.jsx)(A.a,Object(T.a)({},r))})},F=n(121),I=n(285),K={sm:5,md:6,lg:8},L=function(e){var t=e.isRounded,n=void 0!==t&&t,a=e.languages,c=e.name,r=e.size,i=void 0===r?"md":r,o=e.version,s=Object.keys(null!==a&&void 0!==a?a:{});return Object(g.jsx)(g.Fragment,{children:Object.entries(F.c).sort((function(e,t){var n=Object(v.a)(e,1)[0],a=Object(v.a)(t,1)[0];return F.a.indexOf(n)-F.a.indexOf(a)})).map((function(e){var t=Object(v.a)(e,2),a=t[0],r=t[1],l=a,d=l===F.d.TypeScript||s.includes(l),u=l===F.d.TypeScript||F.e.has(l);if(!d)return null;var b=r.name,f=r.icon,h=Object(g.jsx)(f,{"aria-label":"Supports ".concat(b),borderRadius:n?"50%":0,h:K[i],opacity:u?1:.2,w:K[i]});return Object(g.jsx)(I.a,{language:l,children:u?Object(g.jsx)(y.b,{"aria-label":"View package docs for ".concat(l),to:Object(j.a)({name:c,version:o,language:l}),children:h}):h},l)}))})},P=function(){var e=U();return Object(g.jsx)(L,Object(T.a)(Object(T.a)({},e),{},{size:"sm"}))},G=n(284),E=function(){var e=U(),t=e.keywords,n=void 0===t?[]:t,a=e.metadata.packageTags,c=void 0===a?[]:a,r=Object(z.b)({packageTags:c,keywords:n});return Object(g.jsx)(g.Fragment,{children:r.slice(0,10).map((function(e){var t=e.id,n=e.keyword,a=(n=void 0===n?{}:n).label,c=n.color;return Object(g.jsx)(G.a,{value:t,variant:c,children:a},t)}))})},N=function(){return Object(g.jsx)(r.a,{_hover:{"> article":{bg:"gray.50"}},children:Object(g.jsxs)(i.a,{as:"article",bg:"white",border:"base",borderRadius:"sm",boxShadow:"base",color:"blue.800","data-testid":O.wideContainer,h:"full",minH:"12.5rem",templateColumns:{base:"1fr",lg:"1fr 14rem"},w:"full",children:[Object(g.jsxs)(o.a,{direction:"column",justify:"space-between",p:5,sx:{gap:"0.5rem"},children:[Object(g.jsx)(s.a,{spacing:3,children:Object(g.jsx)(D,{})}),Object(g.jsx)(o.a,{align:"center",sx:{gap:"0.5rem"},wrap:"wrap",children:Object(g.jsx)(E,{})})]}),Object(g.jsxs)(o.a,{align:{base:"end",lg:"initial"},borderLeft:{lg:"base"},borderTop:{base:"base",lg:"none"},direction:{base:"row",lg:"column"},justify:"space-between",p:5,sx:{gap:"0.5rem"},children:[Object(g.jsxs)(s.a,{spacing:1,children:[Object(g.jsx)(W,{}),Object(g.jsx)(s.a,{spacing:1,children:Object(g.jsx)(x,{})})]}),Object(g.jsx)(s.a,{"data-testid":O.languages,direction:"row",spacing:2,children:Object(g.jsx)(P,{})})]})]})})},R=Object(c.createContext)(null),U=function(){return Object(c.useContext)(R)},X=function(e){var t=e.pkg,n=e.variant,c=void 0===n?a.Wide:n;return Object(g.jsx)(R.Provider,{value:t,children:c===a.Wide&&Object(g.jsx)(N,{})})}},282:function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var a=n(6),c=n(24),r=n(17),i=n(203),o=n(648),s=n(1),l=["date","format","formattedDate"],d=Object(r.a)((function(e,t){var n=e.date,r=e.format,d=e.formattedDate,u=Object(c.a)(e,l);return Object(s.jsx)(i.a,Object(a.a)(Object(a.a)({as:"time",dateTime:n.toISOString(),ref:t},u),{},{children:null!==d&&void 0!==d?d:Object(o.a)(n,null!==r&&void 0!==r?r:"")}))}));d.displayName="Time"},283:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var a=n(236),c=n(235),r=n(207),i=n(1),o=function(e){var t=e.label,n=e.color,o=e.icon;return Object(i.jsxs)(a.a,{align:"center",direction:"row",spacing:2,children:[Object(i.jsx)(c.a,{alt:"".concat(t," icon"),src:o,w:4}),Object(i.jsx)(r.a,{color:n,fontWeight:"bold",children:t})]})}},284:function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var a=n(6),c=n(24),r=n(640),i=n(89),o=n(49),s=n(1),l=["children","value","label","zIndex"],d=function(e){var t=e.children,n=e.value,d=e.label,u=void 0===d?n:d,b=e.zIndex,j=Object(c.a)(e,l);return Object(s.jsx)(o.a,{"aria-label":"Tag: ".concat(u),to:Object(i.c)({keywords:[n]}),zIndex:b,children:Object(s.jsx)(r.a,Object(a.a)(Object(a.a)({_hover:{textDecoration:"underline"}},j),{},{children:Object(s.jsx)(r.b,{children:t})}))})}},285:function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var a=n(231),c=n(121),r=n(1),i=function(e){var t=e.children,n=e.language,i=c.e.has(n),o=c.b[n],s=i?"Click to view documentation in ".concat(o):"Documentation support for ".concat(o," is coming soon!");return Object(r.jsx)(a.a,{hasArrow:!0,label:s,placement:"top-start",children:Object(r.jsx)("span",{children:t})})}},649:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return ce}));var a,c=n(213),r=n(143),i=n(246),o=n(74),s=n(223),l=n(207),d=n(639),u=n(158),b=n(49),j=n(269),f=n(89),h={X:[4,8,12,16,20],Y:[4,6,8]},m=n(63),O=Object(m.a)("homeRedesign",["page","packageGrid","heroHeader","heroSubtitle","infoContainer","infoSection","infoSectionHeading","infoSectionDescription","infoSectionIcon","featuredContainer","featuredHeader","featuredGrid","cdkTypeSection","cdkTypeSectionHeading","cdkTypeSectionDescription","cdkTypeTab","cdkTypeGrid","cdkTypeSeeAllButton","categoriesContainer","categoriesHeader","categoriesDescription"]),g=n(1),p=[{title:"Monitoring",url:Object(f.c)({keywords:["monitoring"]})},{title:"Containers",url:Object(f.c)({keywords:["containers"]})},{title:"Serverless",url:Object(f.c)({keywords:["serverless"]})},{title:"Databases",url:Object(f.c)({keywords:["databases"]})},{title:"Utilities",url:Object(f.c)({keywords:["utilities"]})},{title:"Deployment",url:Object(f.c)({keywords:["deployment"]})},{title:"Websites",url:Object(f.c)({keywords:["web"]})},{title:"Security",url:Object(f.c)({keywords:["security"]})},{title:"Compliance",url:Object(f.c)({keywords:["compliance"]})},{title:"Network",url:Object(f.c)({keywords:["network"]})},{title:"Artificial Intelligence (AI)",url:Object(f.c)({keywords:["artificial intelligence (ai)"]})},{title:"Cloud Services Integrations",url:Object(f.c)({keywords:["cloud services integrations"]})}],x=function(){var e,t=null!==(e=Object(j.a)("categories"))&&void 0!==e?e:p;return Object(g.jsxs)(c.a,{"data-testid":O.categoriesContainer,direction:"column",my:4,px:h.X,py:h.Y,zIndex:"0",children:[Object(g.jsx)(s.a,{as:"h3",color:"white","data-testid":O.categoriesHeader,fontSize:"1.5rem",fontWeight:"semibold",lineHeight:"lg",mb:1,children:"Find constructs by use case"}),Object(g.jsx)(l.a,{color:"white","data-testid":O.categoriesDescription,lineHeight:"md",mb:5,children:"With hundreds of constructs available, there may already be one (or more!) that that can serve as a building block for your solution."}),Object(g.jsx)(d.a,{children:t.map((function(e){return Object(g.jsx)(d.b,{children:Object(g.jsx)(u.a,{_hover:{backgroundColor:"white"},as:b.a,color:"blue.800",colorScheme:"gray",size:"md",style:{boxShadow:"0px 4px 4px rgba(73, 73, 73, 0.63)"},to:e.url,children:e.title})},e.title)}))})]})},v=n(5),w=n(6),y=n(24),k=n(638),S=n(17),C=n(59),D=n(13),T=n(127),H=n(4),z=n(0),A=n(22),W=n(153),F=n(281),I=function(e){var t=e.packages;return Object(g.jsx)(W.a,{"data-testid":O.packageGrid,gap:4,mt:8,templateColumns:{base:"1fr",xl:"1fr 1fr"},children:t.map((function(e){return Object(g.jsx)(F.a,{pkg:e},"".concat(e.name,"-").concat(e.version))}))})},K=["label","data","tag"],L={community:{label:"Community",tag:"community"},aws:{label:"AWS",tag:"aws-official"},hashicorp:{label:"HashiCorp",tag:"hashicorp-official"}},P=function(e){var t=e.data,n=e.label;return Object(g.jsx)(k.a,{"data-testid":O.cdkTypeTab,"data-value":n,isDisabled:t.page.length<1,children:n})},G=Object(S.a)((function(e,t){var n=e.label,a=e.data,r=e.tag,i=Object(y.a)(e,K);return Object(g.jsxs)(k.c,Object(w.a)(Object(w.a)({"data-testid":O.cdkTypeGrid,ref:t},i),{},{p:0,children:[Object(g.jsx)(I,{packages:a.page}),Object(g.jsx)(c.a,{justify:"center",w:"full",children:Object(g.jsx)(b.a,{"data-testid":O.cdkTypeSeeAllButton,onClick:function(){return window.scrollTo(0,0)},to:Object(f.c)({tags:r?[r]:void 0,sort:C.a.DownloadsDesc}),children:Object(g.jsxs)(u.a,{colorScheme:"blue",my:8,children:["See all ",n," constructs"]})})})]}))})),E=function(){var e=Object(T.a)({tags:[L.community.tag],limit:4,sort:C.a.DownloadsDesc}),t=Object(T.a)({tags:[L.aws.tag],limit:4,sort:C.a.DownloadsDesc}),n=Object(T.a)({tags:[L.hashicorp.tag],limit:4,sort:C.a.DownloadsDesc}),a=function(e,t){var n=Object(A.g)(),a=Object(z.useState)((function(){var a,c=null===(a=n.location.state)||void 0===a?void 0:a[e];return null!==c&&void 0!==c?c:t})),c=Object(v.a)(a,2),r=c[0],i=c[1];return[r,function(t){n.replace(Object(w.a)(Object(w.a)({},n.location),{},{state:Object(w.a)(Object(w.a)({},n.location.state),{},Object(H.a)({},e,t))})),i(t)}]}("cdkTypeTab",0),r=Object(v.a)(a,2),i=r[0],o=r[1];return Object(g.jsxs)(c.a,{bg:"white",color:"blue.800","data-testid":O.cdkTypeSection,direction:"column",px:h.X,py:h.Y,zIndex:"0",children:[Object(g.jsx)(s.a,{as:"h3","data-testid":O.cdkTypeSectionHeading,fontSize:"1.5rem",fontWeight:"semibold",lineHeight:"lg",mb:2,children:"Find constructs by publisher"}),Object(g.jsxs)(l.a,{"data-testid":O.cdkTypeSectionDescription,lineHeight:"md",mb:5,children:["Find constructs published by the open-source community, AWS, and HashiCorp in one location. You can also have your own construct libraries listed on Construct Hub by publishing them on npm registry. More concrete guidance can be found in the"," ",Object(g.jsx)(b.a,{color:"blue.500",to:D.c.CONTRIBUTE,children:"Contribute"})," ","page."]}),Object(g.jsxs)(k.e,{defaultIndex:i,onChange:function(e){return o(e)},variant:"line",children:[Object(g.jsxs)(k.b,{children:[Object(g.jsx)(P,{data:e,label:L.community.label}),Object(g.jsx)(P,{data:t,label:L.aws.label}),Object(g.jsx)(P,{data:n,label:L.hashicorp.label})]}),Object(g.jsxs)(k.d,{minH:"28.5rem",children:[Object(g.jsx)(G,{data:e,label:L.community.label.toLowerCase(),tag:L.community.tag}),Object(g.jsx)(G,{data:t,label:L.aws.label,tag:L.aws.tag}),Object(g.jsx)(G,{data:n,label:L.hashicorp.label,tag:L.hashicorp.tag})]})]})]})},N=n(135),R=n(257),U=n(75),X=function(){var e=Object(j.a)("featuredPackages"),t=Object(v.a)((null!==e&&void 0!==e?e:N.a).sections,1)[0],n=void 0===t?{name:"Recently Updated",showLastUpdated:4}:t,a=function(e){var t=e.showLastUpdated,n=e.showPackages,a=Object(U.b)(),c=a.loading,r=a.error,i=Object(T.a)({limit:25,sort:C.a.PublishDateDesc}).results;return Object(z.useMemo)((function(){return c||r||!i?[]:t?i.slice(0,t):n?n.map((function(e){var t=Object(R.a)({packages:i},e.name);if(t)return Object(w.a)(Object(w.a)({},t),{},{comment:e.comment})})).filter((function(e){return void 0!==e})):void 0}),[i,r,c,t,n])}(n);return a?Object(g.jsxs)(c.a,{color:"white","data-testid":O.featuredContainer,direction:"column",px:h.X,py:h.Y,zIndex:"0",children:[Object(g.jsx)(s.a,{as:"h3","data-testid":O.featuredHeader,fontSize:"1.5rem",fontWeight:"semibold",lineHeight:"lg",children:n.name}),Object(g.jsx)(W.a,{"data-testid":O.featuredGrid,gap:4,mt:8,templateColumns:{base:"1fr",xl:"1fr 1fr"},children:null===a||void 0===a?void 0:a.slice(0,4).map((function(e){return Object(g.jsx)(F.a,{pkg:e},e.name)}))})]}):null},B=n(391),Y=n(65),M=n(203),_=Object(Y.b)(a||(a=Object(B.a)(["\n 0% {\n background-position:0% 50%;\n }\n\n 50% {\n background-position:100% 50%;\n }\n\n 100% {\n background-position:0% 50%;\n }\n"]))),q=Object(S.a)((function(e,t){return Object(g.jsx)(M.a,Object(w.a)({animation:"".concat(_," 10s linear infinite"),bg:"linear-gradient(274.2deg, #143870 20.69%, #1F50A1 84.17%)",bgSize:"200% 200%",ref:t},e))})),J=n(76),V=function(){return Object(g.jsxs)(c.a,{align:"center",color:"white",direction:"column",h:"20rem",justify:"center",px:h.X,py:h.Y,textAlign:"center",zIndex:"1",children:[Object(g.jsx)(s.a,{as:"h1","data-testid":O.heroHeader,size:"xl",children:"Simplify cloud development with constructs"}),Object(g.jsx)(s.a,{as:"h2","data-testid":O.heroSubtitle,fontWeight:"normal",mt:4,size:"md",children:"Find and use open-source Cloud Development Kit (CDK) libraries"}),Object(g.jsx)(M.a,{color:"initial",maxW:"36rem",mt:8,mx:"auto",w:"full",children:Object(g.jsxs)(J.a,{hasButton:!0,children:[Object(g.jsx)(J.b,{}),Object(g.jsx)(J.c,{})]})})]})},Q=n(215),Z=n(236),$=n(235),ee=n(48),te=n(121),ne=function(e){var t=e.title,n=e.description,a=e.children;return Object(g.jsxs)(W.a,{color:"blue.800","data-testid":O.infoSection,px:h.X,py:h.Y,templateColumns:"1fr",templateRows:"auto 1fr auto",children:[Object(g.jsx)(s.a,{as:"h3","data-testid":O.infoSectionHeading,fontSize:"1.5rem",fontWeight:"semibold",lineHeight:"lg",mb:2,children:t}),Object(g.jsx)(l.a,{"data-testid":O.infoSectionDescription,fontSize:"lg",mb:4,children:n}),a]})},ae=function(){return Object(g.jsxs)(c.a,{bg:"white",direction:"column",children:[Object(g.jsx)(M.a,{px:h.X,py:h.Y,children:Object(g.jsx)(l.a,{color:"blue.800",fontSize:"1.25rem",lineHeight:"1.5",textAlign:"center",children:"Construct Hub is a place to discover Cloud Development Kit (CDK) construct libraries, building blocks for cloud applications published by the open-source community, AWS, and partners. CDK is a software development framework for defining cloud infrastructure using familiar programming languages."})}),Object(g.jsx)(Q.a,{mx:h.X,w:"auto"}),Object(g.jsxs)(W.a,{"data-testid":O.infoContainer,templateColumns:{base:"1fr",lg:"1fr auto 1fr"},templateRows:{base:"1fr auto 1fr",lg:"1fr"},textAlign:"left",children:[Object(g.jsx)(ne,{description:" For all three CDKs: AWS CDK, which generates CloudFormation templates, CDK for Terraform (CDKtf), which generates HashiCorp Terraform configuration, and CDK for Kubernetes (CDK8s), which generates Kubernetes manifests.",title:"A single home for all CDKs",children:Object(g.jsx)(c.a,{align:"center",pt:4,sx:{gap:"4rem"},wrap:"wrap",children:Object.entries(ee.b).map((function(e){var t=Object(v.a)(e,2),n=t[0],a=t[1],c=a.name,r=a.imgsrc;return Object(g.jsx)(b.a,{color:"blue.500","data-testid":O.infoSectionIcon,fontWeight:"bold",to:Object(f.c)({cdkType:n,sort:C.a.DownloadsDesc}),children:Object(g.jsxs)(Z.a,{align:"center",spacing:2,children:[Object(g.jsx)($.a,{"aria-label":c,h:8,src:r}),Object(g.jsx)("span",{children:c})]})},n)}))})}),Object(g.jsx)(Q.a,{display:{base:"none",lg:"initial"},h:"auto",my:10,orientation:"vertical"}),Object(g.jsx)(Q.a,{display:{lg:"none"},mx:10,w:"auto"}),Object(g.jsx)(ne,{description:"Find documentation, API reference, and code samples in CDK-supported languages, such as Java, .NET, TypeScript, and Python. Define, test, and deploy cloud infrastructure using loops, conditionals, unit testing, and data structures.",title:"Support across languages",children:Object(g.jsx)(c.a,{align:"center",pt:4,sx:{gap:"4rem"},wrap:"wrap",children:Object.entries(te.c).filter((function(e){var t=Object(v.a)(e,1)[0];return te.e.has(t)})).map((function(e){var t=Object(v.a)(e,2),n=t[0],a=t[1],c=a.icon,r=a.name;return Object(g.jsx)(b.a,{color:"blue.500","data-testid":O.infoSectionIcon,fontWeight:"bold",to:Object(f.c)({languages:[n],sort:C.a.DownloadsDesc}),children:Object(g.jsxs)(Z.a,{align:"center",spacing:2,children:[Object(g.jsx)(c,{"aria-label":r,h:8,w:8}),Object(g.jsx)("span",{children:r})]},n)},n)}))})})]})]})},ce=function(){var e,t,n=Object(o.b)().data,a=null!==(e=null===n||void 0===n||null===(t=n.featureFlags)||void 0===t?void 0:t.fullSite)&&void 0!==e&&e;return Object(g.jsx)(i.a,{meta:{title:"Construct Hub",description:"Construct Hub helps developers find open-source construct libraries for use with AWS CDK, CDK8s, CDKTf and other construct-based tools.",suffix:!1},pageName:"home",children:Object(g.jsxs)(q,{as:c.a,"data-testid":O.page,direction:"column",children:[Object(g.jsx)(r.a,{}),Object(g.jsx)(V,{}),Object(g.jsx)(ae,{}),a?Object(g.jsx)(x,{}):Object(g.jsx)(g.Fragment,{}),a?Object(g.jsx)(E,{}):Object(g.jsx)(g.Fragment,{}),a?Object(g.jsx)(X,{}):Object(g.jsx)(g.Fragment,{})]})})}}}]);
|
|
2
|
-
//# sourceMappingURL=6.
|
|
1
|
+
(this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[6],{246:function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var a=n(0),c=n(263),r={contribute:{event:{name:"Contribute Load"}},home:{event:{name:"Home Load"}},faq:{event:{name:"Frequently Asked Questions Load"}},packageProfile:{event:{name:"Package Profile Load"}},search:{event:{name:"Search Load"}},siteTerms:{event:{name:"Site Terms Load"}},notFound:{page:{pageType:"errorPage"},event:{name:"404 Page Load"}}},i=n(122),o=n(1),s=function(e){var t=e.children,n=e.meta,s=e.pageName,l=Object(i.b)(r[s]);Object(a.useEffect)((function(){l()}),[l]);var d=n.suffix,u=void 0===d||d,b=n.title,j=n.description,f=u?"".concat(b," - Construct Hub"):b;return Object(o.jsxs)(o.Fragment,{children:[Object(o.jsxs)(c.a,{children:[!1,Object(o.jsx)("meta",{content:"width=device-width, initial-scale=1",name:"viewport"}),Object(o.jsx)("meta",{charSet:"utf-8"}),Object(o.jsx)("title",{children:f}),Object(o.jsx)("meta",{content:f,property:"og:title"}),Object(o.jsx)("meta",{content:f,name:"twitter:title"}),Object(o.jsx)("meta",{content:"summary",name:"twitter:card"}),Object(o.jsx)("meta",{content:j,name:"description"}),Object(o.jsx)("meta",{content:j,property:"og:description"}),Object(o.jsx)("meta",{content:j,name:"twitter:description"})]}),t]})}},256:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return o}));var a=n(6),c=n(14),r=n(126),i=function(e){return!e||e.length<1?[]:e.reduce((function(e,t){return t.highlight?[].concat(Object(c.a)(e),[t.highlight]):e}),[])},o=function(e){for(var t=e.packageTags,n=e.keywords,i=new Array,o=new Set,s=0,l=[].concat(Object(c.a)(function(e){return(null!==e&&void 0!==e?e:[]).filter((function(e){var t;return Boolean(null===(t=e.keyword)||void 0===t?void 0:t.label)})).map((function(e){var t;return Object(a.a)(Object(a.a)({},e),{},{id:null===(t=e.keyword)||void 0===t?void 0:t.label})}))}(t)),Object(c.a)(function(e){return!e||e.length<1?[]:e.filter((function(e){return Boolean(e)&&!r.a.has(e)})).map((function(e){return{id:e,keyword:{label:e}}}))}(n)));s<l.length;s++){var d=l[s],u=d.keyword.label.toLowerCase();o.has(u)||(i.push(d),o.add(u))}return i}},257:function(e,t,n){"use strict";n.d(t,"c",(function(){return c})),n.d(t,"b",(function(){return r})),n.d(t,"d",(function(){return i})),n.d(t,"a",(function(){return o}));var a=n(13),c=function(e,t){return t?"".concat(t,"/").concat(e):e},r=function(e,t,n){var r="".concat(a.a.PACKAGES_PREFIX,"/"),i=c(e,n),o="/v".concat(t);return"".concat(r).concat(i).concat(o)},i=function(e){var t=e;return(t.startsWith("~")||t.startsWith("^"))&&(t=t.substring(1)),t},o=function(e,t){var n=e.packages.filter((function(e){return e.name===t}));return n.length>1?n.sort((function(e,t){var n=new Date(e.metadata.date);return new Date(t.metadata.date).getTime()-n.getTime()}))[0]:n[0]}},262:function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var a=n(0),c=n(22),r=function(){var e=Object(c.h)().search;return Object(a.useMemo)((function(){return new URLSearchParams(e)}),[e])}},269:function(e,t,n){"use strict";n.d(t,"a",(function(){return c}));var a=n(74),c=function(e){var t=Object(a.b)().data;return(null!==t&&void 0!==t?t:{})[e]}},270:function(e,t,n){"use strict";n.d(t,"a",(function(){return j}));var a=n(5),c=n(0),r=n(22),i=n(121),o=n(13),s=n(262),l=i.d.TypeScript,d="preferred-language",u=function(e){return null!=e&&i.e.has(e)},b=function(e){if(u(e))return e;try{var t,n=null!==(t=localStorage.getItem(d))&&void 0!==t?t:"";if(u(n))return n}catch(a){}return l},j=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.updateUrl,n=e.updateSaved,i=Object(r.h)(),l=i.pathname,j=i.hash,f=Object(r.g)(),h=f.replace,m=Object(s.a)(),O=m.get(o.b.LANGUAGE),g=Object(c.useState)((function(){return b(O)})),p=Object(a.a)(g,2),x=p[0],v=p[1];Object(c.useEffect)((function(){u(O)&&O!==x&&v(O)}),[O]),Object(c.useEffect)((function(){O!==x&&t&&(m.set(o.b.LANGUAGE,x),h({pathname:l,hash:j,search:m.toString()}))}),[x,t]);var w=Object(c.useCallback)((function(e){if(v(e),n)try{localStorage.setItem(d,e)}catch(t){}}),[n]);return Object(c.useMemo)((function(){return[x,w]}),[x,w])}},281:function(e,t,n){"use strict";var a;n.d(t,"b",(function(){return a})),n.d(t,"a",(function(){return X})),function(e){e.Wide="wide"}(a||(a={}));var c=n(0),r=n(390),i=n(153),o=n(213),s=n(236),l=n(231),d=n(207),u=n(636),b=n(91),j=n(89),f=n(49),h=n(282),m=n(63),O=Object(m.a)("packageCard",["author","description","downloads","languages","published","title","version","comment","wideContainer"]),g=n(1),p=function(e){var t=e["data-testid"],n=e.tooltip,a=e.value;return Object(g.jsx)(l.a,{hasArrow:!0,isDisabled:!n,label:n,placement:"left",children:Object(g.jsx)(d.a,{"data-testid":t,fontSize:"xs",zIndex:1,children:a})})},x=function(){var e,t,n,a=U(),c=a.author,r=a.metadata.date,i=a.name,o=Object(b.b)().data,s=null===o||void 0===o||null===(e=o.packages)||void 0===e||null===(t=e[i])||void 0===t||null===(n=t.downloads)||void 0===n?void 0:n.npm,l="string"===typeof c?c:c.name,d=new Date(r);return Object(g.jsxs)(g.Fragment,{children:[void 0!==s&&Object(g.jsx)(p,{"data-testid":O.downloads,tooltip:"Download numbers are periodically sourced from the NPM registry",value:"".concat(s.toLocaleString()," weekly downloads")}),Object(g.jsx)(p,{"data-testid":O.published,value:Object(g.jsx)(h.a,{date:d,fontSize:"xs",formattedDate:Object(u.a)(d,{addSuffix:!0})})}),Object(g.jsx)(p,{"data-testid":O.author,value:Object(g.jsxs)(g.Fragment,{children:["By"," ",Object(g.jsx)(f.a,{color:"blue.500",to:Object(j.c)({query:l}),children:l})]})})]})},v=n(5),w=n(223),y=n(34),k=n(270),S=n(128),C=function(e){var t=e.comment;return Object(g.jsxs)(d.a,{"data-testid":O.comment,fontSize:"md",lineHeight:"tall",noOfLines:4,children:[Object(g.jsxs)(d.a,{as:"span",color:"blue.500",fontWeight:"bold",children:["Editor's note:"," "]}),t]})},D=function(){var e=Object(k.a)(),t=Object(v.a)(e,1)[0],n=U(),a=n.description,c=n.comment,i=n.metadata.constructFramework,s=n.name,l=n.version,u=null===i||void 0===i?void 0:i.name,b=null===i||void 0===i?void 0:i.majorVersion;return Object(g.jsxs)(g.Fragment,{children:[Object(g.jsx)(r.b,{as:y.b,to:Object(j.a)({name:s,version:l,language:t}),children:Object(g.jsxs)(o.a,{align:"center",children:[Object(g.jsx)(S.a,{majorVersion:b,mr:2,name:u}),Object(g.jsx)(w.a,{as:"h3",color:"blue.800","data-testid":O.title,fontSize:"md",fontWeight:"bold",wordBreak:"normal",children:s})]})}),c?Object(g.jsx)(C,{comment:c}):Object(g.jsx)(d.a,{color:"blue.800","data-testid":O.description,fontSize:"md",lineHeight:"tall",noOfLines:4,children:a||"No description available."})]})},T=n(6),H=n(203),z=n(256),A=n(283),W=function(){var e,t,n=(null!==(e=null===(t=U())||void 0===t?void 0:t.metadata)&&void 0!==e?e:{}).packageTags,a=void 0===n?[]:n,c=Object(z.a)(a),r=Object(v.a)(c,1)[0];return Object(g.jsx)(H.a,{fontSize:"xs",children:Object(g.jsx)(A.a,Object(T.a)({},r))})},I=n(121),F=n(285),K={sm:5,md:6,lg:8},L=function(e){var t=e.isRounded,n=void 0!==t&&t,a=e.languages,c=e.name,r=e.size,i=void 0===r?"md":r,o=e.version,s=Object.keys(null!==a&&void 0!==a?a:{});return Object(g.jsx)(g.Fragment,{children:Object.entries(I.c).sort((function(e,t){var n=Object(v.a)(e,1)[0],a=Object(v.a)(t,1)[0];return I.a.indexOf(n)-I.a.indexOf(a)})).map((function(e){var t=Object(v.a)(e,2),a=t[0],r=t[1],l=a,d=l===I.d.TypeScript||s.includes(l),u=l===I.d.TypeScript||I.e.has(l);if(!d)return null;var b=r.name,f=r.icon,h=Object(g.jsx)(f,{"aria-label":"Supports ".concat(b),borderRadius:n?"50%":0,h:K[i],opacity:u?1:.2,w:K[i]});return Object(g.jsx)(F.a,{language:l,children:u?Object(g.jsx)(y.b,{"aria-label":"View package docs for ".concat(l),to:Object(j.a)({name:c,version:o,language:l}),children:h}):h},l)}))})},P=function(){var e=U();return Object(g.jsx)(L,Object(T.a)(Object(T.a)({},e),{},{size:"sm"}))},G=n(284),E=function(){var e=U(),t=e.keywords,n=void 0===t?[]:t,a=e.metadata.packageTags,c=void 0===a?[]:a,r=Object(z.b)({packageTags:c,keywords:n});return Object(g.jsx)(g.Fragment,{children:r.slice(0,10).map((function(e){var t=e.id,n=e.keyword,a=(n=void 0===n?{}:n).label,c=n.color;return Object(g.jsx)(G.a,{value:t,variant:c,children:a},t)}))})},N=function(){return Object(g.jsx)(r.a,{_hover:{"> article":{bg:"gray.50"}},children:Object(g.jsxs)(i.a,{as:"article",bg:"white",border:"base",borderRadius:"sm",boxShadow:"base",color:"blue.800","data-testid":O.wideContainer,h:"full",minH:"12.5rem",templateColumns:{base:"1fr",lg:"1fr 14rem"},w:"full",children:[Object(g.jsxs)(o.a,{direction:"column",justify:"space-between",p:5,sx:{gap:"0.5rem"},children:[Object(g.jsx)(s.a,{spacing:3,children:Object(g.jsx)(D,{})}),Object(g.jsx)(o.a,{align:"center",sx:{gap:"0.5rem"},wrap:"wrap",children:Object(g.jsx)(E,{})})]}),Object(g.jsxs)(o.a,{align:{base:"end",lg:"initial"},borderLeft:{lg:"base"},borderTop:{base:"base",lg:"none"},direction:{base:"row",lg:"column"},justify:"space-between",p:5,sx:{gap:"0.5rem"},children:[Object(g.jsxs)(s.a,{spacing:1,children:[Object(g.jsx)(W,{}),Object(g.jsx)(s.a,{spacing:1,children:Object(g.jsx)(x,{})})]}),Object(g.jsx)(s.a,{"data-testid":O.languages,direction:"row",spacing:2,children:Object(g.jsx)(P,{})})]})]})})},R=Object(c.createContext)(null),U=function(){return Object(c.useContext)(R)},X=function(e){var t=e.pkg,n=e.variant,c=void 0===n?a.Wide:n;return Object(g.jsx)(R.Provider,{value:t,children:c===a.Wide&&Object(g.jsx)(N,{})})}},282:function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var a=n(6),c=n(24),r=n(17),i=n(203),o=n(648),s=n(1),l=["date","format","formattedDate"],d=Object(r.a)((function(e,t){var n=e.date,r=e.format,d=e.formattedDate,u=Object(c.a)(e,l);return Object(s.jsx)(i.a,Object(a.a)(Object(a.a)({as:"time",dateTime:n.toISOString(),ref:t},u),{},{children:null!==d&&void 0!==d?d:Object(o.a)(n,null!==r&&void 0!==r?r:"")}))}));d.displayName="Time"},283:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var a=n(236),c=n(235),r=n(207),i=n(1),o=function(e){var t=e.label,n=e.color,o=e.icon;return Object(i.jsxs)(a.a,{align:"center",direction:"row",spacing:2,children:[Object(i.jsx)(c.a,{alt:"".concat(t," icon"),src:o,w:4}),Object(i.jsx)(r.a,{color:n,fontWeight:"bold",children:t})]})}},284:function(e,t,n){"use strict";n.d(t,"a",(function(){return d}));var a=n(6),c=n(24),r=n(640),i=n(89),o=n(49),s=n(1),l=["children","value","label","zIndex"],d=function(e){var t=e.children,n=e.value,d=e.label,u=void 0===d?n:d,b=e.zIndex,j=Object(c.a)(e,l);return Object(s.jsx)(o.a,{"aria-label":"Tag: ".concat(u),to:Object(i.c)({keywords:[n]}),zIndex:b,children:Object(s.jsx)(r.a,Object(a.a)(Object(a.a)({_hover:{textDecoration:"underline"}},j),{},{children:Object(s.jsx)(r.b,{children:t})}))})}},285:function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var a=n(231),c=n(121),r=n(1),i=function(e){var t=e.children,n=e.language,i=c.e.has(n),o=c.b[n],s=i?"Click to view documentation in ".concat(o):"Documentation support for ".concat(o," is coming soon!");return Object(r.jsx)(a.a,{hasArrow:!0,label:s,placement:"top-start",children:Object(r.jsx)("span",{children:t})})}},649:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return ce}));var a,c=n(213),r=n(143),i=n(246),o=n(75),s=n(74),l=n(223),d=n(207),u=n(639),b=n(158),j=n(49),f=n(269),h=n(89),m={X:[4,8,12,16,20],Y:[4,6,8]},O=n(63),g=Object(O.a)("homeRedesign",["page","packageGrid","heroHeader","heroSubtitle","infoContainer","infoSection","infoSectionHeading","infoSectionDescription","infoSectionIcon","featuredContainer","featuredHeader","featuredGrid","cdkTypeSection","cdkTypeSectionHeading","cdkTypeSectionDescription","cdkTypeTab","cdkTypeGrid","cdkTypeSeeAllButton","categoriesContainer","categoriesHeader","categoriesDescription"]),p=n(1),x=[{title:"Monitoring",url:Object(h.c)({keywords:["monitoring"]})},{title:"Containers",url:Object(h.c)({keywords:["containers"]})},{title:"Serverless",url:Object(h.c)({keywords:["serverless"]})},{title:"Databases",url:Object(h.c)({keywords:["databases"]})},{title:"Utilities",url:Object(h.c)({keywords:["utilities"]})},{title:"Deployment",url:Object(h.c)({keywords:["deployment"]})},{title:"Websites",url:Object(h.c)({keywords:["web"]})},{title:"Security",url:Object(h.c)({keywords:["security"]})},{title:"Compliance",url:Object(h.c)({keywords:["compliance"]})},{title:"Network",url:Object(h.c)({keywords:["network"]})},{title:"Artificial Intelligence (AI)",url:Object(h.c)({keywords:["artificial intelligence (ai)"]})},{title:"Cloud Services Integrations",url:Object(h.c)({keywords:["cloud services integrations"]})}],v=function(){var e,t=null!==(e=Object(f.a)("categories"))&&void 0!==e?e:x;return Object(p.jsxs)(c.a,{"data-testid":g.categoriesContainer,direction:"column",my:4,px:m.X,py:m.Y,zIndex:"0",children:[Object(p.jsx)(l.a,{as:"h3",color:"white","data-testid":g.categoriesHeader,fontSize:"1.5rem",fontWeight:"semibold",lineHeight:"lg",mb:1,children:"Find constructs by use case"}),Object(p.jsx)(d.a,{color:"white","data-testid":g.categoriesDescription,lineHeight:"md",mb:5,children:"With hundreds of constructs available, there may already be one (or more!) that that can serve as a building block for your solution."}),Object(p.jsx)(u.a,{children:t.map((function(e){return Object(p.jsx)(u.b,{children:Object(p.jsx)(b.a,{_hover:{backgroundColor:"white"},as:j.a,color:"blue.800",colorScheme:"gray",size:"md",style:{boxShadow:"0px 4px 4px rgba(73, 73, 73, 0.63)"},to:e.url,children:e.title})},e.title)}))})]})},w=n(5),y=n(6),k=n(24),S=n(638),C=n(17),D=n(59),T=n(13),H=n(127),z=n(4),A=n(0),W=n(22),I=n(153),F=n(281),K=function(e){var t=e.packages;return Object(p.jsx)(I.a,{"data-testid":g.packageGrid,gap:4,mt:8,templateColumns:{base:"1fr",xl:"1fr 1fr"},children:t.map((function(e){return Object(p.jsx)(F.a,{pkg:e},"".concat(e.name,"-").concat(e.version))}))})},L=["label","data","tag"],P={community:{label:"Community",tag:"community"},aws:{label:"AWS",tag:"aws-official"},hashicorp:{label:"HashiCorp",tag:"hashicorp-official"}},G=function(e){var t=e.data,n=e.label;return Object(p.jsx)(S.a,{"data-testid":g.cdkTypeTab,"data-value":n,isDisabled:t.page.length<1,children:n})},E=Object(C.a)((function(e,t){var n=e.label,a=e.data,r=e.tag,i=Object(k.a)(e,L);return Object(p.jsxs)(S.c,Object(y.a)(Object(y.a)({"data-testid":g.cdkTypeGrid,ref:t},i),{},{p:0,children:[Object(p.jsx)(K,{packages:a.page}),Object(p.jsx)(c.a,{justify:"center",w:"full",children:Object(p.jsx)(j.a,{"data-testid":g.cdkTypeSeeAllButton,onClick:function(){return window.scrollTo(0,0)},to:Object(h.c)({tags:r?[r]:void 0,sort:D.a.DownloadsDesc}),children:Object(p.jsxs)(b.a,{colorScheme:"blue",my:8,children:["See all ",n," constructs"]})})})]}))})),N=function(){var e=Object(H.a)({tags:[P.community.tag],limit:4,sort:D.a.DownloadsDesc}),t=Object(H.a)({tags:[P.aws.tag],limit:4,sort:D.a.DownloadsDesc}),n=Object(H.a)({tags:[P.hashicorp.tag],limit:4,sort:D.a.DownloadsDesc}),a=function(e,t){var n=Object(W.g)(),a=Object(A.useState)((function(){var a,c=null===(a=n.location.state)||void 0===a?void 0:a[e];return null!==c&&void 0!==c?c:t})),c=Object(w.a)(a,2),r=c[0],i=c[1];return[r,function(t){n.replace(Object(y.a)(Object(y.a)({},n.location),{},{state:Object(y.a)(Object(y.a)({},n.location.state),{},Object(z.a)({},e,t))})),i(t)}]}("cdkTypeTab",0),r=Object(w.a)(a,2),i=r[0],o=r[1];return Object(p.jsxs)(c.a,{bg:"white",color:"blue.800","data-testid":g.cdkTypeSection,direction:"column",px:m.X,py:m.Y,zIndex:"0",children:[Object(p.jsx)(l.a,{as:"h3","data-testid":g.cdkTypeSectionHeading,fontSize:"1.5rem",fontWeight:"semibold",lineHeight:"lg",mb:2,children:"Find constructs by publisher"}),Object(p.jsxs)(d.a,{"data-testid":g.cdkTypeSectionDescription,lineHeight:"md",mb:5,children:["Find constructs published by the open-source community, AWS, and HashiCorp in one location. You can also have your own construct libraries listed on Construct Hub by publishing them on npm registry. More concrete guidance can be found in the"," ",Object(p.jsx)(j.a,{color:"blue.500",to:T.c.CONTRIBUTE,children:"Contribute"})," ","page."]}),Object(p.jsxs)(S.e,{defaultIndex:i,onChange:function(e){return o(e)},variant:"line",children:[Object(p.jsxs)(S.b,{children:[Object(p.jsx)(G,{data:e,label:P.community.label}),Object(p.jsx)(G,{data:t,label:P.aws.label}),Object(p.jsx)(G,{data:n,label:P.hashicorp.label})]}),Object(p.jsxs)(S.d,{minH:"28.5rem",children:[Object(p.jsx)(E,{data:e,label:P.community.label.toLowerCase(),tag:P.community.tag}),Object(p.jsx)(E,{data:t,label:P.aws.label,tag:P.aws.tag}),Object(p.jsx)(E,{data:n,label:P.hashicorp.label,tag:P.hashicorp.tag})]})]})]})},R=n(135),U=n(257),X=function(){var e=Object(f.a)("featuredPackages"),t=Object(w.a)((null!==e&&void 0!==e?e:R.a).sections,1)[0],n=void 0===t?{name:"Recently Updated",showLastUpdated:4}:t,a=function(e){var t=e.showLastUpdated,n=e.showPackages,a=Object(o.b)(),c=a.loading,r=a.error,i=Object(H.a)({limit:25,sort:D.a.PublishDateDesc}).results;return Object(A.useMemo)((function(){return c||r||!i?[]:t?i.slice(0,t):n?n.map((function(e){var t=Object(U.a)({packages:i},e.name);if(t)return Object(y.a)(Object(y.a)({},t),{},{comment:e.comment})})).filter((function(e){return void 0!==e})):void 0}),[i,r,c,t,n])}(n);return a?Object(p.jsxs)(c.a,{color:"white","data-testid":g.featuredContainer,direction:"column",px:m.X,py:m.Y,zIndex:"0",children:[Object(p.jsx)(l.a,{as:"h3","data-testid":g.featuredHeader,fontSize:"1.5rem",fontWeight:"semibold",lineHeight:"lg",children:n.name}),Object(p.jsx)(I.a,{"data-testid":g.featuredGrid,gap:4,mt:8,templateColumns:{base:"1fr",xl:"1fr 1fr"},children:null===a||void 0===a?void 0:a.slice(0,4).map((function(e){return Object(p.jsx)(F.a,{pkg:e},e.name)}))})]}):null},B=n(391),Y=n(65),M=n(203),_=Object(Y.b)(a||(a=Object(B.a)(["\n 0% {\n background-position:0% 50%;\n }\n\n 50% {\n background-position:100% 50%;\n }\n\n 100% {\n background-position:0% 50%;\n }\n"]))),q=Object(C.a)((function(e,t){return Object(p.jsx)(M.a,Object(y.a)({animation:"".concat(_," 10s linear infinite"),bg:"linear-gradient(274.2deg, #143870 20.69%, #1F50A1 84.17%)",bgSize:"200% 200%",ref:t},e))})),J=n(76),V=function(){return Object(p.jsxs)(c.a,{align:"center",color:"white",direction:"column",h:"20rem",justify:"center",px:m.X,py:m.Y,textAlign:"center",zIndex:"1",children:[Object(p.jsx)(l.a,{as:"h1","data-testid":g.heroHeader,size:"xl",children:"Simplify cloud development with constructs"}),Object(p.jsx)(l.a,{as:"h2","data-testid":g.heroSubtitle,fontWeight:"normal",mt:4,size:"md",children:"Find and use open-source Cloud Development Kit (CDK) libraries"}),Object(p.jsx)(M.a,{color:"initial",maxW:"36rem",mt:8,mx:"auto",w:"full",children:Object(p.jsxs)(J.a,{hasButton:!0,children:[Object(p.jsx)(J.b,{}),Object(p.jsx)(J.c,{})]})})]})},Q=n(215),Z=n(236),$=n(235),ee=n(48),te=n(121),ne=function(e){var t=e.title,n=e.description,a=e.children;return Object(p.jsxs)(I.a,{color:"blue.800","data-testid":g.infoSection,px:m.X,py:m.Y,templateColumns:"1fr",templateRows:"auto 1fr auto",children:[Object(p.jsx)(l.a,{as:"h3","data-testid":g.infoSectionHeading,fontSize:"1.5rem",fontWeight:"semibold",lineHeight:"lg",mb:2,children:t}),Object(p.jsx)(d.a,{"data-testid":g.infoSectionDescription,fontSize:"lg",mb:4,children:n}),a]})},ae=function(){return Object(p.jsxs)(c.a,{bg:"white",direction:"column",children:[Object(p.jsx)(M.a,{px:m.X,py:m.Y,children:Object(p.jsx)(d.a,{color:"blue.800",fontSize:"1.25rem",lineHeight:"1.5",textAlign:"center",children:"Construct Hub is a place to discover Cloud Development Kit (CDK) construct libraries, building blocks for cloud applications published by the open-source community, AWS, and partners. CDK is a software development framework for defining cloud infrastructure using familiar programming languages."})}),Object(p.jsx)(Q.a,{mx:m.X,w:"auto"}),Object(p.jsxs)(I.a,{"data-testid":g.infoContainer,templateColumns:{base:"1fr",lg:"1fr auto 1fr"},templateRows:{base:"1fr auto 1fr",lg:"1fr"},textAlign:"left",children:[Object(p.jsx)(ne,{description:" For all three CDKs: AWS CDK, which generates CloudFormation templates, CDK for Terraform (CDKtf), which generates HashiCorp Terraform configuration, and CDK for Kubernetes (CDK8s), which generates Kubernetes manifests.",title:"A single home for all CDKs",children:Object(p.jsx)(c.a,{align:"center",pt:4,sx:{gap:"4rem"},wrap:"wrap",children:Object.entries(ee.b).map((function(e){var t=Object(w.a)(e,2),n=t[0],a=t[1],c=a.name,r=a.imgsrc;return Object(p.jsx)(j.a,{color:"blue.500","data-testid":g.infoSectionIcon,fontWeight:"bold",to:Object(h.c)({cdkType:n,sort:D.a.DownloadsDesc}),children:Object(p.jsxs)(Z.a,{align:"center",spacing:2,children:[Object(p.jsx)($.a,{"aria-label":c,h:8,src:r}),Object(p.jsx)("span",{children:c})]})},n)}))})}),Object(p.jsx)(Q.a,{display:{base:"none",lg:"initial"},h:"auto",my:10,orientation:"vertical"}),Object(p.jsx)(Q.a,{display:{lg:"none"},mx:10,w:"auto"}),Object(p.jsx)(ne,{description:"Find documentation, API reference, and code samples in CDK-supported languages, such as Java, .NET, TypeScript, and Python. Define, test, and deploy cloud infrastructure using loops, conditionals, unit testing, and data structures.",title:"Support across languages",children:Object(p.jsx)(c.a,{align:"center",pt:4,sx:{gap:"4rem"},wrap:"wrap",children:Object.entries(te.c).filter((function(e){var t=Object(w.a)(e,1)[0];return te.e.has(t)})).map((function(e){var t=Object(w.a)(e,2),n=t[0],a=t[1],c=a.icon,r=a.name;return Object(p.jsx)(j.a,{color:"blue.500","data-testid":g.infoSectionIcon,fontWeight:"bold",to:Object(h.c)({languages:[n],sort:D.a.DownloadsDesc}),children:Object(p.jsxs)(Z.a,{align:"center",spacing:2,children:[Object(p.jsx)(c,{"aria-label":r,h:8,w:8}),Object(p.jsx)("span",{children:r})]},n)},n)}))})})]})]})},ce=function(){var e,t,n,a=Object(s.b)().data,l=Object(o.b)().data,d=null!==(e=null===a||void 0===a||null===(t=a.featureFlags)||void 0===t?void 0:t.fullSite)&&void 0!==e&&e,u=(null!==(n=null===l||void 0===l?void 0:l.packages.length)&&void 0!==n?n:0)>0;return Object(p.jsx)(i.a,{meta:{title:"Construct Hub",description:"Construct Hub helps developers find open-source construct libraries for use with AWS CDK, CDK8s, CDKTf and other construct-based tools.",suffix:!1},pageName:"home",children:Object(p.jsxs)(q,{as:c.a,"data-testid":g.page,direction:"column",children:[Object(p.jsx)(r.a,{}),Object(p.jsx)(V,{}),Object(p.jsx)(ae,{}),u&&d?Object(p.jsxs)(p.Fragment,{children:[Object(p.jsx)(v,{}),Object(p.jsx)(N,{}),Object(p.jsx)(X,{})]}):null]})})}}}]);
|
|
2
|
+
//# sourceMappingURL=6.8a76d46f.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["constants/pageInfo.ts","components/Page/Page.tsx","util/package.ts","api/package/util.ts","hooks/useQueryParams/useQueryParams.ts","hooks/useConfigValue/useConfigValue.ts","hooks/useLanguage/useLanguage.ts","components/PackageCard/constants.ts","components/PackageCard/testIds.ts","components/PackageCard/Details.tsx","components/PackageCard/EditorsNote.tsx","components/PackageCard/Heading.tsx","components/PackageCard/Highlight.tsx","components/PackageLanguages/PackageLanguages.tsx","components/PackageCard/Languages.tsx","components/PackageCard/Tags.tsx","components/PackageCard/WideCard.tsx","components/PackageCard/PackageCard.tsx","components/Time/Time.tsx","components/Highlight/Highlight.tsx","components/PackageTag/PackageTag.tsx","components/LanguageSupportTooltip/LanguageSupportTooltip.tsx","views/Home/constants.ts","views/Home/testIds.ts","views/Home/Categories.tsx","views/Home/PackageGrid.tsx","views/Home/CDKTypeTabs.tsx","hooks/useHistoryState/useHistoryState.ts","views/Home/Featured.tsx","views/Home/useSection.ts","views/Home/GradientContainer.tsx","views/Home/Hero.tsx","views/Home/InfoSection.tsx","views/Home/Info.tsx","views/Home/Home.tsx"],"names":["pageInfo","contribute","event","name","home","faq","packageProfile","search","siteTerms","notFound","page","pageType","Page","children","meta","pageName","trackPageView","usePageView","useEffect","suffix","title","description","formattedTitle","Helmet","process","content","charSet","property","highlightsFrom","packageTags","length","reduce","accum","tag","highlight","tagObjectsFrom","keywords","tagObjects","Array","tagLabels","Set","filter","Boolean","keyword","label","map","id","mapPackageTags","KEYWORD_IGNORE_LIST","has","mapPackageKeywords","toLowerCase","push","add","getFullPackageName","scope","getAssetsPath","version","prefix","API_PATHS","PACKAGES_PREFIX","body","sanitizeVersion","ver","sanitized","startsWith","substring","findPackage","catalog","pkg","packages","p","sort","p1","p2","date1","Date","metadata","date","getTime","useQueryParams","useLocation","useMemo","URLSearchParams","useConfigValue","key","data","useConfig","defaultLang","Language","TypeScript","LOCAL_KEY","isValidLang","lang","TEMP_SUPPORTED_LANGUAGES","getInitialLang","langFromParams","storedLang","localStorage","getItem","useLanguage","options","updateUrl","updateSaved","pathname","hash","useHistory","replace","params","get","QUERY_PARAMS","LANGUAGE","useState","language","setLanguage","set","toString","update","useCallback","val","setItem","PackageCardType","testIds","createTestIds","Detail","dataTestid","tooltip","value","hasArrow","isDisabled","placement","fontSize","zIndex","Details","usePackageCard","author","useStats","downloads","npm","authorName","publishDate","undefined","toLocaleString","published","Time","formattedDate","formatDistanceToNowStrict","addSuffix","NavLink","color","to","getSearchPath","query","EditorsNote","comment","lineHeight","noOfLines","as","fontWeight","Heading","currentLanguage","constructFramework","cdkType","cdkVersion","majorVersion","Link","getPackagePath","align","CDKType","mr","wordBreak","Highlight","sizes","sm","md","lg","PackageLanguages","isRounded","languages","packageName","size","targets","Object","keys","entries","LANGUAGE_RENDER_MAP","left","right","LANGUAGES","indexOf","info","isSupportedByLibrary","includes","isSupportedByConstructHub","Icon","icon","borderRadius","h","opacity","w","LanguageSupportTooltip","Languages","Tags","tags","slice","PackageTag","variant","WideCard","_hover","bg","border","boxShadow","wideContainer","minH","templateColumns","base","direction","justify","sx","gap","spacing","wrap","borderLeft","borderTop","PackageCardContext","createContext","useContext","PackageCard","Wide","Provider","forwardRef","ref","formatString","format","boxProps","dateTime","toISOString","displayName","alt","src","tagProps","textDecoration","isSupported","langName","LANGUAGE_NAME_MAP","message","SECTION_PADDING","X","Y","DEFAULT_CATEGORIES","url","Categories","categories","categoriesContainer","my","px","py","categoriesHeader","mb","categoriesDescription","category","backgroundColor","colorScheme","style","PackageGrid","packageGrid","mt","xl","tabs","community","aws","hashicorp","PackageTab","cdkTypeTab","PackageTabPanel","props","cdkTypeGrid","cdkTypeSeeAllButton","onClick","window","scrollTo","CatalogSearchSort","DownloadsDesc","CDKTypeTabs","useCatalogResults","limit","initialValue","history","location","state","rawState","rawSetState","useHistoryState","tabIndex","setTabIndex","cdkTypeSection","cdkTypeSectionHeading","cdkTypeSectionDescription","ROUTES","CONTRIBUTE","defaultIndex","onChange","index","Featured","homePackages","DEFAULT_FEATURED_PACKAGES","sections","featured","showLastUpdated","section","showPackages","useCatalog","loading","error","results","PublishDateDesc","useSection","featuredContainer","featuredHeader","featuredGrid","animation","keyframes","GradientContainer","bgSize","Hero","textAlign","heroHeader","heroSubtitle","maxW","mx","SearchBar","hasButton","InfoSection","infoSection","templateRows","infoSectionHeading","infoSectionDescription","Info","infoContainer","pt","CDKTYPE_RENDER_MAP","cdktype","imgsrc","infoSectionIcon","display","orientation","Home","config","fullSite","featureFlags","hasPackages","Flex","DevPreviewBanner"],"mappings":"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","file":"static/js/6.8a76d46f.chunk.js","sourcesContent":["export const pageInfo = {\n contribute: {\n event: {\n name: \"Contribute Load\",\n },\n },\n home: {\n event: {\n name: \"Home Load\",\n },\n },\n faq: {\n event: {\n name: \"Frequently Asked Questions Load\",\n },\n },\n packageProfile: {\n event: {\n name: \"Package Profile Load\",\n },\n },\n search: {\n event: {\n name: \"Search Load\",\n },\n },\n siteTerms: {\n event: {\n name: \"Site Terms Load\",\n },\n },\n notFound: {\n page: {\n pageType: \"errorPage\",\n },\n event: {\n name: \"404 Page Load\",\n },\n },\n} as const;\n","import { FunctionComponent, useEffect } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { pageInfo } from \"../../constants/pageInfo\";\nimport { usePageView } from \"../../contexts/Analytics\";\n\nexport interface PageProps {\n pageName: keyof typeof pageInfo;\n meta: {\n suffix?: boolean;\n title: string;\n description: string;\n };\n}\n\nexport const Page: FunctionComponent<PageProps> = ({\n children,\n meta,\n pageName,\n}) => {\n const trackPageView = usePageView(pageInfo[pageName]);\n\n useEffect(() => {\n trackPageView();\n }, [trackPageView]);\n\n const { suffix = true, title, description } = meta;\n const formattedTitle = suffix ? `${title} - Construct Hub` : title;\n\n return (\n <>\n <Helmet>\n {process.env.NODE_ENV === \"development\" && (\n <meta\n content=\"default-src 'self' 'unsafe-inline' https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; connect-src 'self' https://*.shortbread.aws.dev ws://localhost:3000 https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; frame-src 'none'; img-src 'self' https://* http://*.omtrdc.net; object-src 'none'; style-src 'self' 'unsafe-inline';\"\n httpEquiv=\"Content-Security-Policy\"\n />\n )}\n\n <meta content=\"width=device-width, initial-scale=1\" name=\"viewport\" />\n <meta charSet=\"utf-8\" />\n\n <title>{formattedTitle}</title>\n <meta content={formattedTitle} property=\"og:title\" />\n <meta content={formattedTitle} name=\"twitter:title\" />\n <meta content=\"summary\" name=\"twitter:card\" />\n\n <meta content={description} name=\"description\" />\n <meta content={description} property=\"og:description\" />\n <meta content={description} name=\"twitter:description\" />\n </Helmet>\n {children}\n </>\n );\n};\n","import { PackageHighlight, PackageTagConfig } from \"../api/config\";\nimport { KEYWORD_IGNORE_LIST } from \"../constants/keywords\";\n\nexport interface TagObject extends PackageTagConfig {}\n\n/**\n * Reduces package tags to only return highlight tags\n */\nexport const highlightsFrom = (packageTags?: PackageTagConfig[]) => {\n if (!packageTags || packageTags.length < 1) return [];\n\n return packageTags.reduce(\n (accum: PackageHighlight[], tag: PackageTagConfig): PackageHighlight[] => {\n if (tag.highlight) {\n return [...accum, tag.highlight];\n }\n\n return accum;\n },\n []\n );\n};\n\n/**\n * Maps packageTags to an array of TagObjects, which can be rendered by the PackageTags Component\n */\nexport const mapPackageTags = (\n packageTags?: PackageTagConfig[]\n): TagObject[] => {\n return (packageTags ?? [])\n .filter((tag) => {\n return Boolean(tag.keyword?.label);\n })\n .map((tag) => ({\n ...tag,\n id: tag.keyword?.label!,\n }));\n};\n\n/**\n * Maps keywords to an array of TagObjects, which can be rendered by the PackageTags component\n */\nexport const mapPackageKeywords = (keywords?: string[]): TagObject[] => {\n if (!keywords || keywords.length < 1) return [];\n\n return keywords\n .filter((label) => Boolean(label) && !KEYWORD_IGNORE_LIST.has(label))\n .map((label) => ({\n id: label,\n keyword: {\n label,\n },\n }));\n};\n\n/**\n * Maps packageTags and keywords to a list of TagObjects, using mapPackageTags and mapPackageKeywords\n */\nexport const tagObjectsFrom = ({\n packageTags,\n keywords,\n}: {\n packageTags?: PackageTagConfig[];\n keywords?: string[];\n}): TagObject[] => {\n const tagObjects = new Array<TagObject>();\n const tagLabels = new Set<string>();\n\n for (const tag of [\n ...mapPackageTags(packageTags),\n ...mapPackageKeywords(keywords),\n ]) {\n const label = tag.keyword!.label.toLowerCase();\n if (!tagLabels.has(label)) {\n tagObjects.push(tag);\n tagLabels.add(label);\n }\n }\n\n return tagObjects;\n};\n","import { API_PATHS } from \"../../constants/url\";\nimport { CatalogPackage, Packages } from \"./packages\";\n\nexport const getFullPackageName = (name: string, scope?: string) => {\n return scope ? `${scope}/${name}` : name;\n};\n\nexport const getAssetsPath = (\n name: string,\n version: string,\n scope?: string\n) => {\n const prefix = `${API_PATHS.PACKAGES_PREFIX}/`;\n const body = getFullPackageName(name, scope);\n const suffix = `/v${version}`;\n return `${prefix}${body}${suffix}`;\n};\n\nexport const sanitizeVersion = (ver: string) => {\n let sanitized = ver;\n if (sanitized.startsWith(\"~\") || sanitized.startsWith(\"^\")) {\n sanitized = sanitized.substring(1);\n }\n return sanitized;\n};\n\nexport const findPackage = (\n catalog: Packages,\n pkg: string\n): CatalogPackage | undefined => {\n const packages = catalog.packages.filter((p) => p.name === pkg);\n\n // return the most recently published version\n if (packages.length > 1) {\n return packages.sort((p1, p2) => {\n const date1 = new Date(p1.metadata.date);\n const date2 = new Date(p2.metadata.date);\n return date2.getTime() - date1.getTime();\n })[0];\n }\n\n return packages[0];\n};\n","import { useMemo } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nexport const useQueryParams = () => {\n const { search } = useLocation();\n\n return useMemo(() => new URLSearchParams(search), [search]);\n};\n","import type { Config } from \"../../api/config\";\nimport { useConfig } from \"../../contexts/Config\";\n\nexport const useConfigValue = <T extends keyof Config>(key: T) => {\n const { data } = useConfig();\n return (data ?? {})[key];\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useLocation, useHistory } from \"react-router-dom\";\nimport { Language, TEMP_SUPPORTED_LANGUAGES } from \"../../constants/languages\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\nimport { useQueryParams } from \"../../hooks/useQueryParams\";\n\n// Only supported language atm\nconst defaultLang = Language.TypeScript;\n\nconst LOCAL_KEY = \"preferred-language\";\n\nconst isValidLang = (lang?: string | Language): lang is Language =>\n lang != null && TEMP_SUPPORTED_LANGUAGES.has(lang as Language);\n\nconst getInitialLang = (langFromParams: string | Language): Language => {\n // First, use language from query params in url\n if (isValidLang(langFromParams)) {\n return langFromParams;\n }\n\n // Next check for one stored in localStorage\n try {\n const storedLang = (localStorage.getItem(LOCAL_KEY) ?? \"\") as Language;\n if (isValidLang(storedLang)) return storedLang;\n } catch {\n // Do nothing, we just don't want to crash if localStorage access is blocked.\n }\n\n // Otherwise fallback to a default\n return defaultLang;\n};\n\nexport interface UseLanguageOptions {\n /**\n * Syncs the preferred language to a query param in URL\n */\n updateUrl?: boolean;\n /**\n * Saves the selected language to localStorage on select\n */\n updateSaved?: boolean;\n}\n\nexport const useLanguage = (options: UseLanguageOptions = {}) => {\n const { updateUrl, updateSaved } = options;\n const { pathname, hash } = useLocation();\n const { replace } = useHistory();\n const params = useQueryParams();\n const langFromParams = params.get(QUERY_PARAMS.LANGUAGE) as Language;\n\n // Passed as function to guarantee it runs on hook mount\n const [language, setLanguage] = useState<Language>(() =>\n getInitialLang(langFromParams)\n );\n\n // State subscribes to query param changes\n useEffect(() => {\n if (isValidLang(langFromParams) && langFromParams !== language) {\n setLanguage(langFromParams);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [langFromParams]);\n\n // Syncs language changes to URL if updateUrl = true\n useEffect(() => {\n if (langFromParams !== language && updateUrl) {\n params.set(QUERY_PARAMS.LANGUAGE, language);\n replace({ pathname, hash, search: params.toString() });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [language, updateUrl]);\n\n const update = useCallback(\n (val: Language) => {\n setLanguage(val);\n\n if (updateSaved) {\n try {\n localStorage.setItem(LOCAL_KEY, val);\n } catch {\n // OK to fail silently\n }\n }\n },\n [updateSaved]\n );\n\n return useMemo(() => [language, update] as const, [language, update]);\n};\n","export enum PackageCardType {\n Wide = \"wide\",\n}\n","import { createTestIds } from \"../../util/createTestIds\";\n\nconst testIds = createTestIds(\"packageCard\", [\n \"author\",\n \"description\",\n \"downloads\",\n \"languages\",\n \"published\",\n \"title\",\n \"version\",\n \"comment\",\n \"wideContainer\",\n] as const);\n\nexport default testIds;\n","import { Text, Tooltip } from \"@chakra-ui/react\";\nimport { formatDistanceToNowStrict } from \"date-fns\";\nimport { FunctionComponent, ReactChild } from \"react\";\nimport { useStats } from \"../../contexts/Stats\";\nimport { getSearchPath } from \"../../util/url\";\nimport { NavLink } from \"../NavLink\";\nimport { Time } from \"../Time\";\nimport { usePackageCard } from \"./PackageCard\";\nimport testIds from \"./testIds\";\n\ninterface DetailProps {\n \"data-testid\": string;\n\n tooltip?: string;\n value: ReactChild;\n}\n\nconst Detail: FunctionComponent<DetailProps> = ({\n \"data-testid\": dataTestid,\n tooltip,\n value,\n}) => (\n <Tooltip hasArrow isDisabled={!tooltip} label={tooltip} placement=\"left\">\n {/* zIndex required to allow tooltip to display due to card link overlay */}\n <Text data-testid={dataTestid} fontSize=\"xs\" zIndex={1}>\n {value}\n </Text>\n </Tooltip>\n);\n\nexport const Details: FunctionComponent = () => {\n const {\n author,\n metadata: { date },\n name,\n } = usePackageCard();\n\n const { data } = useStats();\n const downloads: number | undefined = data?.packages?.[name]?.downloads?.npm;\n\n const authorName = typeof author === \"string\" ? author : author.name;\n const publishDate = new Date(date);\n\n return (\n <>\n {downloads !== undefined && (\n <Detail\n data-testid={testIds.downloads}\n tooltip=\"Download numbers are periodically sourced from the NPM registry\"\n value={`${downloads.toLocaleString()} weekly downloads`}\n />\n )}\n <Detail\n data-testid={testIds.published}\n value={\n <Time\n date={publishDate}\n fontSize=\"xs\"\n formattedDate={formatDistanceToNowStrict(publishDate, {\n addSuffix: true,\n })}\n />\n }\n />\n <Detail\n data-testid={testIds.author}\n value={\n <>\n By{\" \"}\n <NavLink\n color=\"blue.500\"\n to={getSearchPath({\n query: authorName,\n })}\n >\n {authorName}\n </NavLink>\n </>\n }\n />\n </>\n );\n};\n","import { Text } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport testIds from \"./testIds\";\n\nexport const EditorsNote: FunctionComponent<{ comment?: string }> = ({\n comment,\n}) => {\n return (\n <Text\n data-testid={testIds.comment}\n fontSize=\"md\"\n lineHeight=\"tall\"\n noOfLines={4}\n >\n <Text as=\"span\" color=\"blue.500\" fontWeight=\"bold\">\n Editor's note:{\" \"}\n </Text>\n {comment}\n </Text>\n );\n};\n","import {\n Flex,\n Heading as ChakraHeading,\n LinkOverlay,\n Text,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { useLanguage } from \"../../hooks/useLanguage\";\nimport { getPackagePath } from \"../../util/url\";\nimport { CDKTypeBadge } from \"../CDKType\";\nimport { EditorsNote } from \"./EditorsNote\";\nimport { usePackageCard } from \"./PackageCard\";\nimport testIds from \"./testIds\";\n\nexport const Heading: FunctionComponent = () => {\n const [currentLanguage] = useLanguage();\n const {\n description,\n comment,\n metadata: { constructFramework },\n name,\n version,\n } = usePackageCard();\n\n const cdkType = constructFramework?.name;\n const cdkVersion = constructFramework?.majorVersion;\n\n return (\n <>\n <LinkOverlay\n as={Link}\n to={getPackagePath({\n name,\n version,\n language: currentLanguage,\n })}\n >\n <Flex align=\"center\">\n <CDKTypeBadge majorVersion={cdkVersion} mr={2} name={cdkType} />\n <ChakraHeading\n as=\"h3\"\n color=\"blue.800\"\n data-testid={testIds.title}\n fontSize=\"md\"\n fontWeight=\"bold\"\n wordBreak=\"normal\"\n >\n {name}\n </ChakraHeading>\n </Flex>\n </LinkOverlay>\n {comment ? (\n <EditorsNote comment={comment} />\n ) : (\n <Text\n color=\"blue.800\"\n data-testid={testIds.description}\n fontSize=\"md\"\n lineHeight=\"tall\"\n noOfLines={4}\n >\n {description || \"No description available.\"}\n </Text>\n )}\n </>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { highlightsFrom } from \"../../util/package\";\nimport { Highlight as HighlightComponent } from \"../Highlight\";\nimport { usePackageCard } from \"./PackageCard\";\n\nexport const Highlight: FunctionComponent = () => {\n const { packageTags = [] } = usePackageCard()?.metadata ?? {};\n const [highlight] = highlightsFrom(packageTags);\n\n return (\n <Box fontSize=\"xs\">\n <HighlightComponent {...highlight} />\n </Box>\n );\n};\n","import type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport {\n Language,\n LANGUAGES,\n LANGUAGE_RENDER_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\nimport { getPackagePath } from \"../../util/url\";\nimport { LanguageSupportTooltip } from \"../LanguageSupportTooltip\";\n\nconst sizes = {\n sm: 5,\n md: 6,\n lg: 8,\n};\n\nexport interface PackageLanguagesProps {\n isRounded?: boolean;\n languages?: Partial<Record<Language, unknown>>;\n name: string;\n size?: \"sm\" | \"md\" | \"lg\";\n version: string;\n}\n\nexport const PackageLanguages: FunctionComponent<PackageLanguagesProps> = ({\n isRounded = false,\n languages,\n name: packageName,\n size = \"md\",\n version,\n}) => {\n const targets = Object.keys(languages ?? {}) as Language[];\n return (\n <>\n {Object.entries(LANGUAGE_RENDER_MAP)\n // Ensure entries are always sorted in a stable way\n .sort(\n ([left], [right]) =>\n LANGUAGES.indexOf(left as Language) -\n LANGUAGES.indexOf(right as Language)\n )\n .map(([lang, info]) => {\n const language = lang as Language;\n\n const isSupportedByLibrary =\n language === Language.TypeScript || targets.includes(language);\n\n const isSupportedByConstructHub =\n language === Language.TypeScript || // TypeScript is always supported\n // Otherwise, the language must be supported by ConstructHub\n TEMP_SUPPORTED_LANGUAGES.has(language);\n\n if (!isSupportedByLibrary) return null;\n\n const { name, icon: Icon } = info;\n\n const icon = (\n <Icon\n aria-label={`Supports ${name}`}\n borderRadius={isRounded ? \"50%\" : 0}\n h={sizes[size]}\n opacity={isSupportedByConstructHub ? 1 : 0.2}\n w={sizes[size]}\n />\n );\n\n return (\n <LanguageSupportTooltip key={language} language={language}>\n {isSupportedByConstructHub ? (\n <Link\n aria-label={`View package docs for ${language}`}\n to={getPackagePath({ name: packageName, version, language })}\n >\n {icon}\n </Link>\n ) : (\n icon\n )}\n </LanguageSupportTooltip>\n );\n })}\n </>\n );\n};\n","import type { FunctionComponent } from \"react\";\nimport { PackageLanguages } from \"../PackageLanguages\";\nimport { usePackageCard } from \"./PackageCard\";\n\nexport const Languages: FunctionComponent = () => {\n const pkg = usePackageCard();\n return <PackageLanguages {...pkg} size=\"sm\" />;\n};\n","import { FunctionComponent } from \"react\";\nimport { tagObjectsFrom } from \"../../util/package\";\nimport { PackageTag } from \"../PackageTag\";\nimport { usePackageCard } from \"./PackageCard\";\n\nexport const Tags: FunctionComponent = () => {\n const {\n keywords = [],\n metadata: { packageTags = [] },\n } = usePackageCard();\n\n const tags = tagObjectsFrom({\n packageTags,\n keywords,\n });\n\n return (\n <>\n {tags.slice(0, 10).map(({ id, keyword: { label, color } = {} }) => (\n <PackageTag key={id} value={id} variant={color}>\n {label}\n </PackageTag>\n ))}\n </>\n );\n};\n","import { Flex, Grid, LinkBox, Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Details } from \"./Details\";\nimport { Heading } from \"./Heading\";\nimport { Highlight } from \"./Highlight\";\nimport { Languages } from \"./Languages\";\nimport { Tags } from \"./Tags\";\nimport testIds from \"./testIds\";\n\nexport const WideCard: FunctionComponent = () => {\n return (\n <LinkBox\n _hover={{\n \"> article\": {\n bg: \"gray.50\",\n },\n }}\n >\n <Grid\n as=\"article\"\n bg=\"white\"\n border=\"base\"\n borderRadius=\"sm\"\n boxShadow=\"base\"\n color=\"blue.800\"\n data-testid={testIds.wideContainer}\n h=\"full\"\n minH=\"12.5rem\"\n templateColumns={{ base: \"1fr\", lg: \"1fr 14rem\" }}\n w=\"full\"\n >\n {/* Top / Left side of card */}\n <Flex\n direction=\"column\"\n justify=\"space-between\"\n p={5}\n sx={{ gap: \"0.5rem\" }}\n >\n <Stack spacing={3}>\n <Heading />\n </Stack>\n\n <Flex align=\"center\" sx={{ gap: \"0.5rem\" }} wrap=\"wrap\">\n <Tags />\n </Flex>\n </Flex>\n\n {/* Bottom / Right side of card */}\n <Flex\n align={{ base: \"end\", lg: \"initial\" }}\n borderLeft={{ lg: \"base\" }}\n borderTop={{ base: \"base\", lg: \"none\" }}\n direction={{ base: \"row\", lg: \"column\" }}\n justify=\"space-between\"\n p={5}\n sx={{ gap: \"0.5rem\" }}\n >\n <Stack spacing={1}>\n <Highlight />\n <Stack spacing={1}>\n <Details />\n </Stack>\n </Stack>\n\n <Stack data-testid={testIds.languages} direction=\"row\" spacing={2}>\n <Languages />\n </Stack>\n </Flex>\n </Grid>\n </LinkBox>\n );\n};\n","import { createContext, FunctionComponent, useContext } from \"react\";\nimport { CatalogPackage } from \"../../api/package/packages\";\nimport { PackageCardType } from \"./constants\";\nimport { WideCard } from \"./WideCard\";\n\nexport interface PackageCardProps {\n pkg: CatalogPackage;\n variant?: PackageCardType;\n}\n\nconst PackageCardContext = createContext<\n (CatalogPackage & { comment?: string }) | null\n>(null);\n\nexport const usePackageCard = () => useContext(PackageCardContext)!;\n\nexport const PackageCard: FunctionComponent<PackageCardProps> = ({\n pkg,\n variant = PackageCardType.Wide,\n}) => {\n return (\n <PackageCardContext.Provider value={pkg}>\n {variant === PackageCardType.Wide && <WideCard />}\n </PackageCardContext.Provider>\n );\n};\n","import { Box, BoxProps, forwardRef } from \"@chakra-ui/react\";\nimport { format } from \"date-fns\";\n\nexport type TimeOptions = {\n date: Date;\n format?: string;\n formattedDate?: string;\n};\n\nexport interface TimeProps extends BoxProps, TimeOptions {}\n\nexport const Time = forwardRef<TimeProps, \"time\">(\n ({ date, format: formatString, formattedDate, ...boxProps }, ref) => {\n return (\n <Box as=\"time\" dateTime={date.toISOString()} ref={ref} {...boxProps}>\n {formattedDate ?? format(date, formatString ?? \"\")}\n </Box>\n );\n }\n);\n\nTime.displayName = \"Time\";\n","import { Stack, Image, Text } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\ninterface HighlightProps {\n label: string;\n color?: string;\n icon?: string;\n}\n\nexport const Highlight: FunctionComponent<HighlightProps> = ({\n label,\n color,\n icon,\n}: HighlightProps) => {\n return (\n <Stack align=\"center\" direction=\"row\" spacing={2}>\n <Image alt={`${label} icon`} src={icon} w={4} />\n <Text color={color} fontWeight=\"bold\">\n {label}\n </Text>\n </Stack>\n );\n};\n","import { Tag, TagLabel, TagProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { getSearchPath } from \"../../util/url\";\nimport { NavLink } from \"../NavLink\";\n\nexport interface PackageTagProps extends TagProps {\n value: string;\n label?: string;\n zIndex?: string | number;\n}\n\nexport const PackageTag: FunctionComponent<PackageTagProps> = ({\n children,\n value,\n label = value,\n zIndex,\n ...tagProps\n}) => {\n return (\n <NavLink\n aria-label={`Tag: ${label}`}\n to={getSearchPath({ keywords: [value] })}\n zIndex={zIndex}\n >\n <Tag\n _hover={{\n textDecoration: \"underline\",\n }}\n {...tagProps}\n >\n <TagLabel>{children}</TagLabel>\n </Tag>\n </NavLink>\n );\n};\n","import { Tooltip } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport {\n Language,\n LANGUAGE_NAME_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\n\nexport interface LanguageSupportTooltipProps {\n language: Language;\n}\n\nexport const LanguageSupportTooltip: FunctionComponent<LanguageSupportTooltipProps> =\n ({ children, language }) => {\n const isSupported = TEMP_SUPPORTED_LANGUAGES.has(language);\n const langName = LANGUAGE_NAME_MAP[language];\n\n const message = isSupported\n ? `Click to view documentation in ${langName}`\n : `Documentation support for ${langName} is coming soon!`;\n\n return (\n <Tooltip hasArrow label={message} placement=\"top-start\">\n <span>{children}</span>\n </Tooltip>\n );\n };\n","export const SECTION_PADDING = {\n X: [4, 8, 12, 16, 20],\n Y: [4, 6, 8],\n};\n","import { createTestIds } from \"../../util/createTestIds\";\n\nexport default createTestIds(\"homeRedesign\", [\n \"page\",\n \"packageGrid\",\n // Hero Section\n \"heroHeader\",\n \"heroSubtitle\",\n // Info Section\n \"infoContainer\",\n \"infoSection\",\n \"infoSectionHeading\",\n \"infoSectionDescription\",\n \"infoSectionIcon\",\n // Featured / Recently Updated Section\n \"featuredContainer\",\n \"featuredHeader\",\n \"featuredGrid\",\n // CDK Type Section\n \"cdkTypeSection\",\n \"cdkTypeSectionHeading\",\n \"cdkTypeSectionDescription\",\n \"cdkTypeTab\",\n \"cdkTypeGrid\",\n \"cdkTypeSeeAllButton\",\n \"categoriesContainer\",\n \"categoriesHeader\",\n \"categoriesDescription\",\n] as const);\n","import { Flex, Heading, Text, Button, Wrap, WrapItem } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Category } from \"../../api/config\";\nimport { NavLink } from \"../../components/NavLink\";\nimport { useConfigValue } from \"../../hooks/useConfigValue\";\nimport { getSearchPath } from \"../../util/url\";\nimport { SECTION_PADDING } from \"./constants\";\nimport testIds from \"./testIds\";\n\n/**\n * Categories used if config does not have specific categories\n */\nconst DEFAULT_CATEGORIES: Category[] = [\n { title: \"Monitoring\", url: getSearchPath({ keywords: [\"monitoring\"] }) },\n { title: \"Containers\", url: getSearchPath({ keywords: [\"containers\"] }) },\n { title: \"Serverless\", url: getSearchPath({ keywords: [\"serverless\"] }) },\n { title: \"Databases\", url: getSearchPath({ keywords: [\"databases\"] }) },\n { title: \"Utilities\", url: getSearchPath({ keywords: [\"utilities\"] }) },\n { title: \"Deployment\", url: getSearchPath({ keywords: [\"deployment\"] }) },\n { title: \"Websites\", url: getSearchPath({ keywords: [\"web\"] }) },\n { title: \"Security\", url: getSearchPath({ keywords: [\"security\"] }) },\n { title: \"Compliance\", url: getSearchPath({ keywords: [\"compliance\"] }) },\n { title: \"Network\", url: getSearchPath({ keywords: [\"network\"] }) },\n {\n title: \"Artificial Intelligence (AI)\",\n url: getSearchPath({ keywords: [\"artificial intelligence (ai)\"] }),\n },\n {\n title: \"Cloud Services Integrations\",\n url: getSearchPath({ keywords: [\"cloud services integrations\"] }),\n },\n];\n\nexport const Categories: FunctionComponent = () => {\n const categories = useConfigValue(\"categories\") ?? DEFAULT_CATEGORIES;\n\n return (\n <Flex\n data-testid={testIds.categoriesContainer}\n direction=\"column\"\n my={4}\n px={SECTION_PADDING.X}\n py={SECTION_PADDING.Y}\n zIndex=\"0\"\n >\n <Heading\n as=\"h3\"\n color=\"white\"\n data-testid={testIds.categoriesHeader}\n fontSize=\"1.5rem\"\n fontWeight=\"semibold\"\n lineHeight=\"lg\"\n mb={1}\n >\n Find constructs by use case\n </Heading>\n <Text\n color=\"white\"\n data-testid={testIds.categoriesDescription}\n lineHeight=\"md\"\n mb={5}\n >\n With hundreds of constructs available, there may already be one (or\n more!) that that can serve as a building block for your solution.\n </Text>\n\n <Wrap>\n {categories.map((category) => (\n <WrapItem key={category.title}>\n <Button\n _hover={{ backgroundColor: \"white\" }}\n as={NavLink}\n color=\"blue.800\"\n colorScheme=\"gray\"\n size=\"md\"\n style={{ boxShadow: \"0px 4px 4px rgba(73, 73, 73, 0.63)\" }}\n to={category.url}\n >\n {category.title}\n </Button>\n </WrapItem>\n ))}\n </Wrap>\n </Flex>\n );\n};\n","import { Grid } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { CatalogPackage } from \"../../api/package/packages\";\nimport { PackageCard } from \"../../components/PackageCard\";\nimport testIds from \"./testIds\";\n\nexport const PackageGrid: FunctionComponent<{ packages: CatalogPackage[] }> = ({\n packages,\n}) => {\n return (\n <Grid\n data-testid={testIds.packageGrid}\n gap={4}\n mt={8}\n templateColumns={{ base: \"1fr\", xl: \"1fr 1fr\" }}\n >\n {packages.map((pkg) => (\n <PackageCard key={`${pkg.name}-${pkg.version}`} pkg={pkg} />\n ))}\n </Grid>\n );\n};\n","import {\n Button,\n Flex,\n forwardRef,\n Heading,\n Tab,\n TabList,\n TabPanelProps,\n TabPanel,\n TabPanels,\n Tabs,\n Text,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport { NavLink } from \"../../components/NavLink\";\nimport { ROUTES } from \"../../constants/url\";\nimport { useCatalogResults } from \"../../hooks/useCatalogResults\";\nimport { useHistoryState } from \"../../hooks/useHistoryState\";\nimport { getSearchPath } from \"../../util/url\";\nimport { SECTION_PADDING } from \"./constants\";\nimport { PackageGrid } from \"./PackageGrid\";\nimport testIds from \"./testIds\";\n\ninterface PackageTabProps {\n data: ReturnType<typeof useCatalogResults>;\n label: string;\n}\n\ninterface PackageTabPanelProps extends PackageTabProps, TabPanelProps {\n tag: string;\n}\n\nconst tabs = {\n community: {\n label: \"Community\",\n tag: \"community\",\n },\n aws: {\n label: \"AWS\",\n tag: \"aws-official\",\n },\n hashicorp: {\n label: \"HashiCorp\",\n tag: \"hashicorp-official\",\n },\n};\n\nconst PackageTab: FunctionComponent<PackageTabProps> = ({ data, label }) => {\n return (\n <Tab\n data-testid={testIds.cdkTypeTab}\n data-value={label}\n isDisabled={data.page.length < 1}\n >\n {label}\n </Tab>\n );\n};\n\nconst PackageTabPanel = forwardRef<PackageTabPanelProps, \"div\">(\n ({ label, data, tag, ...props }, ref) => {\n return (\n <TabPanel data-testid={testIds.cdkTypeGrid} ref={ref} {...props} p={0}>\n <PackageGrid packages={data.page} />\n\n <Flex justify=\"center\" w=\"full\">\n <NavLink\n data-testid={testIds.cdkTypeSeeAllButton}\n onClick={() => window.scrollTo(0, 0)}\n to={getSearchPath({\n tags: tag ? [tag] : undefined,\n sort: CatalogSearchSort.DownloadsDesc,\n })}\n >\n <Button colorScheme=\"blue\" my={8}>\n See all {label} constructs\n </Button>\n </NavLink>\n </Flex>\n </TabPanel>\n );\n }\n);\n\nexport const CDKTypeTabs: FunctionComponent = () => {\n const community = useCatalogResults({\n tags: [tabs.community.tag],\n limit: 4,\n sort: CatalogSearchSort.DownloadsDesc,\n });\n\n const aws = useCatalogResults({\n tags: [tabs.aws.tag],\n limit: 4,\n sort: CatalogSearchSort.DownloadsDesc,\n });\n const hashicorp = useCatalogResults({\n tags: [tabs.hashicorp.tag],\n limit: 4,\n sort: CatalogSearchSort.DownloadsDesc,\n });\n\n const [tabIndex, setTabIndex] = useHistoryState(\"cdkTypeTab\", 0);\n\n return (\n <Flex\n bg=\"white\"\n color=\"blue.800\"\n data-testid={testIds.cdkTypeSection}\n direction=\"column\"\n px={SECTION_PADDING.X}\n py={SECTION_PADDING.Y}\n zIndex=\"0\"\n >\n <Heading\n as=\"h3\"\n data-testid={testIds.cdkTypeSectionHeading}\n fontSize=\"1.5rem\"\n fontWeight=\"semibold\"\n lineHeight=\"lg\"\n mb={2}\n >\n Find constructs by publisher\n </Heading>\n <Text\n data-testid={testIds.cdkTypeSectionDescription}\n lineHeight=\"md\"\n mb={5}\n >\n Find constructs published by the open-source community, AWS, and\n HashiCorp in one location. You can also have your own construct\n libraries listed on Construct Hub by publishing them on npm registry.\n More concrete guidance can be found in the{\" \"}\n <NavLink color=\"blue.500\" to={ROUTES.CONTRIBUTE}>\n Contribute\n </NavLink>{\" \"}\n page.\n </Text>\n <Tabs\n defaultIndex={tabIndex}\n onChange={(index) => setTabIndex(index)}\n variant=\"line\"\n >\n <TabList>\n <PackageTab data={community} label={tabs.community.label} />\n\n <PackageTab data={aws} label={tabs.aws.label} />\n\n <PackageTab data={hashicorp} label={tabs.hashicorp.label} />\n </TabList>\n <TabPanels minH=\"28.5rem\">\n <PackageTabPanel\n data={community}\n label={tabs.community.label.toLowerCase()}\n tag={tabs.community.tag}\n />\n\n <PackageTabPanel\n data={aws}\n label={tabs.aws.label}\n tag={tabs.aws.tag}\n />\n\n <PackageTabPanel\n data={hashicorp}\n label={tabs.hashicorp.label}\n tag={tabs.hashicorp.tag}\n />\n </TabPanels>\n </Tabs>\n </Flex>\n );\n};\n","import { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nexport const useHistoryState = <T>(\n key: string,\n initialValue: T\n): [T, (t: T) => void] => {\n const history = useHistory();\n const [rawState, rawSetState] = useState<T>(() => {\n const value = (history.location.state as any)?.[key];\n return value ?? initialValue;\n });\n const setState = (value: T) => {\n history.replace({\n ...history.location,\n state: {\n ...(history.location.state as any),\n [key]: value,\n },\n });\n rawSetState(value);\n };\n return [rawState, setState];\n};\n","import { Flex, Grid, Heading } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { DEFAULT_FEATURED_PACKAGES } from \"../../api/config\";\nimport { PackageCard } from \"../../components/PackageCard\";\nimport { useConfigValue } from \"../../hooks/useConfigValue\";\nimport { SECTION_PADDING } from \"./constants\";\nimport testIds from \"./testIds\";\nimport { useSection } from \"./useSection\";\n\nexport const Featured: FunctionComponent = () => {\n const homePackages = useConfigValue(\"featuredPackages\");\n const [featured = { name: \"Recently Updated\", showLastUpdated: 4 }] = (\n homePackages ?? DEFAULT_FEATURED_PACKAGES\n ).sections;\n\n const section = useSection(featured);\n\n if (!section) {\n return null;\n }\n\n return (\n <Flex\n color=\"white\"\n data-testid={testIds.featuredContainer}\n direction=\"column\"\n px={SECTION_PADDING.X}\n py={SECTION_PADDING.Y}\n zIndex=\"0\"\n >\n <Heading\n as=\"h3\"\n data-testid={testIds.featuredHeader}\n fontSize=\"1.5rem\"\n fontWeight=\"semibold\"\n lineHeight=\"lg\"\n >\n {featured.name}\n </Heading>\n <Grid\n data-testid={testIds.featuredGrid}\n gap={4}\n mt={8}\n templateColumns={{ base: \"1fr\", xl: \"1fr 1fr\" }}\n >\n {section?.slice(0, 4).map((pkg) => (\n <PackageCard key={pkg.name} pkg={pkg} />\n ))}\n </Grid>\n </Flex>\n );\n};\n","import { useMemo } from \"react\";\nimport { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport { FeaturedPackagesDetail } from \"../../api/config\";\nimport { CatalogPackage } from \"../../api/package/packages\";\nimport { findPackage } from \"../../api/package/util\";\nimport { useCatalog } from \"../../contexts/Catalog\";\nimport { useCatalogResults } from \"../../hooks/useCatalogResults\";\n\nexport const useSection = ({\n showLastUpdated,\n showPackages,\n}: {\n showLastUpdated?: number;\n showPackages?: FeaturedPackagesDetail[];\n}) => {\n const { loading, error } = useCatalog();\n const { results } = useCatalogResults({\n limit: 25,\n sort: CatalogSearchSort.PublishDateDesc,\n });\n\n return useMemo(() => {\n if (loading || error || !results) return [];\n\n if (showLastUpdated) {\n return results.slice(0, showLastUpdated);\n } else if (showPackages) {\n return showPackages\n .map((p) => {\n const pkg = findPackage({ packages: results }, p.name);\n if (pkg) {\n return {\n ...pkg,\n comment: p.comment,\n };\n }\n return undefined;\n })\n .filter((pkg) => pkg !== undefined) as CatalogPackage[];\n } else {\n return undefined;\n }\n }, [results, error, loading, showLastUpdated, showPackages]);\n};\n","import { Box, BoxProps, forwardRef, keyframes } from \"@chakra-ui/react\";\n\nconst gradient = \"linear-gradient(274.2deg, #143870 20.69%, #1F50A1 84.17%)\";\n\nconst animation = keyframes`\n 0% {\n background-position:0% 50%;\n }\n\n 50% {\n background-position:100% 50%;\n }\n\n 100% {\n background-position:0% 50%;\n }\n`;\n\nexport const GradientContainer = forwardRef<BoxProps, \"div\">((props, ref) => (\n <Box\n animation={`${animation} 10s linear infinite`}\n bg={gradient}\n bgSize=\"200% 200%\"\n ref={ref}\n {...props}\n />\n));\n","import { Box, Flex, Heading } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport {\n SearchBar,\n SearchOverlay,\n SearchSuggestions,\n} from \"../../components/SearchBar\";\nimport { SECTION_PADDING } from \"./constants\";\nimport testIds from \"./testIds\";\n\nexport const Hero: FunctionComponent = () => {\n return (\n <Flex\n align=\"center\"\n color=\"white\"\n direction=\"column\"\n h=\"20rem\"\n justify=\"center\"\n px={SECTION_PADDING.X}\n py={SECTION_PADDING.Y}\n textAlign=\"center\"\n zIndex=\"1\"\n >\n <Heading as=\"h1\" data-testid={testIds.heroHeader} size=\"xl\">\n Simplify cloud development with constructs\n </Heading>\n <Heading\n as=\"h2\"\n data-testid={testIds.heroSubtitle}\n fontWeight=\"normal\"\n mt={4}\n size=\"md\"\n >\n Find and use open-source Cloud Development Kit (CDK) libraries\n </Heading>\n <Box color=\"initial\" maxW=\"36rem\" mt={8} mx=\"auto\" w=\"full\">\n <SearchBar hasButton>\n <SearchOverlay />\n <SearchSuggestions />\n </SearchBar>\n </Box>\n </Flex>\n );\n};\n","import { Grid, Heading, Text } from \"@chakra-ui/react\";\nimport type { FunctionComponent, ReactNode } from \"react\";\nimport { SECTION_PADDING } from \"./constants\";\nimport testIds from \"./testIds\";\n\nexport interface InfoSectionProps {\n title: string;\n description: ReactNode;\n}\n\nexport const InfoSection: FunctionComponent<InfoSectionProps> = ({\n title,\n description,\n children,\n}) => (\n <Grid\n color=\"blue.800\"\n data-testid={testIds.infoSection}\n px={SECTION_PADDING.X}\n py={SECTION_PADDING.Y}\n templateColumns=\"1fr\"\n templateRows=\"auto 1fr auto\"\n >\n <Heading\n as=\"h3\"\n data-testid={testIds.infoSectionHeading}\n fontSize=\"1.5rem\"\n fontWeight=\"semibold\"\n lineHeight=\"lg\"\n mb={2}\n >\n {title}\n </Heading>\n <Text data-testid={testIds.infoSectionDescription} fontSize=\"lg\" mb={4}>\n {description}\n </Text>\n {children}\n </Grid>\n);\n","import { Box, Divider, Flex, Grid, Image, Stack, Text } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { CatalogSearchSort } from \"../../api/catalog-search/constants\";\nimport { NavLink } from \"../../components/NavLink\";\nimport { CDKType, CDKTYPE_RENDER_MAP } from \"../../constants/constructs\";\nimport {\n Language,\n LANGUAGE_RENDER_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\nimport { getSearchPath } from \"../../util/url\";\nimport { SECTION_PADDING } from \"./constants\";\nimport { InfoSection } from \"./InfoSection\";\nimport testIds from \"./testIds\";\n\nexport const Info: FunctionComponent = () => (\n <Flex bg=\"white\" direction=\"column\">\n <Box px={SECTION_PADDING.X} py={SECTION_PADDING.Y}>\n <Text\n color=\"blue.800\"\n fontSize=\"1.25rem\"\n lineHeight=\"1.5\"\n textAlign=\"center\"\n >\n Construct Hub is a place to discover Cloud Development Kit (CDK)\n construct libraries, building blocks for cloud applications published by\n the open-source community, AWS, and partners. CDK is a software\n development framework for defining cloud infrastructure using familiar\n programming languages.\n </Text>\n </Box>\n\n <Divider mx={SECTION_PADDING.X} w=\"auto\" />\n\n <Grid\n data-testid={testIds.infoContainer}\n templateColumns={{ base: \"1fr\", lg: \"1fr auto 1fr\" }}\n templateRows={{ base: \"1fr auto 1fr\", lg: \"1fr\" }}\n textAlign=\"left\"\n >\n <InfoSection\n description=\" For all three CDKs: AWS CDK, which generates CloudFormation templates, CDK for Terraform (CDKtf), which generates HashiCorp Terraform configuration, and CDK for Kubernetes (CDK8s), which generates Kubernetes manifests.\"\n title=\"A single home for all CDKs\"\n >\n <Flex align=\"center\" pt={4} sx={{ gap: \"4rem\" }} wrap=\"wrap\">\n {Object.entries(CDKTYPE_RENDER_MAP).map(\n ([cdktype, { name, imgsrc }]) => (\n <NavLink\n color=\"blue.500\"\n data-testid={testIds.infoSectionIcon}\n fontWeight=\"bold\"\n key={cdktype}\n to={getSearchPath({\n cdkType: cdktype as CDKType,\n sort: CatalogSearchSort.DownloadsDesc,\n })}\n >\n <Stack align=\"center\" spacing={2}>\n <Image aria-label={name} h={8} src={imgsrc} />\n <span>{name}</span>\n </Stack>\n </NavLink>\n )\n )}\n </Flex>\n </InfoSection>\n\n <Divider\n display={{ base: \"none\", lg: \"initial\" }}\n h=\"auto\"\n my={10}\n orientation=\"vertical\"\n />\n <Divider display={{ lg: \"none\" }} mx={10} w=\"auto\" />\n\n <InfoSection\n description=\"Find documentation, API reference, and code samples in CDK-supported languages, such as Java, .NET, TypeScript, and Python. Define, test, and deploy cloud infrastructure using loops, conditionals, unit testing, and data structures.\"\n title=\"Support across languages\"\n >\n <Flex align=\"center\" pt={4} sx={{ gap: \"4rem\" }} wrap=\"wrap\">\n {Object.entries(LANGUAGE_RENDER_MAP)\n .filter(([language]) =>\n TEMP_SUPPORTED_LANGUAGES.has(language as Language)\n )\n .map(([language, { icon: Icon, name }]) => (\n <NavLink\n color=\"blue.500\"\n data-testid={testIds.infoSectionIcon}\n fontWeight=\"bold\"\n key={language}\n to={getSearchPath({\n languages: [language as Language],\n sort: CatalogSearchSort.DownloadsDesc,\n })}\n >\n <Stack align=\"center\" key={language} spacing={2}>\n <Icon aria-label={name} h={8} w={8} />\n <span>{name}</span>\n </Stack>\n </NavLink>\n ))}\n </Flex>\n </InfoSection>\n </Grid>\n </Flex>\n);\n","import { Flex } from \"@chakra-ui/react\";\nimport { FunctionComponent } from \"react\";\nimport { DevPreviewBanner } from \"../../components/DevPreviewBanner\";\nimport { Page } from \"../../components/Page\";\nimport { useCatalog } from \"../../contexts/Catalog\";\nimport { useConfig } from \"../../contexts/Config\";\nimport { Categories } from \"./Categories\";\nimport { CDKTypeTabs } from \"./CDKTypeTabs\";\nimport { Featured } from \"./Featured\";\nimport { GradientContainer } from \"./GradientContainer\";\nimport { Hero } from \"./Hero\";\nimport { Info } from \"./Info\";\nimport testIds from \"./testIds\";\n\nexport const Home: FunctionComponent = () => {\n const { data: config } = useConfig();\n const { data: catalog } = useCatalog();\n const fullSite = config?.featureFlags?.fullSite ?? false;\n const hasPackages = (catalog?.packages.length ?? 0) > 0;\n\n return (\n <Page\n meta={{\n title: \"Construct Hub\",\n description:\n \"Construct Hub helps developers find open-source construct libraries for use with AWS CDK, CDK8s, CDKTf and other construct-based tools.\",\n suffix: false,\n }}\n pageName=\"home\"\n >\n <GradientContainer\n as={Flex}\n data-testid={testIds.page}\n direction=\"column\"\n >\n <DevPreviewBanner />\n\n <Hero />\n\n <Info />\n\n {hasPackages && fullSite ? (\n <>\n <Categories />\n <CDKTypeTabs />\n <Featured />\n </>\n ) : null}\n </GradientContainer>\n </Page>\n );\n};\n"],"sourceRoot":""}
|