Makes vs/nls.availableLanguages work for AMD again.

This commit is contained in:
Henning Dieterichs 2024-08-22 13:09:42 +02:00 committed by Henning Dieterichs
parent f6187471ca
commit 2713684d6c
5 changed files with 97 additions and 19 deletions

View File

@ -5,7 +5,7 @@
import path = require('path'); import path = require('path');
import fs = require('fs'); import fs = require('fs');
import { REPO_ROOT, readFiles, writeFiles, IFile } from '../build/utils'; import { REPO_ROOT, readFiles, writeFiles, IFile, readFile } from '../build/utils';
import { removeDir } from '../build/fs'; import { removeDir } from '../build/fs';
import ts = require('typescript'); import ts = require('typescript');
import { generateMetadata } from './releaseMetadata'; import { generateMetadata } from './releaseMetadata';
@ -66,9 +66,10 @@ generateMetadata();
* Release to `dev` or `min`. * Release to `dev` or `min`.
*/ */
function AMD_releaseOne(type: 'dev' | 'min') { function AMD_releaseOne(type: 'dev' | 'min') {
const coreFiles = readFiles(`node_modules/monaco-editor-core/${type}/**/*`, { let coreFiles = readFiles(`node_modules/monaco-editor-core/${type}/**/*`, {
base: `node_modules/monaco-editor-core/${type}` base: `node_modules/monaco-editor-core/${type}`
}); });
coreFiles = fixNlsFiles(coreFiles);
AMD_addPluginContribs(type, coreFiles); AMD_addPluginContribs(type, coreFiles);
writeFiles(coreFiles, `out/monaco-editor/${type}`); writeFiles(coreFiles, `out/monaco-editor/${type}`);
@ -79,6 +80,33 @@ function AMD_releaseOne(type: 'dev' | 'min') {
writeFiles(pluginFiles, `out/monaco-editor/${type}`); writeFiles(pluginFiles, `out/monaco-editor/${type}`);
} }
function fixNlsFiles(files: IFile[]): IFile[] {
return files.map((f) => {
if (!f.path.match(/nls\.messages\.[a-z\-]+\.js/)) {
return f;
}
const dirName = path.dirname(f.path);
const fileName = path.basename(f.path);
const newPath = path.join(dirName, 'vs', fileName);
let contentStr = f.contents.toString('utf-8');
contentStr = `
define([], function () {
${contentStr}
});
`;
const newContents = Buffer.from(contentStr, 'utf-8');
return {
path: newPath,
contents: newContents
};
});
}
/** /**
* Edit editor.main.js: * Edit editor.main.js:
* - rename the AMD module 'vs/editor/editor.main' to 'vs/editor/edcore.main' * - rename the AMD module 'vs/editor/editor.main' to 'vs/editor/edcore.main'
@ -96,6 +124,15 @@ function AMD_addPluginContribs(type: 'dev' | 'min', files: IFile[]) {
// Rename the AMD module 'vs/editor/editor.main' to 'vs/editor/edcore.main' // Rename the AMD module 'vs/editor/editor.main' to 'vs/editor/edcore.main'
contents = contents.replace(/"vs\/editor\/editor\.main\"/, '"vs/editor/edcore.main"'); contents = contents.replace(/"vs\/editor\/editor\.main\"/, '"vs/editor/edcore.main"');
// This ensures that old nls-plugin configurations are still respected by the new localization solution.
const contentPrefixSource = readFile('src/nls-fix.js')
.contents.toString('utf-8')
.replace(/\r\n|\n/g, ' ');
// TODO: Instead of adding this source to the header to maintain the source map indices, it should rewrite the sourcemap!
const searchValue = 'https://github.com/microsoft/vscode/blob/main/LICENSE.txt';
contents = contents.replace(searchValue, searchValue + ' */ ' + contentPrefixSource + ' /*');
const pluginFiles = readFiles(`out/languages/bundled/amd-${type}/**/monaco.contribution.js`, { const pluginFiles = readFiles(`out/languages/bundled/amd-${type}/**/monaco.contribution.js`, {
base: `out/languages/bundled/amd-${type}` base: `out/languages/bundled/amd-${type}`
}); });

View File

@ -268,16 +268,18 @@ export function readFiles(
}); });
const base = options.base; const base = options.base;
return files.map((file) => readFile(file, base));
}
export function readFile(file: string, base: string = '') {
const baseLength = base === '' ? 0 : base.endsWith('/') ? base.length : base.length + 1; const baseLength = base === '' ? 0 : base.endsWith('/') ? base.length : base.length + 1;
return files.map((file) => { const fullPath = path.join(REPO_ROOT, file);
const fullPath = path.join(REPO_ROOT, file); const contents = fs.readFileSync(fullPath);
const contents = fs.readFileSync(fullPath); const relativePath = file.substring(baseLength);
const relativePath = file.substring(baseLength); return {
return { path: relativePath,
path: relativePath, contents
contents };
};
});
} }
export function writeFiles(files: IFile[], dest: string) { export function writeFiles(files: IFile[], dest: string) {

14
package-lock.json generated
View File

@ -25,7 +25,7 @@
"jsdom": "^19.0.0", "jsdom": "^19.0.0",
"jsonc-parser": "^3.0.0", "jsonc-parser": "^3.0.0",
"mocha": "^9.2.0", "mocha": "^9.2.0",
"monaco-editor-core": "0.51.0-dev-20240725", "monaco-editor-core": "0.51.0-rc2",
"parcel": "^2.7.0", "parcel": "^2.7.0",
"pin-github-action": "^1.8.0", "pin-github-action": "^1.8.0",
"playwright": "^1.32.2", "playwright": "^1.32.2",
@ -5394,9 +5394,9 @@
"dev": true "dev": true
}, },
"node_modules/monaco-editor-core": { "node_modules/monaco-editor-core": {
"version": "0.51.0-dev-20240725", "version": "0.51.0-rc2",
"resolved": "https://registry.npmjs.org/monaco-editor-core/-/monaco-editor-core-0.51.0-dev-20240725.tgz", "resolved": "https://registry.npmjs.org/monaco-editor-core/-/monaco-editor-core-0.51.0-rc2.tgz",
"integrity": "sha512-N/ukRZDRZ31CmVY9iUgmPnjT9kYXVEFhqc6I9/YWCAV8WpgArQXUB3iaMB0QnmQ08yo3D5XgsoHqf+komUj8nA==", "integrity": "sha512-4mZE6qv75JfKfX7YhQqPJc//k8FONTBzVozlJjIS3mU9em/7jaDPBE3uD+iBTjRNANOk+eih9z/DL5UM8CYxvQ==",
"dev": true "dev": true
}, },
"node_modules/mri": { "node_modules/mri": {
@ -11150,9 +11150,9 @@
} }
}, },
"monaco-editor-core": { "monaco-editor-core": {
"version": "0.51.0-dev-20240725", "version": "0.51.0-rc2",
"resolved": "https://registry.npmjs.org/monaco-editor-core/-/monaco-editor-core-0.51.0-dev-20240725.tgz", "resolved": "https://registry.npmjs.org/monaco-editor-core/-/monaco-editor-core-0.51.0-rc2.tgz",
"integrity": "sha512-N/ukRZDRZ31CmVY9iUgmPnjT9kYXVEFhqc6I9/YWCAV8WpgArQXUB3iaMB0QnmQ08yo3D5XgsoHqf+komUj8nA==", "integrity": "sha512-4mZE6qv75JfKfX7YhQqPJc//k8FONTBzVozlJjIS3mU9em/7jaDPBE3uD+iBTjRNANOk+eih9z/DL5UM8CYxvQ==",
"dev": true "dev": true
}, },
"mri": { "mri": {

View File

@ -52,7 +52,7 @@
"jsdom": "^19.0.0", "jsdom": "^19.0.0",
"jsonc-parser": "^3.0.0", "jsonc-parser": "^3.0.0",
"mocha": "^9.2.0", "mocha": "^9.2.0",
"monaco-editor-core": "0.51.0-dev-20240725", "monaco-editor-core": "0.51.0-rc2",
"parcel": "^2.7.0", "parcel": "^2.7.0",
"pin-github-action": "^1.8.0", "pin-github-action": "^1.8.0",
"playwright": "^1.32.2", "playwright": "^1.32.2",

39
src/nls-fix.js Normal file
View File

@ -0,0 +1,39 @@
/* This fix ensures that old nls-plugin configurations are still respected by the new localization solution. */
/* We should try to avoid this file and find a different solution. */
/* Warning: This file still has to work when replacing "\n" with " "! */
/**
* @type {typeof define}
*/
const globalDefine = globalThis.define;
globalDefine('vs/nls.messages-loader', [], function (...args) {
return {
load: (name, req, load, config) => {
const requestedLanguage = config['vs/nls']?.availableLanguages?.['*'];
if (!requestedLanguage || requestedLanguage === 'en') {
load({});
} else {
req([`vs/nls.messages.${requestedLanguage}`], () => {
load({});
});
}
}
};
});
globalDefine(
'vs/nls.messages',
['require', 'exports', 'vs/nls.messages-loader!'],
function (require, exports) {
Object.assign(exports, {
getNLSMessages: () => globalThis._VSCODE_NLS_MESSAGES,
getNLSLanguage: () => globalThis._VSCODE_NLS_LANGUAGE
});
}
);
define = function (...args) {
if (args.length > 0 && args[0] === 'vs/nls.messages') {
return;
}
return globalDefine(...args);
};
define.amd = true;