text: /*---------------------------------------------------------------------------------------------
   *  Copyright (c) Microsoft Corporation. All rights reserved.
   *  Licensed under the MIT License. See License.txt in the project root for license information.
   *--------------------------------------------------------------------------------------------*/
  
  //@ts-check
  
  const glob = require('glob');
  const { copyFile, removeDir, tsc, dts, buildESM, buildAMD } = require('../build/utils');
  
  removeDir(`out`);
  
  tsc(`src/tsconfig.json`);
  
  //#region Type Defintion
  
  dts(`out/amd/css/monaco.contribution.d.ts`, `out/release/css/monaco.d.ts`, 'monaco.languages.css');
  dts(
  	`out/amd/html/monaco.contribution.d.ts`,
  	`out/release/html/monaco.d.ts`,
  	'monaco.languages.html'
  );
  dts(
  	`out/amd/json/monaco.contribution.d.ts`,
  	`out/release/json/monaco.d.ts`,
  	'monaco.languages.json'
  );
  dts(
  	`out/amd/typescript/monaco.contribution.d.ts`,
  	`out/release/typescript/monaco.d.ts`,
  	'monaco.languages.typescript'
  );
  dts(
  	`out/amd/choicescript/monaco.contribution.d.ts`,
  	`out/release/choicescript/monaco.d.ts`,
  	'monaco.languages.choicescript'
  );
  
  //#endregion
  
  //#region css
  
  buildESM({
  	base: 'css',
  	entryPoints: ['src/css/monaco.contribution.ts', 'src/css/cssMode.ts', 'src/css/css.worker.ts'],
  	external: ['monaco-editor-core', '*/cssMode']
  });
  buildAMD({
  	base: 'css',
  	entryPoint: 'src/css/monaco.contribution.ts',
  	amdModuleId: 'vs/language/css/monaco.contribution',
  	amdDependencies: ['vs/editor/editor.api']
  });
  buildAMD({
  	base: 'css',
  	entryPoint: 'src/css/cssMode.ts',
  	amdModuleId: 'vs/language/css/cssMode'
  });
  buildAMD({
  	base: 'css',
  	entryPoint: 'src/css/cssWorker.ts',
  	amdModuleId: 'vs/language/css/cssWorker'
  });
  
  //#endregion
  
  //#region html
  
  buildESM({
  	base: 'html',
  	entryPoints: [
  		'src/html/monaco.contribution.ts',
  		'src/html/htmlMode.ts',
  		'src/html/html.worker.ts'
  	],
  	external: ['monaco-editor-core', '*/htmlMode']
  });
  buildAMD({
  	base: 'html',
  	entryPoint: 'src/html/monaco.contribution.ts',
  	amdModuleId: 'vs/language/html/monaco.contribution',
  	amdDependencies: ['vs/editor/editor.api']
  });
  buildAMD({
  	base: 'html',
  	entryPoint: 'src/html/htmlMode.ts',
  	amdModuleId: 'vs/language/html/htmlMode'
  });
  buildAMD({
  	base: 'html',
  	entryPoint: 'src/html/htmlWorker.ts',
  	amdModuleId: 'vs/language/html/htmlWorker'
  });
  
  //#endregion
  
  //#region json
  
  buildESM({
  	base: 'json',
  	entryPoints: [
  		'src/json/monaco.contribution.ts',
  		'src/json/jsonMode.ts',
  		'src/json/json.worker.ts'
  	],
  	external: ['monaco-editor-core', '*/jsonMode']
  });
  buildAMD({
  	base: 'json',
  	entryPoint: 'src/json/monaco.contribution.ts',
  	amdModuleId: 'vs/language/json/monaco.contribution',
  	amdDependencies: ['vs/editor/editor.api']
  });
  buildAMD({
  	base: 'json',
  	entryPoint: 'src/json/jsonMode.ts',
  	amdModuleId: 'vs/language/json/jsonMode'
  });
  buildAMD({
  	base: 'json',
  	entryPoint: 'src/json/jsonWorker.ts',
  	amdModuleId: 'vs/language/json/jsonWorker'
  });
  
  //#endregion
  
  //#region typescript
  
  copyFile(
  	`src/typescript/lib/typescriptServices-amd.js`,
  	`out/amd/typescript/lib/typescriptServices.js`
  );
  
  buildESM({
  	base: 'typescript',
  	entryPoints: [
  		'src/typescript/monaco.contribution.ts',
  		'src/typescript/tsMode.ts',
  		'src/typescript/ts.worker.ts'
  	],
  	external: ['monaco-editor-core', '*/tsMode']
  });
  buildAMD({
  	base: 'typescript',
  	entryPoint: 'src/typescript/monaco.contribution.ts',
  	amdModuleId: 'vs/language/typescript/monaco.contribution',
  	amdDependencies: ['vs/editor/editor.api']
  });
  buildAMD({
  	base: 'typescript',
  	entryPoint: 'src/typescript/tsMode.ts',
  	amdModuleId: 'vs/language/typescript/tsMode'
  });
  buildAMD({
  	base: 'typescript',
  	entryPoint: 'src/typescript/tsWorker.ts',
  	amdModuleId: 'vs/language/typescript/tsWorker'
  });
  
  //#endregion
  
  //#region choicescript
  
  buildESM({
  	base: 'choicescript',
  	entryPoints: [
  		'src/choicescript/monaco.contribution.ts',
  		'src/choicescript/choicescriptMode.ts',
  		'src/choicescript/choicescript.worker.ts'
  	],
  	external: ['monaco-editor-core', '*/choicescriptMode', 'fs']
  });
  buildAMD({
  	base: 'choicescript',
  	entryPoint: 'src/choicescript/monaco.contribution.ts',
  	amdModuleId: 'vs/language/choicescript/monaco.contribution',
  	amdDependencies: ['vs/editor/editor.api'],
  	external: ['fs']
  });
  buildAMD({
  	base: 'choicescript',
  	entryPoint: 'src/choicescript/choicescriptMode.ts',
  	amdModuleId: 'vs/language/choicescript/choicescriptMode',
  	external: ['fs']
  });
  buildAMD({
  	base: 'choicescript',
  	entryPoint: 'src/choicescript/choicescriptWorker.ts',
  	amdModuleId: 'vs/language/choicescript/choicescriptWorker',
  	external: ['fs']
  });
  
  //#endregion
  
  //#region basic-languages
  
  glob('../src/basic-languages/*/*.contribution.ts', { cwd: __dirname }, function (err, files) {
  	if (err) {
  		console.error(err);
  		return;
  	}
  
  	const languages = files.map((file) => file.split('/')[3]);
  
  	// ESM
  	{
  		/** @type {string[]} */
  		const entryPoints = [
  			'src/basic-languages/monaco.contribution.ts',
  			'src/basic-languages/_.contribution.ts'
  		];
  		const external = ['monaco-editor-core', '*/_.contribution'];
  		for (const language of languages) {
  			entryPoints.push(`src/basic-languages/${language}/${language}.contribution.ts`);
  			entryPoints.push(`src/basic-languages/${language}/${language}.ts`);
  			external.push(`*/${language}.contribution`);
  			external.push(`*/${language}`);
  		}
  		buildESM({
  			base: 'basic-languages',
  			entryPoints,
  			external
  		});
  	}
  
  	// AMD
  	{
  		buildAMD({
  			base: 'basic-languages',
  			entryPoint: 'src/basic-languages/monaco.contribution.ts',
  			amdModuleId: 'vs/basic-languages/monaco.contribution',
  			amdDependencies: ['vs/editor/editor.api']
  		});
  		for (const language of languages) {
  			buildAMD({
  				base: 'basic-languages',
  				entryPoint: `src/basic-languages/${language}/${language}.ts`,
  				amdModuleId: `vs/basic-languages/${language}/${language}`
  			});
  		}
  	}
  });
  
  //#endregion
  