Resolving package.json conflicts by unioning unique lines is right for a file that holds one entry per line. Applied to ordinary source it duplicates declarations, because both sides of a hunk keep their copy and nothing de-duplicates across the join. Eleven plugin entry points ended with the same import twice, and the poster renderer with two identical `const sheet`. Each is a SyntaxError: every one of those bundles would have failed to build, and the poster export would not run. Found by parse-checking every changed .js against the merge base, not by the gates -- gates:pre passed 101 of 102 with all twelve files broken, because its parse gates do not cover plugin entry points. One measurement trap worth recording. `node --check` on a .js file parses it as CommonJS, so a bare `import` is a syntax error and ALL 28 entry points appear broken, on development too. That reading says the tree is on fire and is simply wrong. Copying each file to a .mjs and checking that parses it as a module, which separates the eleven that are genuinely broken here from the rest that are fine.
36 lines
1.4 KiB
JavaScript
36 lines
1.4 KiB
JavaScript
import { defineMapElement } from '@map/elements/defineMapElement.js'
|
|
/**
|
|
* plugin-designs/gospel-internet/index.js — bundle entry for the GOSPEL x INTERNET BOARD.
|
|
*
|
|
* Registers ONE custom-element tag:
|
|
* <gospel-internet-board profile-config='{"profile":"board"}'></gospel-internet-board>
|
|
*
|
|
* Folder = bundle, each flat .vue = a profile (`profile` is the FILENAME). ProfileLoader lives in @map
|
|
* and cannot glob into a bundle folder, so the bundle hands its registry over via provide.
|
|
*
|
|
* appI18n is PROVIDED (as doxa-simple-map does) so a host's profile-config `lang`/`locale` drives the
|
|
* catalogue, not only ?lang= — two channels a real host uses, and both must reach the strings.
|
|
*
|
|
* The RTL text plugin is installed by the map panel itself (installRtlTextPlugin before `new Map`), on
|
|
* whichever engine resolveMapProvider picked.
|
|
*/
|
|
|
|
const profileModules = import.meta.glob('./*.vue')
|
|
|
|
function buildBoardElement() {
|
|
return defineMapElement({
|
|
profileModules,
|
|
configureApp: (app, { pinia, i18n }) => {
|
|
// Per-instance Pinia + i18n so two boards on one page never share state.
|
|
},
|
|
})
|
|
}
|
|
|
|
const GospelInternetBoard = buildBoardElement()
|
|
|
|
// Guarded: customElements.define() is one-shot per tag per page.
|
|
if (typeof customElements !== 'undefined' && !customElements.get('gospel-internet-board')) {
|
|
customElements.define('gospel-internet-board', GospelInternetBoard)
|
|
}
|
|
|
|
export default GospelInternetBoard
|