123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- /*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
- //@ts-check
- /** @typedef {import('../build/utils').IFile} IFile */
- const glob = require('glob');
- const path = require('path');
- const fs = require('fs');
- const cp = require('child_process');
- const CleanCSS = require('clean-css');
- const { REPO_ROOT, readFiles, writeFiles } = require('./utils');
- const { removeDir } = require('./fs');
- /** @type {string} */
- const MONACO_EDITOR_VERSION = (() => {
- const output = cp.execSync(`npm show monaco-editor version`).toString();
- const version = output.split(/\r\n|\r|\n/g)[0];
- if (!/\d+\.\d+\.\d+/.test(version)) {
- console.log('unrecognized package.json version: ' + version);
- process.exit(1);
- }
- return version;
- })();
- removeDir(`../monaco-editor-website`);
- checkSamples();
- generateWebsite();
- /**
- * Check that there are samples for all available languages
- */
- function checkSamples() {
- let languages = glob
- .sync('src/basic-languages/*/*.contribution.ts', { cwd: REPO_ROOT })
- .map((f) => path.dirname(f))
- .map((f) => f.substring('src/basic-languages/'.length));
- languages.push('css');
- languages.push('html');
- languages.push('json');
- languages.push('typescript');
- // some languages have a different id than their folder
- languages = languages.map((l) => {
- switch (l) {
- case 'coffee':
- return 'coffeescript';
- case 'protobuf':
- return 'proto';
- case 'solidity':
- return 'sol';
- case 'sophia':
- return 'aes';
- default:
- return l;
- }
- });
- let fail = false;
- for (const language of languages) {
- const expectedSamplePath = path.join(REPO_ROOT, `website/index/samples/sample.${language}.txt`);
- if (!fs.existsSync(expectedSamplePath)) {
- console.error(`Missing sample for ${language} at ${expectedSamplePath}`);
- fail = true;
- }
- }
- if (fail) {
- process.exit(1);
- }
- }
- /**
- * @param {string} dataPath
- * @param {string} contents
- * @param {RegExp} regex
- * @param {(match:string, fileContents:Buffer)=>string} callback
- * @returns {string}
- */
- function replaceWithRelativeResource(dataPath, contents, regex, callback) {
- return contents.replace(regex, function (_, m0) {
- const filePath = path.join(REPO_ROOT, 'website', path.dirname(dataPath), m0);
- return callback(m0, fs.readFileSync(filePath));
- });
- }
- function generateWebsite() {
- const files = readFiles('website/**/*', {
- base: 'website',
- ignore: ['website/typedoc/**/*'],
- dot: true
- });
- for (const file of files) {
- if (!file.contents || !/\.(html)$/.test(file.path) || /new-samples/.test(file.path)) {
- continue;
- }
- let contents = file.contents.toString();
- contents = contents.replace(/\.\.\/release\/dev/g, 'node_modules/monaco-editor/min');
- // contents = contents.replace(/\.\.\/\.\.\/release\/dev/g, '../monaco-editor/release/dev');
- contents = contents.replace(/{{version}}/g, MONACO_EDITOR_VERSION);
- contents = contents.replace(/{{year}}/g, String(new Date().getFullYear()));
- // Preload xhr contents
- contents = replaceWithRelativeResource(
- file.path,
- contents,
- /<pre data-preload="([^"]+)".*/g,
- function (m0, fileContents) {
- return (
- '<pre data-preload="' +
- m0 +
- '" style="display:none">' +
- fileContents
- .toString('utf8')
- .replace(/&/g, '&')
- .replace(/</g, '<')
- .replace(/>/g, '>') +
- '</pre>'
- );
- }
- );
- // Inline fork.png
- contents = replaceWithRelativeResource(
- file.path,
- contents,
- /src="(\.\/fork.png)"/g,
- function (m0, fileContents) {
- return 'src="data:image/png;base64,' + fileContents.toString('base64') + '"';
- }
- );
- // let allCSS = '';
- contents = replaceWithRelativeResource(
- file.path,
- contents,
- /<link data-inline="yes-please" href="([^"]+)".*/g,
- function (m0, fileContents) {
- const minifiedCSS = new CleanCSS().minify(fileContents.toString('utf8')).styles;
- return `<style>${minifiedCSS}</style>`;
- }
- );
- // Inline javascript
- contents = replaceWithRelativeResource(
- file.path,
- contents,
- /<script data-inline="yes-please" src="([^"]+)".*/g,
- function (m0, fileContents) {
- return '<script>' + fileContents.toString('utf8') + '</script>';
- }
- );
- file.contents = Buffer.from(contents.split(/\r\n|\r|\n/).join('\n'));
- }
- writeFiles(files, `../monaco-editor-website`);
- // temporarily create package.json so that npm install doesn't bark
- fs.writeFileSync(path.join(REPO_ROOT, '../monaco-editor-website/package.json'), '{}');
- fs.writeFileSync(path.join(REPO_ROOT, '../monaco-editor-website/.nojekyll'), '');
- cp.execSync('npm install monaco-editor', {
- cwd: path.join(REPO_ROOT, '../monaco-editor-website')
- });
- fs.unlinkSync(path.join(REPO_ROOT, '../monaco-editor-website/package.json'));
- }
|