diff --git a/package.json b/package.json index 45dea45..0f43e8e 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,8 @@ "test": "tstest test/ --web --verbose --timeout 30 --logfile", "build": "tsbuild tsfolders --allowimplicitany && tsbundle element --production --bundler esbuild", "watch": "tswatch element", - "buildDocs": "tsdoc" + "buildDocs": "tsdoc", + "postinstall": "node scripts/update-monaco-version.cjs" }, "author": "Lossless GmbH", "license": "MIT", diff --git a/readme.plan.md b/readme.plan.md index aa7a75e..1796579 100644 Binary files a/readme.plan.md and b/readme.plan.md differ diff --git a/scripts/update-monaco-version.cjs b/scripts/update-monaco-version.cjs new file mode 100755 index 0000000..0f2f256 --- /dev/null +++ b/scripts/update-monaco-version.cjs @@ -0,0 +1,44 @@ +#!/usr/bin/env node +const fs = require('fs'); +const path = require('path'); + +const projectRoot = path.resolve(__dirname, '..'); + +function resolveMonacoPackageJson() { + try { + const resolvedPath = require.resolve('monaco-editor/package.json', { + paths: [projectRoot], + }); + return resolvedPath; + } catch (error) { + console.error('[dees-editor] Unable to resolve monaco-editor/package.json'); + throw error; + } +} + +function getMonacoVersion() { + const monacoPackagePath = resolveMonacoPackageJson(); + const monacoPackage = require(monacoPackagePath); + if (!monacoPackage.version) { + throw new Error('[dees-editor] monaco-editor/package.json does not expose a version field'); + } + return monacoPackage.version; +} + +function writeVersionModule(version) { + const targetDir = path.join(projectRoot, 'ts_web', 'elements', 'dees-editor'); + fs.mkdirSync(targetDir, { recursive: true }); + const targetFile = path.join(targetDir, 'version.ts'); + const fileContent = `// Auto-generated by scripts/update-monaco-version.cjs\nexport const MONACO_VERSION = '${version}';\n`; + fs.writeFileSync(targetFile, fileContent, 'utf8'); + console.log(`[dees-editor] Wrote ${path.relative(projectRoot, targetFile)} with monaco-editor@${version}`); +} + +try { + const version = getMonacoVersion(); + writeVersionModule(version); +} catch (error) { + console.error('[dees-editor] Failed to update Monaco version module.'); + console.error(error instanceof Error ? error.message : error); + process.exitCode = 1; +} diff --git a/ts_web/elements/dees-editor/dees-editor.ts b/ts_web/elements/dees-editor/dees-editor.ts index 2a365fb..7514c3d 100644 --- a/ts_web/elements/dees-editor/dees-editor.ts +++ b/ts_web/elements/dees-editor/dees-editor.ts @@ -8,6 +8,7 @@ import { cssManager, } from '@design.estate/dees-element'; import * as domtools from '@design.estate/dees-domtools'; +import { MONACO_VERSION } from './version.js'; import type * as monaco from 'monaco-editor'; @@ -80,10 +81,11 @@ export class DeesEditor extends DeesElement { ): Promise { super.firstUpdated(_changedProperties); const container = this.shadowRoot.getElementById('container'); + const monacoCdnBase = `https://cdn.jsdelivr.net/npm/monaco-editor@${MONACO_VERSION}`; if (!DeesEditor.monacoDeferred) { DeesEditor.monacoDeferred = domtools.plugins.smartpromise.defer(); - const scriptUrl = `https://cdn.jsdelivr.net/npm/monaco-editor/min/vs/loader.js`; + const scriptUrl = `${monacoCdnBase}/min/vs/loader.js`; const script = document.createElement('script'); script.src = scriptUrl; script.onload = () => { @@ -94,7 +96,7 @@ export class DeesEditor extends DeesElement { await DeesEditor.monacoDeferred.promise; (window as any).require.config({ - paths: { vs: 'https://cdn.jsdelivr.net/npm/monaco-editor/min/vs' }, + paths: { vs: `${monacoCdnBase}/min/vs` }, }); (window as any).require(['vs/editor/editor.main'], async () => { const editor = ((window as any).monaco.editor as typeof monaco.editor).create(container, { @@ -109,7 +111,7 @@ export class DeesEditor extends DeesElement { this.editorDeferred.resolve(editor); }); const css = await ( - await fetch('https://cdn.jsdelivr.net/npm/monaco-editor/min/vs/editor/editor.main.css') + await fetch(`${monacoCdnBase}/min/vs/editor/editor.main.css`) ).text(); const styleElement = document.createElement('style'); styleElement.textContent = css; diff --git a/ts_web/elements/dees-editor/version.ts b/ts_web/elements/dees-editor/version.ts new file mode 100644 index 0000000..918039f --- /dev/null +++ b/ts_web/elements/dees-editor/version.ts @@ -0,0 +1,2 @@ +// Auto-generated by scripts/update-monaco-version.cjs +export const MONACO_VERSION = '0.52.2'; diff --git a/ts_web/elements/index.ts b/ts_web/elements/index.ts index 301ae6c..7e045a6 100644 --- a/ts_web/elements/index.ts +++ b/ts_web/elements/index.ts @@ -19,7 +19,7 @@ export * from './dees-contextmenu.js'; export * from './dees-dataview-codebox.js'; export * from './dees-dataview-statusobject.js'; export * from './dees-dashboardgrid/index.js'; -export * from './dees-editor.js'; +export * from './dees-editor/dees-editor.js'; export * from './dees-editor-markdown.js'; export * from './dees-editor-markdownoutlet.js'; export * from './dees-form-submit.js';