diff --git a/package-lock.json b/package-lock.json index c160fb4c..da465cca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -54,7 +54,7 @@ "zx": "^7.2.1" }, "peerDependencies": { - "monaco-editor": "~0.37.1", + "monaco-editor": "0.37.1", "vscode-oniguruma": "^1.7.0", "vscode-textmate": "^9.0.0", "yauzl": "^2.10.0" diff --git a/package.json b/package.json index 7c0ca38b..d50025ed 100644 --- a/package.json +++ b/package.json @@ -223,7 +223,7 @@ "zx": "^7.2.1" }, "peerDependencies": { - "monaco-editor": "~0.37.1", + "monaco-editor": "0.37.1", "vscode-oniguruma": "^1.7.0", "vscode-textmate": "^9.0.0", "yauzl": "^2.10.0" diff --git a/src/monaco-treemending.ts b/src/monaco-treemending.ts index d7d8295b..0f0f7243 100644 --- a/src/monaco-treemending.ts +++ b/src/monaco-treemending.ts @@ -5,12 +5,32 @@ import { createRequire } from 'node:module' const require = createRequire(import.meta.url) async function run () { + const ownPackageJson = JSON.parse((await fs.readFile(require.resolve('../package.json'))).toString('utf-8')) + const expectedMonacoVersion = ownPackageJson.peerDependencies['monaco-editor'] + const patchContent = await fs.readFile(require.resolve('../monaco-editor-treemending.patch')) - const monacoDirectory = path.resolve(path.dirname(require.resolve('monaco-editor/monaco.d.ts', { paths: [process.cwd()] })), 'esm') + const monacoDirectory = path.dirname(require.resolve('monaco-editor/monaco.d.ts', { paths: [process.cwd()] })) + const monacoEsmDirectory = path.resolve(monacoDirectory, 'esm') + const monacoPackageJsonFile = path.resolve(monacoDirectory, 'package.json') + + const monacoPackageJson = JSON.parse((await fs.readFile(monacoPackageJsonFile)).toString('utf-8')) + const monacoVersion = monacoPackageJson.version + + if (expectedMonacoVersion !== monacoVersion) { + console.error(`Wrong monaco-editor version: expecting ${expectedMonacoVersion}, got ${monacoVersion}`) + process.exit(1) + } + + const alreadyPatched: boolean = monacoPackageJson.treemended ?? false + if (alreadyPatched) { + // eslint-disable-next-line no-console + console.info('Monaco-editor has already been tree-mended, ignoring') + process.exit(0) + } function getMonacoFile (diff: ParsedDiff) { - return path.resolve(monacoDirectory, diff.oldFileName!.slice('a/'.length)) + return path.resolve(monacoEsmDirectory, diff.oldFileName!.slice('a/'.length)) } await new Promise((resolve, reject) => { @@ -46,11 +66,19 @@ async function run () { } }) }) -} -run().then(() => { + // Mark monaco as treemended + await fs.writeFile(monacoPackageJsonFile, JSON.stringify({ + ...monacoPackageJson, + treemended: true + }, null, 2)) + // eslint-disable-next-line no-console console.info('Monaco-editor was tree-mended') -}, err => { + process.exit(0) +} + +run().catch(err => { console.error(err) + process.exit(1) })