{"version":3,"file":"stimulus-resolver-CwNlGq1o.js","sources":["../../../app/frontend/src/global/stimulus-resolver.js"],"sourcesContent":["import { AttributeObserver } from '@hotwired/stimulus';\n\nexport default class StimulusControllerResolver {\n constructor(application, resolverFn) {\n this.application = application;\n this.loadingControllers = new Set();\n this.controllerNamesCache = new WeakMap();\n this.resolverFn = resolverFn;\n\n this.loadStimulusControllers = this.loadStimulusControllers.bind(this);\n\n this.observer = new AttributeObserver(\n application.element,\n application.schema.controllerAttribute,\n {\n elementMatchedAttribute: this.loadStimulusControllers,\n elementAttributeValueChanged: this.loadStimulusControllers\n }\n );\n }\n\n start() {\n this.observer.start();\n }\n\n stop() {\n this.observer.stop();\n }\n\n static install(application, resolverFn) {\n const instance = new StimulusControllerResolver(application, resolverFn);\n instance.start();\n return instance;\n }\n\n loadStimulusControllers(element) {\n let controllerNames = this.controllerNamesCache.get(element);\n if (!controllerNames) {\n const attr = element.getAttribute('data-controller');\n if (!attr) return; // No controllers to load\n\n controllerNames = attr.split(/\\s+/);\n this.controllerNamesCache.set(element, controllerNames);\n }\n\n // Load controllers in parallel\n Promise.all(controllerNames.map((name) => this.loadController(name))).catch(\n (err) => {\n console.error(`Failed to load controllers: ${err}`);\n }\n );\n }\n\n async loadController(controllerName) {\n if (\n this.loadingControllers.has(controllerName) ||\n this.application.router.modulesByIdentifier.has(controllerName)\n ) {\n return;\n }\n\n this.loadingControllers.add(controllerName);\n\n try {\n const controllerDefinition = await this.resolverFn(controllerName);\n\n if (controllerDefinition) {\n this.application.register(controllerName, controllerDefinition);\n }\n } catch (err) {\n console.error(`Failed to load controller \"${controllerName}\": ${err}`);\n } finally {\n this.loadingControllers.delete(controllerName);\n }\n }\n}\n\nexport function createViteGlobResolver(...globResults) {\n const controllerLoaders = mapGlobKeysToIdentifiers(globResults);\n\n const resolverFn = async (controllerName) => {\n const loader = controllerLoaders.get(controllerName);\n\n if (process.env.NODE_ENV === 'development' && !loader) {\n console.warn(\n `Stimulus Controller Resolver can't resolve \"${controllerName}\". Available:`,\n Array.from(controllerLoaders.keys())\n );\n return;\n }\n\n if (!loader) return;\n\n return (await loader()).default;\n };\n\n return resolverFn;\n}\n\nexport function mapGlobKeysToIdentifiers(globResults) {\n const map = new Map();\n\n for (const globResult of globResults) {\n for (const [key, controllerFn] of Object.entries(globResult)) {\n map.set(identifierForGlobKey(key), controllerFn);\n }\n }\n\n return map;\n}\n\nexport const CONTROLLER_FILENAME_REGEX =\n /^(?:.*?(?:controllers|components)\\/|\\.?\\.\\/)?(.+)(?:[_-]controller\\..+?)$/;\n\nexport function identifierForGlobKey(key) {\n const logicalName = (key.match(CONTROLLER_FILENAME_REGEX) || [])[1];\n if (logicalName) return logicalName.replace(/_/g, '-').replace(/\\//g, '--');\n}\n"],"names":["StimulusControllerResolver","application","resolverFn","AttributeObserver","instance","element","controllerNames","attr","name","err","controllerName","controllerDefinition","createViteGlobResolver","globResults","controllerLoaders","mapGlobKeysToIdentifiers","loader","map","globResult","key","controllerFn","identifierForGlobKey","CONTROLLER_FILENAME_REGEX","logicalName"],"mappings":"uDAEA,MAAqBA,CAA2B,CAC9C,YAAYC,EAAaC,EAAY,CACnC,KAAK,YAAcD,EACd,KAAA,uBAAyB,IACzB,KAAA,yBAA2B,QAChC,KAAK,WAAaC,EAElB,KAAK,wBAA0B,KAAK,wBAAwB,KAAK,IAAI,EAErE,KAAK,SAAW,IAAIC,EAClBF,EAAY,QACZA,EAAY,OAAO,oBACnB,CACE,wBAAyB,KAAK,wBAC9B,6BAA8B,KAAK,uBAAA,CAEvC,CAAA,CAGF,OAAQ,CACN,KAAK,SAAS,MAAM,CAAA,CAGtB,MAAO,CACL,KAAK,SAAS,KAAK,CAAA,CAGrB,OAAO,QAAQA,EAAaC,EAAY,CACtC,MAAME,EAAW,IAAIJ,EAA2BC,EAAaC,CAAU,EACvE,OAAAE,EAAS,MAAM,EACRA,CAAA,CAGT,wBAAwBC,EAAS,CAC/B,IAAIC,EAAkB,KAAK,qBAAqB,IAAID,CAAO,EAC3D,GAAI,CAACC,EAAiB,CACd,MAAAC,EAAOF,EAAQ,aAAa,iBAAiB,EACnD,GAAI,CAACE,EAAM,OAEOD,EAAAC,EAAK,MAAM,KAAK,EAC7B,KAAA,qBAAqB,IAAIF,EAASC,CAAe,CAAA,CAIhD,QAAA,IAAIA,EAAgB,IAAKE,GAAS,KAAK,eAAeA,CAAI,CAAC,CAAC,EAAE,MACnEC,GAAQ,CACC,QAAA,MAAM,+BAA+BA,CAAG,EAAE,CAAA,CAEtD,CAAA,CAGF,MAAM,eAAeC,EAAgB,CAEjC,GAAA,OAAK,mBAAmB,IAAIA,CAAc,GAC1C,KAAK,YAAY,OAAO,oBAAoB,IAAIA,CAAc,GAK3D,MAAA,mBAAmB,IAAIA,CAAc,EAEtC,GAAA,CACF,MAAMC,EAAuB,MAAM,KAAK,WAAWD,CAAc,EAE7DC,GACG,KAAA,YAAY,SAASD,EAAgBC,CAAoB,QAEzDF,EAAK,CACZ,QAAQ,MAAM,8BAA8BC,CAAc,MAAMD,CAAG,EAAE,CAAA,QACrE,CACK,KAAA,mBAAmB,OAAOC,CAAc,CAAA,EAC/C,CAEJ,CAEO,SAASE,KAA0BC,EAAa,CAC/C,MAAAC,EAAoBC,EAAyBF,CAAW,EAkBvD,MAhBY,OAAOH,GAAmB,CACrC,MAAAM,EAASF,EAAkB,IAAIJ,CAAc,EAUnD,GAAKM,EAEG,OAAA,MAAMA,KAAU,OAC1B,CAGF,CAEO,SAASD,EAAyBF,EAAa,CAC9C,MAAAI,MAAU,IAEhB,UAAWC,KAAcL,EACvB,SAAW,CAACM,EAAKC,CAAY,IAAK,OAAO,QAAQF,CAAU,EACzDD,EAAI,IAAII,EAAqBF,CAAG,EAAGC,CAAY,EAI5C,OAAAH,CACT,CAEO,MAAMK,EACX,4EAEK,SAASD,EAAqBF,EAAK,CACxC,MAAMI,GAAeJ,EAAI,MAAMG,CAAyB,GAAK,IAAI,CAAC,EAC9D,GAAAC,SAAoBA,EAAY,QAAQ,KAAM,GAAG,EAAE,QAAQ,MAAO,IAAI,CAC5E"}