International Arrivals: We Live in Cairo and Bad Kreyòl
ByJackson McHenry,
a Vulture critic covering theater, film, and TV
From We Live in Cairo, at NYTW.
Photo: Joan Marcus
A pair of Egyptian brothers debate how best to direct their art to the purpose of revolution: The lyricist, naturally more uptight and intellectual, suggests they start with words; the musician, with indie-rock curls and a guitar he totes around like an extra limb, suggests they start with a feeling. “Do people listen to the lyrics, though?” He asks. “Or do they listen to their heart?” Their debate may be as old as the form of musical theater, but it’s easy to imagine it playing out between the Lebanese American brothers Daniel and Patrick Lazour (Daniel does the music, and Patrick the lyrics; both contribute to the book, according to profiles of the pair) over the years they’ve spent on their new musical, We Live in Cairo. Here, it’s clear that feeling has won out. The Lazours have crafted a piece that is long on emotion with melodies that can burn with revolutionary fervor, if at the expense of clarity and structural coherence. Listen to the people sing, in this case, not with your mind but with your heart.
We Live in Cairo is both the work of young idealists on the rise and about them: The musical centers on young artists who participate in the Arab Spring protests in 2011. Patrick, according to the program, got interested in the idea after seeing a photo of activists huddled around a laptop in an apartment above Tahrir Square, a tableau the director Taibi Magar re-creates onstage. It’s a premise that hooks We Live in Cairo into all sorts of musical-theater precedent; there’s something of Les Misérables to the plot, alongside the bohemian dreams of Rent (staged, like this, at New York Theatre Workshop). The Lazours blend elements of a contemporary pop-rock musical-theater sound with Arab musical traditions and orchestrations by Daniel Lazour and Michael Starobin. Musicians are seated next to the actors onstage, and they freely swap instruments as the music shifts between what’s diegetic and not.
In style and plotting, the Lazours are given to sweeps of romance: The audience surrogate, a young photographer named Layla (Nadina Hassan), introduces herself with a paean to “Midnight in Cairo” — she wants, initially to do apolitical travel photography, and there’s something of her style of pretty miniature glimpses of the city in the show’s lyrics. Soon, she gets caught up in the more radical activities of her guitarist boyfriend, Amir (Ali Louis Bourzgui, in a variation on the theme of recessive rocker after starring in The Who’s Tommy), and his worrywart lyricist brother, Hany (Michael Khalid Karadsheh), as well as their friends, a political organizer just out of jail for criticizing Hosni Mubarak online named Fadwa (Rotana Tarabzouni, a rousing spitfire) and her cousin Karim (John El-Jor), who’s from a wealthier family and spends his nights spray-painting political satire on the walls of Cairo.
As with many a project that’s been in development for over a decade, especially a new musical from new writers, you can sense the Lazours’ mad rush to get everything they want onto the page initially, as well as the toothiness that sets in after too many rounds of workshops and revisions (We Live in Cairowas at ART back in 2019 and has moved through a bevy of other developmental programs). Their book, in the first act, strains as it gets these characters on their feet while also offering the audience a primer on 2010s Egyptian politics; often, they default to rote exposition, which Magar has the actors deliver dutifully. We’re told the differences between the characters’ backgrounds and political stances — the two brothers are Coptic Christians, the others are generally secular Muslims, and Karim befriends an acolyte, Hassan (Drew Elhamalawy), whose family members are Muslim Brotherhood — in bursts of dialogue where you might hope for the tension to lie in action or music. The songs, some of which made it onto an album released during the pandemic, contain real highs, like an a cappella number that introduces the second act, though there are also darlings that express a feeling well but don’t service the drama in situ. The young lovers, Amir and especially Layla, tend toward the generic (as so many young musical lovers do), though they share a lovely duet about the future you know they won’t achieve. But when Amir, as the youths gather in Tahrir Square, becomes a folk hero, his folk-y revolutionary guitar ballads drag the action to a halt. Also in the tradition of Mark in Rent or Orpheus in Hadestown, he can’t seem to finish his one big song.
In the second act of We Live in Cairo, the revolution fizzles, but the musical snaps into clearer focus. The pressure of events after Mubarak’s resignation — a transitional government leads to an election won by the Muslim Brotherhood candidate, followed by military intervention — drives the characters apart ideologically, though that division reveals in them a greater range of emotion than pure revolutionary dreaming. The group members distract themselves with drugs and partying (and you remember how young these kids are) and try not to bicker over the best next steps for the movement. Biting the bullet and voting for a centrist? Encouraging the overthrow of a despot, even if he’s democratically elected? When Fadwa, the radical, lashes out at her more cautious friends for abandoning the cause, Tarabzouni whirls around the stage in a fury, loosing all her characters’ nervous energy like she’s spinning daggers across the stage.
Those moments, too, are when the force of current events — expanding Israeli military brutality to the point of genocide in Gaza as well as elsewhere in the Middle East, all with American government funding — bears hardest on the production itself. The musical stays in its period, a decade ago, but when a character mentions the possibility of escaping Egypt to safety in Beirut, you think of bomb strikes on Lebanon and the vilification of Arab people in many forms of American media and art that makes that violence politically possible. (You may have a meta-awareness of how this production lies as a piece of nonprofit theater programming: NYTW itself, controversially, did not call for a cease-fire; its artistic director, Patricia McGregor, has walked the fine line of saying it makes “embodied statements through the artists it supports.”) The Lazours and the actors in We Live in Cairo all declare that they are “deeply proud to be Arab” in your program, and an inserted note from the cast asks that that you carry the empathy generated for these characters “outside this space and into the world.” Those intentions put an awful lot of weight on a single musical, expected to achieve the noble and yet vague act of humanization as well as tell a good story. We Live in Cairo tends to excel when an emphasis on the latter allows the former to emerge naturally. A song in the second act, one that has been stuck in my head since I saw the show, has the aesthete Karim, himself faltering in his political commitments, imagining himself reigning over Egypt in the “Benevolent Regime of King Farouk II.” El-Jor swans around, imagining how better things could be if you just had the right dictator, with “my cape Dior,” keeping peace for a while and then waging war — for good measure, the Lazours also quote from Camelot, revealing a strain of Lerner-and-Loewe heartsickness in their own work. The sentiments are that right combination of sweet (he’s offering up a world where those young lovers could get married), petty, self-destructive, and grandly delusional, a jumbled-up mix of idealism and bitterness that reads, after all, as very human.
From Bad Kreyòl, at the Signature Center.
Photo: Matthew Murphy
Both We Live in Cairo and Dominique Morisseau’s Bad Kreyòl contend with the question of how to love a politically troubled country, though in Morisseau’s case she does so from the dramatized position of an American outsider. In her play, Simone (Kelly McCreary), a well-meaning but inevitably grating first-generation Haitian American millennial, arrives back in Port-au-Prince to attempt to reconnect with her cousin Gigi (Pascale Armand) and fulfill their late grandmother’s wish for them to be better connected. Gigi’s a loudly opinionated character, the kind that’s a gift to an actor, and the director Tiffany Nichole Greene encourages Armand to unwrap her with great delight. Armand makes a meal out of the offense that Gigi feels early on when Simone tells her that she thought the clothing store Gigi operated was more of a beach boutique. “A beach boutique,” responds Gigi, “a beeaach boouutique??”
The terms of their conflict are clear from the jump. Simone, who used to have a corporate job in finance but is now trying to find herself, keeps trying to connect with Gigi but comes off as condescending and then ties herself in knots worrying that she’s acting like a colonial meddler. Gigi, in turn, bristles at Simone’s assumptions and then bristles further when Simone talks herself in circles. Their relationship, already strained, gets worse as Simone starts to befriend Pita (Jude Tibeau, wonderfully grand), an implicitly queer man who is at once Gigi’s friend, sort of part of her family, and her help around the house. He’s a restavèk, sent as a child from a poorer family to live with another in hopes of advancement and to perform domestic service. The arrangement troubles Simone — “It’s a thing, Gigi. It’s been covered on CNN” — but does not bother Gigi, who insists that bad people, not the system, are at fault.
Morisseau is herself writing from a position like Simone’s. She was raised in a Haitian American family in Detroit and grew up without learning how to speak Kreyòl (the anglicized spelling creole appears crossed out at the top of her script). In her playwright’s note, she says she rediscovered a connection to Haiti and its language on a trip with her family as an adult. As a playwright, she rides the character who seems most autobiographical the hardest. Simone is a tough hang, flaking on promises to Gigi to hang out and learn how to cook pâté and then complaining about how hard it is to make connections to people in Haiti while speaking directly to her phone on an Instagram Live feed. Much as with “beach boutique,” a lot of fun is made of Simone’s suggestion that Pita might find an “affinity space” in a group for queer Haitians. (Though the phrase does become poignant, if rather corporately pat, when Gigi admits she would like an affinity space for herself.) A little self-flagellation can be fun, but a Goofus-and-Gallant dynamic develops between Simone and Gigi that unbalances the drama. Simone keeps messing up; Gigi‘s fewer faults lie, nominally, in her brusque lack of manners, though those of us in the audience are likely to find that charming. Gigi does, eventually, pick up a bit from Simone’s brash American ways and improves her business practices, but too much of the learning goes the other way. Simone doesn’t want to be an American on a trip of self-discovery, but the structure of the play constricts her into being just that.
Morisseau’s play does, however, creep cautiously toward a web of more complex and charged relationships. Pita introduces Simone to a woman named Lovelie (Fedna Jacquet), a former sex worker who has started a business sewing with the support of an NGO — any mention of NGOs makes Gigi roll her eyes — but she then experiences harassment from a businessman associated with the group. Meanwhile, Gigi starts negotiating a deal for her boutique with a Haitian businessman named Thomas (Andy Lucien), who encourages her to spin stories about how her wares were made by Haitian women who have faced adversity in order to sell them at a higher markup. As these plots intersect, Morisseau mines the rich vein that is blurriness between economic self-determination and exploitation and the way that, as Thomas points out, white liberal and Black American economic guilt greases the wheels of paternalism, powering the whole thing. Although Morisseau is good at describing the dynamics of the machine, she’s shy about throwing a spanner into the works. Simone pulls away from meddling too much, and just when it feels as if the play might build to a combustible climax, it’s defused. She learns the right lesson, for once, though the “right lesson” is not necessarily the stuff of thrilling theater.
We Live in Cairo is at New York Theatre Workshop through November 24. Bad Kreyòl is at the Pershing Square Signature Center through December 1.
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(4),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(135),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,"4":4,"12":12,"124":124,"135":135}];
window.modules["aaa-module-mounting.legacy"] = [function(require,module,exports){"use strict";const _pickBy=require(221),_each=require(406),Fingerprint2=require(408),DS=require(407),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(406),_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,"406":406,"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","ads.legacy":"ads.legacy","facebook.legacy":"facebook.legacy","aaa-module-mounting.legacy":"aaa-module-mounting.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();
// ]]