No offense to Carrie and the girls over on And Just Like That …, but there’s no fashion on HBO-slash-Max right now quite like that of The Righteous Gemstones’. Our devout, demented Gemstone kids and their significant others — not to mention the sensational Uncle Baby Billy — are serving nothing short of sartorial splendor this season. Everything is shinier, tighter, sparklier, tackier. There’s “more is more” and then there’s the seafoam-green-and-royal-blue Versace fit BJ wears to the pickleball courts, the Miss Piggy–evoking hot-pink dress in which poor Judy gets kidnapped-abducted, and Uncle Baby Billy’s gigantic clamshell getup. Some might call such looks over-the-top. To them, TheRighteous Gemstones says, The more over-the-top, the closer to God.
Costume designer Christina Flannery took Vulture behind the scenes of some of the Gemstones’ most outrageous season-three looks, and when asked how much direction she gets from the scripts regarding the characters’ wardrobes, she surprised me by saying, “Not much!” She is free to interpret guidance like “BJ has a glow-up” as she sees fit. Series creator and star Danny McBride shares Flannery’s sensibilities, a relief for the designer, who says her friends joke that “if you give Christina a little bit of money and a bit of chain, she’ll go crazy.”
Judy starts the season fresh off her tour and stepping into a leadership role at the church, inspiring Flannery to “bring this rock-and-roll, glitz-glam element to it.” The question became “What would Judy have access to? And what would immature, stunted Judy really enjoy?” The answer: A lot of Gucci, some of Dries Van Noten’s “bizarre architectural pieces,” and vintage Mugler, which is what she wears to break up with her tour paramour, Stephen. “It’s so funny because he’s, like, sucking on her finger with those ridiculous sleeves on.”
When Judy’s on a high, her looks are about the juxtaposition of her church self and her rock-star self (never mind that her tour was less Eras, more Mall of America energy). Dolly Parton was definitely on the vision board. For one scene with Amber, Flannery says, “we found this incredibly tacky western belt you would definitely see someone like Dolly Parton wear. We sourced it from Amazon. The weight is incredible. I don’t know why I haven’t bought one for myself.”
As the season progresses and Judy’s guilt starts to set in, “I wanted to bring her down and make her a little bit more meek and in hiding,” Flannery says, “because she’s embarrassed by what she did.” For Judy, that still means Gucci. (That cream long-sleeved dress with blue flowers on it is one example of her “trying to get back to the church, to being a church wife and what she’s supposed to be: BJ Barnes’s bitch.”) Her abduction outfit, a “pink flamingo” dress, is a high-water mark for Flannery: “I die. It’s so funny … It has an element of sexiness, and you’re trying to put it on for your husband because you’re feeling guilty. It’s a lingerie moment, but it’s not super-sexy because it’s still Judy. She doesn’t quite understand that element of sexuality.” As for the footwear: “Those matching UGG slides that she’s wearing are just ungodly.”
The devil’s in the details: When Judy and her brothers go to the racetrack, she is wearing a custom race-car necklace that Flannery and her team built out of vintage Matchbox cars. “Everything is really thought out for her,” Flannery says. (On her feet in that same scene: Jessica Simpson fringed boots.)
BJ
Played by: Tim Baltz
Photo-Illustration: Vulture. Photos: HBO
BJ’s color palette is all very Easter Bunny. “A lot of it is over-the-top pastel suiting,” says Flannery, who takes inspiration from the Charleston scene, where Gemstones shoots. “You do see a lot of men wearing these pinks and purples and pastels in the South,” so much so that “it wasn’t so hard to find some of these suiting pieces in local small boutiques.”
That’s part of what makes his revenge roller-skating outfit — “That bloodred velvet” — so stark, says Flannery: “You’re seeing him in a color palette you never see him in, that pissed-off, angry red. For some reason, that color kind of transforms him — because he’s so light and fair and the pastels make him look so young and innocent.”
Was it in the script that BJ would be wearing a two-piece Versace windbreaker to play pickleball with the man he does not realize had an “affair” (some light making out, under-the-shirt-but-over-the-bra hand stuff) with his wife? No, but Flannery had no doubt: “He would absolutely be wearing Versace.” Although as far as we know, BJ doesn’t come from Gemstone-tier money. “He got sucked in,” says Flannery. “I think that he so desperately wants to be a Gemstone … And I feel like, all of us, the more money you have, the more you want.”
The devil’s in the details: “Every time we changed his outfit, we changed his earring to match the color,” says Flannery. “That’s his Gemstone touch.”
Uncle Baby Billy
Played by: Walton Goggins
Photo-Illustration: Vulture. Photos: HBO
“He’s so delusional,” Flannery says with affection. Uncle Baby Billy’s look was all about his big vision for Baby Billy’s Bible Bonkers, the show he’s desperate to sell to the siblings: “I thought it would be really fun to lean into more of a ’70s-talk-show-host look for him.”
But, of course, Flannery’s favorite look for Baby Billy is his clam costume. “The concept was a Wayne Newton–Liberace thing,” she explains. “He is a one-man show. He could literally just be on the side of the street doing anything in that costume and everything you need is there.” People have asked her where she bought it, which is hilarious to her: “This thing did not exist.”
Initially, she thought he’d be wearing a cape, but, alas, a cape was not enough. It felt, to her, “too predictable,” even though she is aware that a cape is a pretty extra garment. She wanted something more out-there: “How can I make this weirder and weirder and weirder?” Flannery’s costume-department colleague Kelly Rose built the clamshell, which “was a long process of trial and error, figuring out what is the best thing we could suspend into this backpiece that we made.” Flannery tapped Aughra Moon, her tailor, who helped her take all the fabrics she’d found in L.A. to make the “clusters” she wanted on the suit along with “exaggerated sleeves” covered in crystals.
She managed to squeeze in one more clam-adjacent Easter egg on Billy before the season was out: When he’s pitching Bible Bonkers to the siblings, he’s in a tan suit. “But then, on top — you’ll never notice this, because why would you? — it’s a full stone crustacean that we hand-stitched onto that suit that came off a Balenciaga dress that we didn’t use for Amber,” Flannery says. “It was past the return time, so what do we do with this beautiful crustacean?” There will come a payday someday!
The devil’s in the details: In real life, Goggins is only 51 — considerably younger than his onscreen self is supposed to be. So Sarah Trost, the costume designer for seasons one and two, passed along this styling tip: All of Goggins’s clothes are “a little oversize,” says Flannery. “We make him look frail and emaciated that way.” That his pants are always a bit too long adds to the character’s zany, addled vibe. Uncle Baby Billy, says Flannery, “doesn’t understand tailoring.”
Jesse
Played by: Danny McBride
Photo-Illustration: Vulture. Photos: HBO
Jesse’s look was well established in earlier seasons, so Flannery wanted to stick to his sartorial roots — button-front shirts, boots, that “Elvis–George Jones element” — while dialing it up to “that level of money” that the siblings are flashing more than ever: “It’s that Dolce & Gabbana silk. It’s Versace.” Jesse, along with Amber, likes to convey purity through his clothes. “You see that in his white pants, his white belt, his white shoes,” she says.
For the Cape and Pistol costumes, “it was a journey” to the final turquoise product. At first, Flannery considered short capes for the punch line of how silly they’d seem; for inspiration, she looked into “these 1700s societies and, of course, Eyes Wide Shut is clearly nodded to, even in the mask and the hood.” Eventually, Flannery estimates she and her team made 180 capes with an assist from a tailor in Chicago and an embroiderer who stitched on all the trimmings.
To really bring the capes home, Flannery wanted “all these extra-special details”: The closure of the cape is a pistol bolo, and members of different rankings have different epaulets on their sleeves. Because Jesse is a brand-new inductee, he’s got the most basic-level cape. But even his needed to convey a certain level of majesty. “It’s all about showing wealth,” says Flannery. “I wanted it to be heavily weighted” to give that grand sweep when he swooshes it around.
The devil’s in the details: The shirt Jesse is wearing in the abduction sequence is custom: “We wanted to have this exaggerated white collar so when his hair [dye] drips and the secret is out,” it could land on a blank surface — subtle but clear.
Amber
Played by: Cassidy Freeman and Keely Marshall
Photo-Illustration: Vulture. Photos: HBO
As Flannery sees it, Amber “is, in a way, becoming the Aimee-Leigh, the matriarch … She has a poise and grace about her but also a spark.” Although her faith and love are genuine, she also has “some ulterior motives to her character,” she says. “She’s wanting the other siblings to shut the hell up so her and Jesse can run the church.” Pushing the “money aspect” was key for Flannery, as was matching Jesse’s whole purity look: lots of off-white, plenty of cream. “Danny always wants her to have a little bit of a mafia-wife element to her,” she explains.
In this season’s flashback episode, “Interlude III,” Young Amber lacks that affluence and, unfortunately for her, is getting dressed in the hideous early 2000s: “The awful part of the Y2K is that things just don’t fit right. The low-rise jeans, the camis, cardigans. Can we never bring that back?” Her outfits are off the rack, intended to look like hand-me-downs or thrift-store finds; her “dowdy flower dress with the cowboy boots” is what Flannery thinks Amber’s grandma would have advised her to wear to meet the Gemstones.
The devil’s in the details: Young Amber’s sort-of-sweet, sort-of-snide comment to Judy about liking her pants was added to the script after Flannery dressed the characters. I mean … how would Amber NOT comment on these pants?!
Kelvin
Played by: Adam Devine
Photo-Illustration: Vulture. Photos: HBO
Even before Flannery began working on the show — when she was still at home doing prep — she “started filling my Instagram and fake TikTok account” with today’s hottest “hype priests.” Her read: “It’s a lot of sneakerheads. A lot of Supreme and Off-White, streetwear brands — Fear of God, Essentials.”
Flannery previously worked on The Chi, and the sneakerhead expertise she honed there, combined with her social-media stalking, gave her a vision for Kelvin: “This guy has a shit-ton of money … Kelvin would have different shoes all the time, and he’d keep them very clean and crispy.” Onstage, he’s wearing Gucci. Offstage, he’s “leaning into the hypebeast look.” She loved putting him in that gray Givenchy sweater with a green built-in cape — what a season for capes! — and in his “Jesus slipper-sock booties,” which he pairs with the Essentials Fear of God V-neck and “supertight jeans. He’s traipsing out looking so silly.”
The uniform for Kelvin’s gang of Smut Busters was “originally just T-shirts and jeans,” Flannery says. “But as you can tell, I cannot keep anything super-simple, so Zubaz it is!”
The devil’s in the details: Zoom in on the fanny pack Kelvin wears with the Smut Busters and you’ll see that “we pressed a Bible up really close to the front” so it’s visible through the fabric. Kelvin’s “weird little necklace has a magnifying glass in it. So if you open it up, you can read verses from the Bible.”
By submitting your email, you agree to our
Terms and Privacy Notice
and to receive email correspondence from us. This site is protected by reCAPTCHA and the Google
Privacy Policy and
Terms of Service apply.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
Already a subscriber?
Already a subscriber?
`;
// integrate Sub(x) scripts and elements
if (hostname !== 'subs.nymag.com') { // do not integrate on this subdomain
document.head.appendChild(trackingScript);
document.body.insertAdjacentHTML('beforeend', subXAnimationElements);
}
There was an error processing the request. Please try again later."}).catch(e=>console.error("Error verifying email: ",e)))(r.querySelector(".content"),o.bannerCTAVerification)})):(l.remove(),s.remove()),o.dismissable||n.remove(),o.useAlertIcon||a.remove(),r.classList.add("show"),n.addEventListener("click",()=>{u(),r.classList.remove("show")})}else r.remove()}});
}, {"1":1,"6":6,"12":12,"35":35,"40":40}];
window.modules["global-nav.client"] = [function(require,module,exports){"use strict";const dom=require(3),auth=require(12),signInButton=dom.find(".user-signin"),signOutButton=dom.find(".user-signout"),globalNav=dom.find('[class^="global-nav"]'),body=dom.find("body"),dropdownItems=dom.findAll(".dropdown-wrap"),gtm=require(1),appendLandingPageParams=require(136),pageUri=require(124).getPageUri(),subscriptionPromoLinks=dom.findAll(".persist-params"),searchString=window.location.search||"";function closeDropdowns(e){let n=globalNav.querySelectorAll(".dropdown.open");dropdownItems.forEach(function(t){let o=t.querySelector(".dropdown");!n||t.contains(e.target)&&27!==e.keyCode||o.classList.remove("open")})}function gtmSendReport(e,n,t){let o={eventCategory:"ecommerce",eventAction:"componentClick",brand:e,dimension23:"global-nav",list:pageUri,pageZone:"header",variant:"nav-link"};"global-nav-link"===t&&(o.eventLabel=n.href),gtm.reportNow(o)}function updateElementTargetUrlsIfQueryStrings(e){if(searchString){const n=new URLSearchParams(searchString);let t=e.href;if(t.includes("?")){const o=t.split("?"),i=new URLSearchParams(o[1]);for(let e of n.entries())i.set(e[0],e[1]);t=`${o[0]}?${i.toString()}`,e.href=t}else e.href=`${t}?${n.toString()}`}}function init(e){const n=e.querySelectorAll(".to-landing-page");window.addEventListener("auth:init",()=>{signInButton.addEventListener("click",function(e){e.preventDefault(),auth.showEmbeddedLoginFlow("top navigation")}),signOutButton.addEventListener("click",function(e){e.preventDefault(),gtmSendReport("Sign Out",e.target,"user-info-link"),auth.logout()}),auth.isAuthenticated()&&e.classList.add("signed-in"),auth.isSubscriber()&&e.classList.add("subscribed"),e.querySelectorAll(".user-link").forEach(e=>{e.classList.add("active")}),subscriptionPromoLinks.forEach(e=>{updateElementTargetUrlsIfQueryStrings(e)}),appendLandingPageParams(n)})}dropdownItems.forEach(function(e){e.addEventListener("click",function(){e.querySelector(".dropdown").classList.toggle("open")})}),body.addEventListener("click",closeDropdowns),document.addEventListener("keydown",closeDropdowns),globalNav.addEventListener("click",function(e){let n=e.target;n.classList.contains("global-nav-track")&>mSendReport(n.text,n,"global-nav-link")}),module.exports=init;
}, {"1":1,"3":3,"12":12,"124":124,"136":136}];
window.modules["aaa-module-mounting.legacy"] = [function(require,module,exports){"use strict";const _pickBy=require(221),_each=require(408),Fingerprint2=require(407),DS=require(406),Eventify=require(246);function registerGlobals(){window.DS=DS,window.Eventify=Eventify,window.Fingerprint2=Fingerprint2,DS.value("Eventify",Eventify),DS.value("Fingerprint2",Fingerprint2),DS.value("$document",window.document),DS.value("$window",window)}function mountDollarSliceComponents(){DS.service("components",["$document","$module",function(e,n){var o=_pickBy(n.definitions,e=>e.providerStrategy===n.providers.controller),r=Object.keys(o);function t(e){return o=>{try{n.get(e,o)}catch(e){logMountError(o,e)}}}_each(r,n=>{var o=e.querySelectorAll('[data-uri*="/_components/'+n+'/"]'),r=e.querySelectorAll('[data-uri$="/_components/'+n+'"]');_each(o,t(n)),_each(r,t(n))}),this.components=r}]),DS.get("components")}function logMountError(e,n){const o=e.outerHTML.slice(0,e.outerHTML.indexOf(e.innerHTML));console.error("Error attaching controller to "+o,n)}registerGlobals(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{mountDollarSliceComponents()}):mountDollarSliceComponents();
}, {"221":221,"246":246,"406":406,"407":407,"408":408}];
window.modules["ads.legacy"] = [function(require,module,exports){"use strict";const _map=require(118),_forEach=require(107),_isString=require(268),_intersectionWith=require(409),_isEqual=require(274),_each=require(408),_debounce=require(182),_sortBy=require(205),page=require(124),visit=require(114);DS.service("adService",["Eventify","$cid","$document","$window",function(e,t,a,i){var o,n,s,r,d,c,u,l,g={},p=this,h=[],f=visit.getQueryParamsObject(["utm_campaign"]),m=document.querySelector('script[data-type="ad-a9"]'),b=[],w=!1,v=[],y=document.querySelector('script[data-name="ad-doubleverify"]');document.querySelector('script[data-name="concert-ads"]')||(i.NYM={},i.NYM.analytics={},i.NYM.analytics.adStartTime=i.performance.now(),i.googletag=i.googletag||{},i.googletag.cmd=i.googletag.cmd||[],u=i.googletag,(m||y)&&(i.googletag.cmd=i.googletag.cmd||[],i.googletag.cmd.push(function(){i.googletag.pubads().disableInitialLoad()})),m&&(l=i.setInterval(function(){void 0!==window.apstag&&void 0!==window.apstag.timeout&&(i.clearInterval(l),window.apstag.cleared=!0,l=null)},10),setTimeout(function(){l&&(i.clearInterval(l),i.googletag.pubads().refresh(),window.apstag||console.log("MESSAGE: Timeout for A9 load exceeded, aborting"))},500)),y&&(b.push(new Promise(function(e){w?e():v.push(e)})),c=i.setTimeout(T,2500)),o=function(e){var t,a,o=e.data,n=[];return o.loaded?e:(o.loaded=!0,t=null,(t=o.sizes?u.defineSlot(o.name,o.sizes,o.id).addService(u.pubads()):u.defineOutOfPageSlot(o.name,o.id).addService(u.pubads())).setTargeting("adid",o.id),f.hasOwnProperty("utm_campaign")&&t.setTargeting("utmcamp",f.utm_campaign),a=p.getAdCount(o.label),t.setTargeting("label",o.label+"_"+o.site+"-"+a),u.display(o.id),u.pubads().addEventListener("slotOnload",function(){i.NYM.analytics.firstAdLoadTime||(i.NYM.analytics.firstAdLoadTime=i.performance.now(),i.NYM.analytics.firstAdLoadLabel=e.data.label)}),n=_(o),Promise.all(b).then(function(){n?window.apstag&&window.apstag.cleared?window.apstag.fetchBids({slots:[n],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([t],{changeCorrelator:!1})})}):y&&u.pubads().refresh([t],{changeCorrelator:!1}):u.pubads().refresh([t],{changeCorrelator:!1})}),e.slot=t,e)},n=function(e){var a,i,o,n=t(),s=e.getAttribute("data-name"),r=e.getAttribute("data-sizes"),d=e.getAttribute("data-label"),c=e.getAttribute("data-site");n=e.id,r&&r.length?(r=r.split(","),a=[],_map(r,function(e){e=e.split("x"),i=parseInt(e[0]),o=parseInt(e[1]),a.push([i,o])})):(e.classList.add("oop"),a=!1),this.data={id:n,name:s,sizes:a,loaded:!1,label:d,site:c},g[n]=this},r=function(e){u.cmd.push(function(){var t=o(e);g[e.data.id]=t})},s=function(e){var t=[];e.slot?(t=_(e))&&window.apstag&&window.apstag.cleared&&window.apstag.fetchBids({slots:[t],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([e.slot],{changeCorrelator:!1})})}):e&&r(e)},u.cmd.push(function(){var e,t,o,n=page.getMeta("article:tag"),s=page.getMeta("author"),r=i.location.href,d=(e=a.head.querySelector(".head-gtm"),t=a.body.querySelector(".gtm"),e&&"top"===e.getAttribute("data-gtm")?"gtmtop":t&&"bottom"===t.getAttribute("data-gtm")?"gtmbottom":"");o=[],_forEach([n,s,d],function(e){_forEach(e.split(","),function(e){(e=e.trim().toLowerCase().replace(/\s/g,"-").replace(/\'|\’/g,"")).length&&o.push(e)})}),u.pubads().setTargeting("kw",o),u.pubads().setTargeting("entry_group",o),r=r.slice(r.lastIndexOf("/")+1),u.pubads().setTargeting("pn",r),u.companionAds().setRefreshUnfilledSlots(!0),u.pubads().enableAsyncRendering(),u.enableServices()}),this.load=r,this.create=function(e){return new n(e)},this.refresh=function(e){var t;_isString(e)?(t=this.getById(e),s(t)):s(e)},this.remove=function(e){var t=e.data.id;a.getElementById(t).innerHTML=""},this.getAdCount=function(e){var t,a=0,i=Object.keys(g);return _each(i,function(i){(t=g[i]).data.loaded&&t.data.label===e&&a++}),a},this.getById=function(e){return g[e]},d=_debounce(function(){var e={TopLeaderboard:1,RightColTopMPU:2,outOfPage:99,"homepageTakeover/TopLeaderboard":1},t=_sortBy(h,function(t){return e[t.data.label]||10});_forEach(t,function(e){return e.data.sizes?r(e):i.setTimeout(function(){r(e)},2e3)}),y&&window.PQ.cmd.push(()=>{try{window.PQ.loadSignals(["ids","bsc","vlp"],T)}catch(e){T(),console.error(`There has been an error loading Double Verify signals: ${e}`)}}),h=[]},10),this.addToPageLoadQueue=function(e){h.push(e),d()});function _(e){var t,a=e.sizes;return a=_intersectionWith(a,[[970,250],[970,90],[728,90],[300,600],[300,250],[320,100],[320,50]],_isEqual),e.sizes&&e.sizes.length&&(t={slotID:e.id,sizes:a,slotName:e.label}),t}function T(){i.clearTimeout(c),w=!0,_forEach(v,function(e){e()})}}]);
}, {"107":107,"114":114,"118":118,"124":124,"182":182,"205":205,"268":268,"274":274,"408":408,"409":409}];
window.modules["cid.legacy"] = [function(require,module,exports){"use strict";DS.service("$cid",function(){var r=Math.floor(100*Math.random());return function(){return"cid-"+ ++r}});
}, {}];
window.modules["client.legacy"] = [function(require,module,exports){"use strict";require("cid.legacy"),require("ads.legacy"),require("facebook.legacy"),require("aaa-module-mounting.legacy");
}, {"cid.legacy":"cid.legacy","aaa-module-mounting.legacy":"aaa-module-mounting.legacy","ads.legacy":"ads.legacy","facebook.legacy":"facebook.legacy"}];
window.modules["facebook.legacy"] = [function(require,module,exports){"use strict";DS.service("facebook",[function(){this.fb=function(i){window.FB&&window.FB[i].apply(this,Array.prototype.slice.call(arguments,1))}}]);
}, {}];
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o typeof key === 'string' && key.match(/\.legacy$/)).forEach(key => window.require(key));
}
function tryToMount(fn, el, name) {
try {
fn(el); // init the controller
} catch (e) {
const elementTag = el.outerHTML.slice(0, el.outerHTML.indexOf(el.innerHTML));
console.error(`Error initializing controller for "${name}" on "${elementTag}"`, e);
}
}
/**
* mount client.js component controllers
*/
function mountComponentModules() {
Object.keys(window.modules).filter(key => typeof key === 'string' && key.match(/\.client$/)).forEach(key => {
let controllerFn = window.require(key);
if (typeof controllerFn === 'function') {
const name = key.replace('.client', ''),
instancesSelector = `[data-uri*="_components/${name}/"]`,
defaultSelector = `[data-uri$="_components${name}"]`,
instances = document.querySelectorAll(instancesSelector),
defaults = document.querySelectorAll(defaultSelector);
for (let el of instances) {
tryToMount(controllerFn, el, name);
}
for (let el of defaults) {
tryToMount(controllerFn, el, name);
}
}
});
}
// Make sure that a `window.process.env.NODE_ENV` is available in the client for any dependencies,
// services, or components that could require it
// note: the `` value is swapped for the actual environment variable in /lib/cmd/compile/scripts.js
window.process = window.process || {};
window.process.env = window.process.env || {};
if (!window.process.env.NODE_ENV) {
window.process.env.NODE_ENV = '';
}
// note: legacy controllers that require legacy services (e.g. dollar-slice) must
// wait for DOMContentLoaded to initialize themselves, as the files themselves must be mounted first
mountLegacyServices();
mountComponentModules();
// ]]