mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-08 09:08:48 +01:00
Add versioning to monaco.d.ts generation
This commit is contained in:
@@ -189,7 +189,12 @@ class MonacoGenerator {
|
|||||||
// Nothing changed
|
// Nothing changed
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return monacodts.run2('src', this._dtsFilesContents2);
|
let r = monacodts.run2('src', this._dtsFilesContents2);
|
||||||
|
if (!r && !this._isWatch) {
|
||||||
|
// The build must always be able to generate the monaco.d.ts
|
||||||
|
throw new Error(`monaco.d.ts genration error - Cannot continue`);
|
||||||
|
}
|
||||||
|
return r;
|
||||||
}
|
}
|
||||||
_log(message, ...rest) {
|
_log(message, ...rest) {
|
||||||
util2.log(util2.colors.cyan('[monaco.d.ts]'), message, ...rest);
|
util2.log(util2.colors.cyan('[monaco.d.ts]'), message, ...rest);
|
||||||
|
|||||||
@@ -242,7 +242,12 @@ class MonacoGenerator {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return monacodts.run2('src', this._dtsFilesContents2);
|
let r = monacodts.run2('src', this._dtsFilesContents2);
|
||||||
|
if (!r && !this._isWatch) {
|
||||||
|
// The build must always be able to generate the monaco.d.ts
|
||||||
|
throw new Error(`monaco.d.ts genration error - Cannot continue`);
|
||||||
|
}
|
||||||
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
private _log(message: any, ...rest: any[]): void {
|
private _log(message: any, ...rest: any[]): void {
|
||||||
|
|||||||
+46
-8
@@ -8,6 +8,7 @@ const fs = require("fs");
|
|||||||
const ts = require("typescript");
|
const ts = require("typescript");
|
||||||
const path = require("path");
|
const path = require("path");
|
||||||
const util = require("gulp-util");
|
const util = require("gulp-util");
|
||||||
|
const dtsv = '1';
|
||||||
const tsfmt = require('../../tsfmt.json');
|
const tsfmt = require('../../tsfmt.json');
|
||||||
function log(message, ...rest) {
|
function log(message, ...rest) {
|
||||||
util.log(util.colors.cyan('[monaco.d.ts]'), message, ...rest);
|
util.log(util.colors.cyan('[monaco.d.ts]'), message, ...rest);
|
||||||
@@ -21,6 +22,9 @@ function logErr(message, ...rest) {
|
|||||||
util.log(util.colors.red('[monaco.d.ts]'), 'WHILE HANDLING RULE: ', CURRENT_PROCESSING_RULE);
|
util.log(util.colors.red('[monaco.d.ts]'), 'WHILE HANDLING RULE: ', CURRENT_PROCESSING_RULE);
|
||||||
util.log(util.colors.red('[monaco.d.ts]'), message, ...rest);
|
util.log(util.colors.red('[monaco.d.ts]'), message, ...rest);
|
||||||
}
|
}
|
||||||
|
function _logErr(message, ...rest) {
|
||||||
|
util.log(util.colors.red(`[monaco.d.ts]`), message, ...rest);
|
||||||
|
}
|
||||||
function moduleIdToPath(out, moduleId) {
|
function moduleIdToPath(out, moduleId) {
|
||||||
if (/\.d\.ts/.test(moduleId)) {
|
if (/\.d\.ts/.test(moduleId)) {
|
||||||
return path.join(SRC, moduleId);
|
return path.join(SRC, moduleId);
|
||||||
@@ -315,6 +319,7 @@ function generateDeclarationFile(recipe, sourceFileGetter) {
|
|||||||
let usageCounter = 0;
|
let usageCounter = 0;
|
||||||
let usageImports = [];
|
let usageImports = [];
|
||||||
let usage = [];
|
let usage = [];
|
||||||
|
let failed = false;
|
||||||
usage.push(`var a;`);
|
usage.push(`var a;`);
|
||||||
usage.push(`var b;`);
|
usage.push(`var b;`);
|
||||||
const generateUsageImport = (moduleId) => {
|
const generateUsageImport = (moduleId) => {
|
||||||
@@ -323,13 +328,23 @@ function generateDeclarationFile(recipe, sourceFileGetter) {
|
|||||||
return importName;
|
return importName;
|
||||||
};
|
};
|
||||||
let enums = [];
|
let enums = [];
|
||||||
|
let version = null;
|
||||||
lines.forEach(line => {
|
lines.forEach(line => {
|
||||||
|
if (failed) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let m0 = line.match(/^\/\/dtsv=(\d+)$/);
|
||||||
|
if (m0) {
|
||||||
|
version = m0[1];
|
||||||
|
}
|
||||||
let m1 = line.match(/^\s*#include\(([^;)]*)(;[^)]*)?\)\:(.*)$/);
|
let m1 = line.match(/^\s*#include\(([^;)]*)(;[^)]*)?\)\:(.*)$/);
|
||||||
if (m1) {
|
if (m1) {
|
||||||
CURRENT_PROCESSING_RULE = line;
|
CURRENT_PROCESSING_RULE = line;
|
||||||
let moduleId = m1[1];
|
let moduleId = m1[1];
|
||||||
const sourceFile = sourceFileGetter(moduleId);
|
const sourceFile = sourceFileGetter(moduleId);
|
||||||
if (!sourceFile) {
|
if (!sourceFile) {
|
||||||
|
_logErr(`gulp watch restart required. ${moduleId} was added to 'monaco.d.ts.recipe'.`);
|
||||||
|
failed = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const importName = generateUsageImport(moduleId);
|
const importName = generateUsageImport(moduleId);
|
||||||
@@ -355,6 +370,8 @@ function generateDeclarationFile(recipe, sourceFileGetter) {
|
|||||||
let moduleId = m2[1];
|
let moduleId = m2[1];
|
||||||
const sourceFile = sourceFileGetter(moduleId);
|
const sourceFile = sourceFileGetter(moduleId);
|
||||||
if (!sourceFile) {
|
if (!sourceFile) {
|
||||||
|
_logErr(`gulp watch restart required. ${moduleId} was added to 'monaco.d.ts.recipe'.`);
|
||||||
|
failed = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const importName = generateUsageImport(moduleId);
|
const importName = generateUsageImport(moduleId);
|
||||||
@@ -391,6 +408,18 @@ function generateDeclarationFile(recipe, sourceFileGetter) {
|
|||||||
}
|
}
|
||||||
result.push(line);
|
result.push(line);
|
||||||
});
|
});
|
||||||
|
if (failed) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (version !== dtsv) {
|
||||||
|
if (!version) {
|
||||||
|
_logErr(`gulp watch restart required. 'monaco.d.ts.recipe' is written before versioning was introduced.`);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_logErr(`gulp watch restart required. 'monaco.d.ts.recipe' v${version} does not match runtime v${dtsv}.`);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
let resultTxt = result.join(endl);
|
let resultTxt = result.join(endl);
|
||||||
resultTxt = resultTxt.replace(/\bURI\b/g, 'Uri');
|
resultTxt = resultTxt.replace(/\bURI\b/g, 'Uri');
|
||||||
resultTxt = resultTxt.replace(/\bEvent</g, 'IEvent<');
|
resultTxt = resultTxt.replace(/\bEvent</g, 'IEvent<');
|
||||||
@@ -405,11 +434,11 @@ function generateDeclarationFile(recipe, sourceFileGetter) {
|
|||||||
''
|
''
|
||||||
].concat(enums).join(endl);
|
].concat(enums).join(endl);
|
||||||
resultEnums = format(resultEnums, endl);
|
resultEnums = format(resultEnums, endl);
|
||||||
return [
|
return {
|
||||||
resultTxt,
|
result: resultTxt,
|
||||||
`${usageImports.join('\n')}\n\n${usage.join('\n')}`,
|
usageContent: `${usageImports.join('\n')}\n\n${usage.join('\n')}`,
|
||||||
resultEnums
|
enums: resultEnums
|
||||||
];
|
};
|
||||||
}
|
}
|
||||||
function getIncludesInRecipe() {
|
function getIncludesInRecipe() {
|
||||||
let recipe = fs.readFileSync(exports.RECIPE_PATH).toString();
|
let recipe = fs.readFileSync(exports.RECIPE_PATH).toString();
|
||||||
@@ -439,7 +468,13 @@ exports.getFilesToWatch = getFilesToWatch;
|
|||||||
function _run(sourceFileGetter) {
|
function _run(sourceFileGetter) {
|
||||||
log('Starting monaco.d.ts generation');
|
log('Starting monaco.d.ts generation');
|
||||||
const recipe = fs.readFileSync(exports.RECIPE_PATH).toString();
|
const recipe = fs.readFileSync(exports.RECIPE_PATH).toString();
|
||||||
const [result, usageContent, enums] = generateDeclarationFile(recipe, sourceFileGetter);
|
const t = generateDeclarationFile(recipe, sourceFileGetter);
|
||||||
|
if (!t) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
const result = t.result;
|
||||||
|
const usageContent = t.usageContent;
|
||||||
|
const enums = t.enums;
|
||||||
const currentContent = fs.readFileSync(DECLARATION_PATH).toString();
|
const currentContent = fs.readFileSync(DECLARATION_PATH).toString();
|
||||||
const one = currentContent.replace(/\r\n/gm, '\n');
|
const one = currentContent.replace(/\r\n/gm, '\n');
|
||||||
const other = result.replace(/\r\n/gm, '\n');
|
const other = result.replace(/\r\n/gm, '\n');
|
||||||
@@ -470,7 +505,6 @@ function run(out, inputFiles) {
|
|||||||
};
|
};
|
||||||
return _run(sourceFileGetter);
|
return _run(sourceFileGetter);
|
||||||
}
|
}
|
||||||
exports.run = run;
|
|
||||||
function run2(out, sourceFileMap) {
|
function run2(out, sourceFileMap) {
|
||||||
const sourceFileGetter = (moduleId) => {
|
const sourceFileGetter = (moduleId) => {
|
||||||
let filePath = path.normalize(moduleIdToPath(out, moduleId));
|
let filePath = path.normalize(moduleIdToPath(out, moduleId));
|
||||||
@@ -550,6 +584,10 @@ function execute() {
|
|||||||
OUTPUT_FILES[SRC_FILE_TO_EXPECTED_NAME[fileName]] = emitOutput.outputFiles[0].text;
|
OUTPUT_FILES[SRC_FILE_TO_EXPECTED_NAME[fileName]] = emitOutput.outputFiles[0].text;
|
||||||
});
|
});
|
||||||
console.log(`Generating .d.ts took ${Date.now() - t1} ms`);
|
console.log(`Generating .d.ts took ${Date.now() - t1} ms`);
|
||||||
return run('src', OUTPUT_FILES);
|
let r = run('src', OUTPUT_FILES);
|
||||||
|
if (!r) {
|
||||||
|
throw new Error(`monaco.d.ts genration error - Cannot continue`);
|
||||||
|
}
|
||||||
|
return r;
|
||||||
}
|
}
|
||||||
exports.execute = execute;
|
exports.execute = execute;
|
||||||
|
|||||||
+62
-11
@@ -8,6 +8,8 @@ import * as ts from 'typescript';
|
|||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import * as util from 'gulp-util';
|
import * as util from 'gulp-util';
|
||||||
|
|
||||||
|
const dtsv = '1';
|
||||||
|
|
||||||
const tsfmt = require('../../tsfmt.json');
|
const tsfmt = require('../../tsfmt.json');
|
||||||
|
|
||||||
function log(message: any, ...rest: any[]): void {
|
function log(message: any, ...rest: any[]): void {
|
||||||
@@ -24,6 +26,9 @@ function logErr(message: any, ...rest: any[]): void {
|
|||||||
util.log(util.colors.red('[monaco.d.ts]'), 'WHILE HANDLING RULE: ', CURRENT_PROCESSING_RULE);
|
util.log(util.colors.red('[monaco.d.ts]'), 'WHILE HANDLING RULE: ', CURRENT_PROCESSING_RULE);
|
||||||
util.log(util.colors.red('[monaco.d.ts]'), message, ...rest);
|
util.log(util.colors.red('[monaco.d.ts]'), message, ...rest);
|
||||||
}
|
}
|
||||||
|
function _logErr(message: any, ...rest: any[]): void {
|
||||||
|
util.log(util.colors.red(`[monaco.d.ts]`), message, ...rest);
|
||||||
|
}
|
||||||
|
|
||||||
function moduleIdToPath(out: string, moduleId: string): string {
|
function moduleIdToPath(out: string, moduleId: string): string {
|
||||||
if (/\.d\.ts/.test(moduleId)) {
|
if (/\.d\.ts/.test(moduleId)) {
|
||||||
@@ -362,7 +367,13 @@ function createReplacer(data: string): (str: string) => string {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function generateDeclarationFile(recipe: string, sourceFileGetter: SourceFileGetter): [string, string, string] {
|
interface ITempResult {
|
||||||
|
result: string;
|
||||||
|
usageContent: string;
|
||||||
|
enums: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateDeclarationFile(recipe: string, sourceFileGetter: SourceFileGetter): ITempResult | null {
|
||||||
const endl = /\r\n/.test(recipe) ? '\r\n' : '\n';
|
const endl = /\r\n/.test(recipe) ? '\r\n' : '\n';
|
||||||
|
|
||||||
let lines = recipe.split(endl);
|
let lines = recipe.split(endl);
|
||||||
@@ -372,6 +383,8 @@ function generateDeclarationFile(recipe: string, sourceFileGetter: SourceFileGet
|
|||||||
let usageImports: string[] = [];
|
let usageImports: string[] = [];
|
||||||
let usage: string[] = [];
|
let usage: string[] = [];
|
||||||
|
|
||||||
|
let failed = false;
|
||||||
|
|
||||||
usage.push(`var a;`);
|
usage.push(`var a;`);
|
||||||
usage.push(`var b;`);
|
usage.push(`var b;`);
|
||||||
|
|
||||||
@@ -382,15 +395,27 @@ function generateDeclarationFile(recipe: string, sourceFileGetter: SourceFileGet
|
|||||||
};
|
};
|
||||||
|
|
||||||
let enums: string[] = [];
|
let enums: string[] = [];
|
||||||
|
let version: string | null = null;
|
||||||
|
|
||||||
lines.forEach(line => {
|
lines.forEach(line => {
|
||||||
|
|
||||||
|
if (failed) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let m0 = line.match(/^\/\/dtsv=(\d+)$/);
|
||||||
|
if (m0) {
|
||||||
|
version = m0[1];
|
||||||
|
}
|
||||||
|
|
||||||
let m1 = line.match(/^\s*#include\(([^;)]*)(;[^)]*)?\)\:(.*)$/);
|
let m1 = line.match(/^\s*#include\(([^;)]*)(;[^)]*)?\)\:(.*)$/);
|
||||||
if (m1) {
|
if (m1) {
|
||||||
CURRENT_PROCESSING_RULE = line;
|
CURRENT_PROCESSING_RULE = line;
|
||||||
let moduleId = m1[1];
|
let moduleId = m1[1];
|
||||||
const sourceFile = sourceFileGetter(moduleId);
|
const sourceFile = sourceFileGetter(moduleId);
|
||||||
if (!sourceFile) {
|
if (!sourceFile) {
|
||||||
|
_logErr(`gulp watch restart required. ${moduleId} was added to 'monaco.d.ts.recipe'.`);
|
||||||
|
failed = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -420,6 +445,8 @@ function generateDeclarationFile(recipe: string, sourceFileGetter: SourceFileGet
|
|||||||
let moduleId = m2[1];
|
let moduleId = m2[1];
|
||||||
const sourceFile = sourceFileGetter(moduleId);
|
const sourceFile = sourceFileGetter(moduleId);
|
||||||
if (!sourceFile) {
|
if (!sourceFile) {
|
||||||
|
_logErr(`gulp watch restart required. ${moduleId} was added to 'monaco.d.ts.recipe'.`);
|
||||||
|
failed = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -461,6 +488,19 @@ function generateDeclarationFile(recipe: string, sourceFileGetter: SourceFileGet
|
|||||||
result.push(line);
|
result.push(line);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (failed) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (version !== dtsv) {
|
||||||
|
if (!version) {
|
||||||
|
_logErr(`gulp watch restart required. 'monaco.d.ts.recipe' is written before versioning was introduced.`);
|
||||||
|
} else {
|
||||||
|
_logErr(`gulp watch restart required. 'monaco.d.ts.recipe' v${version} does not match runtime v${dtsv}.`);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
let resultTxt = result.join(endl);
|
let resultTxt = result.join(endl);
|
||||||
resultTxt = resultTxt.replace(/\bURI\b/g, 'Uri');
|
resultTxt = resultTxt.replace(/\bURI\b/g, 'Uri');
|
||||||
resultTxt = resultTxt.replace(/\bEvent</g, 'IEvent<');
|
resultTxt = resultTxt.replace(/\bEvent</g, 'IEvent<');
|
||||||
@@ -477,11 +517,11 @@ function generateDeclarationFile(recipe: string, sourceFileGetter: SourceFileGet
|
|||||||
].concat(enums).join(endl);
|
].concat(enums).join(endl);
|
||||||
resultEnums = format(resultEnums, endl);
|
resultEnums = format(resultEnums, endl);
|
||||||
|
|
||||||
return [
|
return {
|
||||||
resultTxt,
|
result: resultTxt,
|
||||||
`${usageImports.join('\n')}\n\n${usage.join('\n')}`,
|
usageContent: `${usageImports.join('\n')}\n\n${usage.join('\n')}`,
|
||||||
resultEnums
|
enums: resultEnums
|
||||||
];
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getIncludesInRecipe(): string[] {
|
export function getIncludesInRecipe(): string[] {
|
||||||
@@ -521,11 +561,18 @@ export interface IMonacoDeclarationResult {
|
|||||||
isTheSame: boolean;
|
isTheSame: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
function _run(sourceFileGetter: SourceFileGetter): IMonacoDeclarationResult {
|
function _run(sourceFileGetter: SourceFileGetter): IMonacoDeclarationResult | null {
|
||||||
log('Starting monaco.d.ts generation');
|
log('Starting monaco.d.ts generation');
|
||||||
|
|
||||||
const recipe = fs.readFileSync(RECIPE_PATH).toString();
|
const recipe = fs.readFileSync(RECIPE_PATH).toString();
|
||||||
const [result, usageContent, enums] = generateDeclarationFile(recipe, sourceFileGetter);
|
const t = generateDeclarationFile(recipe, sourceFileGetter);
|
||||||
|
if (!t) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = t.result;
|
||||||
|
const usageContent = t.usageContent;
|
||||||
|
const enums = t.enums;
|
||||||
|
|
||||||
const currentContent = fs.readFileSync(DECLARATION_PATH).toString();
|
const currentContent = fs.readFileSync(DECLARATION_PATH).toString();
|
||||||
const one = currentContent.replace(/\r\n/gm, '\n');
|
const one = currentContent.replace(/\r\n/gm, '\n');
|
||||||
@@ -543,7 +590,7 @@ function _run(sourceFileGetter: SourceFileGetter): IMonacoDeclarationResult {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function run(out: string, inputFiles: { [file: string]: string; }): IMonacoDeclarationResult {
|
function run(out: string, inputFiles: { [file: string]: string; }): IMonacoDeclarationResult | null {
|
||||||
|
|
||||||
let SOURCE_FILE_MAP: { [moduleId: string]: ts.SourceFile; } = {};
|
let SOURCE_FILE_MAP: { [moduleId: string]: ts.SourceFile; } = {};
|
||||||
const sourceFileGetter = (moduleId: string): ts.SourceFile | null => {
|
const sourceFileGetter = (moduleId: string): ts.SourceFile | null => {
|
||||||
@@ -566,7 +613,7 @@ export function run(out: string, inputFiles: { [file: string]: string; }): IMona
|
|||||||
return _run(sourceFileGetter);
|
return _run(sourceFileGetter);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function run2(out: string, sourceFileMap: ISourceFileMap): IMonacoDeclarationResult {
|
export function run2(out: string, sourceFileMap: ISourceFileMap): IMonacoDeclarationResult | null {
|
||||||
const sourceFileGetter = (moduleId: string): ts.SourceFile | null => {
|
const sourceFileGetter = (moduleId: string): ts.SourceFile | null => {
|
||||||
let filePath = path.normalize(moduleIdToPath(out, moduleId));
|
let filePath = path.normalize(moduleIdToPath(out, moduleId));
|
||||||
return sourceFileMap[filePath];
|
return sourceFileMap[filePath];
|
||||||
@@ -663,5 +710,9 @@ export function execute(): IMonacoDeclarationResult {
|
|||||||
});
|
});
|
||||||
console.log(`Generating .d.ts took ${Date.now() - t1} ms`);
|
console.log(`Generating .d.ts took ${Date.now() - t1} ms`);
|
||||||
|
|
||||||
return run('src', OUTPUT_FILES);
|
let r = run('src', OUTPUT_FILES);
|
||||||
|
if (!r) {
|
||||||
|
throw new Error(`monaco.d.ts genration error - Cannot continue`);
|
||||||
|
}
|
||||||
|
return r;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -85,3 +85,5 @@ declare namespace monaco.worker {
|
|||||||
#includeAll(vs/editor/common/services/editorSimpleWorker;):
|
#includeAll(vs/editor/common/services/editorSimpleWorker;):
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//dtsv=1
|
||||||
Vendored
+2
@@ -5542,3 +5542,5 @@ declare namespace monaco.worker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//dtsv=1
|
||||||
Reference in New Issue
Block a user