You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
159 lines
4.7 KiB
JavaScript
159 lines
4.7 KiB
JavaScript
5 years ago
|
/*---------------------------------------------------------------------------------------------
|
||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
* Licensed under the MIT License. See LICENSE in the project root for license information.
|
||
|
*--------------------------------------------------------------------------------------------*/
|
||
|
|
||
|
const glob = require('glob');
|
||
|
const path = require('path');
|
||
|
const fs = require('fs');
|
||
|
|
||
|
/**
|
||
|
* @returns { Promise<{ label: string; entry: string; }[]> }
|
||
|
*/
|
||
|
function getBasicLanguages() {
|
||
|
return new Promise((resolve, reject) => {
|
||
|
glob('./node_modules/monaco-editor/esm/vs/basic-languages/*/*.contribution.js', { cwd: path.dirname(__dirname) }, (err, files) => {
|
||
|
if (err) {
|
||
|
reject(err);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
resolve(files.map((file) => {
|
||
|
const entry = file.substring('./node_modules/monaco-editor/esm/'.length).replace(/\.js$/, '');
|
||
|
const label = path.basename(file).replace(/\.contribution\.js$/, '');
|
||
|
return {
|
||
|
label: label,
|
||
|
entry: entry
|
||
|
};
|
||
|
}));
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @returns { Promise<string[]> }
|
||
|
*/
|
||
|
function readAdvancedLanguages() {
|
||
|
return new Promise((resolve, reject) => {
|
||
|
glob('./node_modules/monaco-editor/esm/vs/language/*/monaco.contribution.js', { cwd: path.dirname(__dirname) }, (err, files) => {
|
||
|
if (err) {
|
||
|
reject(err);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
resolve(
|
||
|
files
|
||
|
.map(file => file.substring('./node_modules/monaco-editor/esm/vs/language/'.length))
|
||
|
.map(file => file.substring(0, file.length - '/monaco.contribution.js'.length))
|
||
|
);
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @returns { Promise<{ label: string; entry: string; worker: { id: string; entry: string; }; }[]> }
|
||
|
*/
|
||
|
function getAdvancedLanguages() {
|
||
|
return readAdvancedLanguages().then((languages) => {
|
||
|
let result = [];
|
||
|
for (const lang of languages) {
|
||
|
let shortLang = (lang === 'typescript' ? 'ts' : lang);
|
||
|
const entry = `vs/language/${lang}/monaco.contribution`;
|
||
|
checkFileExists(entry);
|
||
|
const workerId = `vs/language/${lang}/${shortLang}Worker`;
|
||
|
checkFileExists(workerId);
|
||
|
const workerEntry = `vs/language/${lang}/${shortLang}.worker`;
|
||
|
checkFileExists(workerEntry);
|
||
|
result.push({
|
||
|
label: lang,
|
||
|
entry: entry,
|
||
|
worker: {
|
||
|
id: workerId,
|
||
|
entry: workerEntry
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
return result;
|
||
|
});
|
||
|
|
||
|
function checkFileExists(moduleName) {
|
||
|
const filePath = path.join(__dirname, '..', 'node_modules/monaco-editor/esm', `${moduleName}.js`);
|
||
|
if (!fs.existsSync(filePath)) {
|
||
|
console.error(`Could not find ${filePath}.`);
|
||
|
process.exit(1);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Promise.all([getBasicLanguages(), getAdvancedLanguages()]).then(([basicLanguages, advancedLanguages]) => {
|
||
|
basicLanguages.sort(strcmp);
|
||
|
advancedLanguages.sort(strcmp);
|
||
|
|
||
|
let i = 0, len = basicLanguages.length;
|
||
|
let j = 0, lenJ = advancedLanguages.length;
|
||
|
let result = [];
|
||
|
while (i < len || j < lenJ) {
|
||
|
if (i < len && j < lenJ) {
|
||
|
if (basicLanguages[i].label === advancedLanguages[j].label) {
|
||
|
let entry = [];
|
||
|
entry.push(basicLanguages[i].entry);
|
||
|
entry.push(advancedLanguages[j].entry);
|
||
|
result.push({
|
||
|
label: basicLanguages[i].label,
|
||
|
entry: entry,
|
||
|
worker: advancedLanguages[j].worker
|
||
|
});
|
||
|
i++;
|
||
|
j++;
|
||
|
} else if (basicLanguages[i].label < advancedLanguages[j].label) {
|
||
|
result.push(basicLanguages[i]);
|
||
|
i++;
|
||
|
} else {
|
||
|
result.push(advancedLanguages[j]);
|
||
|
j++;
|
||
|
}
|
||
|
} else if (i < len) {
|
||
|
result.push(basicLanguages[i]);
|
||
|
i++;
|
||
|
} else {
|
||
|
result.push(advancedLanguages[j]);
|
||
|
j++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const code = `//
|
||
|
// THIS IS A GENERATED FILE. PLEASE DO NOT EDIT DIRECTLY.
|
||
|
// node scripts/import-editor.js
|
||
|
//
|
||
|
import { IFeatureDefinition } from "./types";
|
||
|
|
||
|
const languagesArr: IFeatureDefinition[] = ${
|
||
|
JSON.stringify(result, null, ' ')
|
||
|
.replace(/"label":/g, 'label:')
|
||
|
.replace(/"entry":/g, 'entry:')
|
||
|
.replace(/"worker":/g, 'worker:')
|
||
|
.replace(/"id":/g, 'id:')
|
||
|
.replace(/"/g, '\'')
|
||
|
};
|
||
|
|
||
|
export const languagesById: { [language: string]: IFeatureDefinition; } = {};
|
||
|
languagesArr.forEach(language => languagesById[language.label] = language);
|
||
|
`
|
||
|
fs.writeFileSync(path.join(__dirname, '../src/languages.ts'), code);
|
||
|
});
|
||
|
|
||
|
function strcmp(a, b) {
|
||
|
if (a < b) {
|
||
|
return -1;
|
||
|
}
|
||
|
if (a > b) {
|
||
|
return 1;
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
// getBasicLanguages().then((basicLanguages) => {
|
||
|
// console.log(basicLanguages);
|
||
|
// });
|
||
|
// getAdvancedLanguages().then(r => console.log(r));
|