vite-stimulus-initializer
Version:
Initializer for Stimulus on Vite with configurable Naming Conventions based on the filename
52 lines (37 loc) • 1.36 kB
JavaScript
import { Application } from "@hotwired/stimulus"
window.Stimulus = Application.start()
export function initStimulus(imports, skipFromNamespacing, options = {}) {
let checkDoubles = {}
let folderSeparator = '--'
if (options.folderSeparator) {
folderSeparator = options.folderSeparator;
}
for (const path in imports) {
// skip n from namespacing
const p = path.split('/')
p.splice(0,skipFromNamespacing)
// skip additional folder from namespacing
if (options.exclude) {
if (options.exclude.includes(p[0])) {
p.splice(0,1)
}
}
// build tagName
const tn = p.join(folderSeparator)
const tagName = tn.match(/^[\s\S]+(?=-controller.js)/)[0]
if (options.debug) {
console.debug('STIMULUS IDENTIFIER «' + tagName + '» from: ' + path)
}
// check
if ( tagName in checkDoubles ) {
checkDoubles[tagName].push(path)
const err = "NAMING CONFLICT STIMULUS\nDouble identifier: «" + tagName + "»\n\nfrom:\n" + checkDoubles[tagName].join("\n")
console.error(err)
alert(err)
} else {
checkDoubles[tagName] = [path]
}
const app = imports[path].default;
Stimulus.register(tagName, app)
}
}