esm - more cleanup (#230285)

This commit is contained in:
Benjamin Pasero
2024-10-02 11:55:17 +02:00
committed by GitHub
parent 8f03d836aa
commit c5b6ef14e6
24 changed files with 2956 additions and 3562 deletions

View File

@@ -31,7 +31,6 @@
**/src/vs/base/test/common/filters.perf.data.js **/src/vs/base/test/common/filters.perf.data.js
**/src/vs/loader.js **/src/vs/loader.js
**/test/unit/assert.js **/test/unit/assert.js
**/test/unit/assert-esm.js
**/test/automation/out/** **/test/automation/out/**
**/typings/** **/typings/**
!.vscode !.vscode

View File

@@ -249,7 +249,7 @@ export = new class implements eslint.Rule.RuleModule {
const relativeFilename = getRelativeFilename(context); const relativeFilename = getRelativeFilename(context);
importPath = path.posix.join(path.posix.dirname(relativeFilename), importPath); importPath = path.posix.join(path.posix.dirname(relativeFilename), importPath);
if (/^src\/vs\//.test(importPath)) { if (/^src\/vs\//.test(importPath)) {
// resolve using AMD base url // resolve using base url
importPath = importPath.substring('src/'.length); importPath = importPath.substring('src/'.length);
} }
} }

View File

@@ -2,7 +2,7 @@
"root": true, "root": true,
"parser": "@typescript-eslint/parser", "parser": "@typescript-eslint/parser",
"parserOptions": { "parserOptions": {
"ecmaVersion": 6, "ecmaVersion": 2022,
"sourceType": "module" "sourceType": "module"
}, },
"plugins": [ "plugins": [
@@ -1132,7 +1132,13 @@
] ]
}, },
{ {
"target": "src/vs/{loader.d.ts,monaco.d.ts,nls.ts,nls.messages.ts}", "target": "src/vs/nls.ts",
"restrictions": [
"vs/*"
]
},
{
"target": "src/vs/{monaco.d.ts,nls.ts,nls.messages.ts}",
"restrictions": [] "restrictions": []
}, },
{ {

View File

@@ -79,7 +79,6 @@ module.exports.indentationFilter = [
'!src/vs/base/node/cpuUsage.sh', '!src/vs/base/node/cpuUsage.sh',
'!src/vs/editor/common/languages/highlights/*.scm', '!src/vs/editor/common/languages/highlights/*.scm',
'!test/unit/assert.js', '!test/unit/assert.js',
'!test/unit/assert-esm.js',
'!resources/linux/snap/electron-launch', '!resources/linux/snap/electron-launch',
'!build/ext.js', '!build/ext.js',
'!build/npm/gyp/patches/gyp_spectre_mitigation_support.patch', '!build/npm/gyp/patches/gyp_spectre_mitigation_support.patch',

View File

@@ -23,7 +23,6 @@ const minimatch_1 = require("minimatch");
// Types we assume are present in all implementations of JS VMs (node.js, browsers) // Types we assume are present in all implementations of JS VMs (node.js, browsers)
// Feel free to add more core types as you see needed if present in node.js and browsers // Feel free to add more core types as you see needed if present in node.js and browsers
const CORE_TYPES = [ const CORE_TYPES = [
'require', // from our AMD loader
'setTimeout', 'setTimeout',
'clearTimeout', 'clearTimeout',
'setInterval', 'setInterval',

View File

@@ -24,7 +24,6 @@ import { match } from 'minimatch';
// Types we assume are present in all implementations of JS VMs (node.js, browsers) // Types we assume are present in all implementations of JS VMs (node.js, browsers)
// Feel free to add more core types as you see needed if present in node.js and browsers // Feel free to add more core types as you see needed if present in node.js and browsers
const CORE_TYPES = [ const CORE_TYPES = [
'require', // from our AMD loader
'setTimeout', 'setTimeout',
'clearTimeout', 'clearTimeout',
'setInterval', 'setInterval',

View File

@@ -103,8 +103,7 @@ function extractEditor(options) {
delete tsConfig.compilerOptions.moduleResolution; delete tsConfig.compilerOptions.moduleResolution;
writeOutputFile('tsconfig.json', JSON.stringify(tsConfig, null, '\t')); writeOutputFile('tsconfig.json', JSON.stringify(tsConfig, null, '\t'));
[ [
'vs/loader.js', 'vs/loader.js'
'vs/loader.d.ts'
].forEach(copyFile); ].forEach(copyFile);
} }
function createESMSourcesAndResources2(options) { function createESMSourcesAndResources2(options) {

View File

@@ -115,8 +115,7 @@ export function extractEditor(options: tss.ITreeShakingOptions & { destRoot: str
writeOutputFile('tsconfig.json', JSON.stringify(tsConfig, null, '\t')); writeOutputFile('tsconfig.json', JSON.stringify(tsConfig, null, '\t'));
[ [
'vs/loader.js', 'vs/loader.js'
'vs/loader.d.ts'
].forEach(copyFile); ].forEach(copyFile);
} }

View File

@@ -5,7 +5,7 @@ echo Runs tests against the current documentation in https://github.com/microsof
pushd %~dp0\.. pushd %~dp0\..
:: Endgame tests in AMD :: Endgame tests
call .\scripts\test.bat --runGlob **\*.releaseTest.js %* call .\scripts\test.bat --runGlob **\*.releaseTest.js %*
if %errorlevel% neq 0 exit /b %errorlevel% if %errorlevel% neq 0 exit /b %errorlevel%

View File

@@ -14,7 +14,7 @@ cd $ROOT
echo "Runs tests against the current documentation in https://github.com/microsoft/vscode-docs/tree/vnext" echo "Runs tests against the current documentation in https://github.com/microsoft/vscode-docs/tree/vnext"
# Tests in AMD # Tests
./scripts/test.sh --runGlob **/*.releaseTest.js "$@" ./scripts/test.sh --runGlob **/*.releaseTest.js "$@"

View File

@@ -25,7 +25,7 @@ echo Storing crash reports into '%VSCODECRASHDIR%'.
echo Storing log files into '%VSCODELOGSDIR%'. echo Storing log files into '%VSCODELOGSDIR%'.
:: Tests standalone (AMD) :: Unit tests
echo. echo.
echo ### node.js integration tests echo ### node.js integration tests

View File

@@ -34,7 +34,7 @@ echo "Storing crash reports into '$VSCODECRASHDIR'."
echo "Storing log files into '$VSCODELOGSDIR'." echo "Storing log files into '$VSCODELOGSDIR'."
# Tests standalone (AMD) # Unit tests
echo echo
echo "### node.js integration tests" echo "### node.js integration tests"

View File

@@ -643,7 +643,7 @@ async function resolveNlsConfiguration(): Promise<INLSConfiguration> {
} }
/** /**
* Language tags are case insensitive however an amd loader is case sensitive * Language tags are case insensitive however an ESM loader is case sensitive
* To make this work on case preserving & insensitive FS we do the following: * To make this work on case preserving & insensitive FS we do the following:
* the language bundles have lower case language tags and we always lower case * the language bundles have lower case language tags and we always lower case
* the locale we receive from the user or OS. * the locale we receive from the user or OS.

View File

@@ -21,7 +21,6 @@
"typings/vscode-globals-product.d.ts", "typings/vscode-globals-product.d.ts",
"typings/vscode-globals-nls.d.ts", "typings/vscode-globals-nls.d.ts",
"typings/editContext.d.ts", "typings/editContext.d.ts",
"vs/loader.d.ts",
"vs/monaco.d.ts", "vs/monaco.d.ts",
"vs/editor/*", "vs/editor/*",
"vs/base/common/*", "vs/base/common/*",

View File

@@ -9,24 +9,10 @@
* The code in this file is generated from files in ./src/ * The code in this file is generated from files in ./src/
*/ */
let __marked_exports = {}; /**
(function () {
function define(deps, factory) {
factory(__marked_exports);
}
define.amd = true;
(function (global, factory) {
typeof define === 'function' && define.amd ? define(['exports'], factory) :
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.marked = {}));
})(this, (function (exports) {
'use strict';
/**
* Gets the original marked default options. * Gets the original marked default options.
*/ */
function _getDefaults() { function _getDefaults() {
return { return {
async: false, async: false,
breaks: false, breaks: false,
@@ -39,28 +25,28 @@ let __marked_exports = {};
tokenizer: null, tokenizer: null,
walkTokens: null, walkTokens: null,
}; };
} }
exports.defaults = _getDefaults(); let _defaults = _getDefaults();
function changeDefaults(newDefaults) { function changeDefaults(newDefaults) {
exports.defaults = newDefaults; _defaults = newDefaults;
} }
/** /**
* Helpers * Helpers
*/ */
const escapeTest = /[&<>"']/; const escapeTest = /[&<>"']/;
const escapeReplace = new RegExp(escapeTest.source, 'g'); const escapeReplace = new RegExp(escapeTest.source, 'g');
const escapeTestNoEncode = /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/; const escapeTestNoEncode = /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/;
const escapeReplaceNoEncode = new RegExp(escapeTestNoEncode.source, 'g'); const escapeReplaceNoEncode = new RegExp(escapeTestNoEncode.source, 'g');
const escapeReplacements = { const escapeReplacements = {
'&': '&amp;', '&': '&amp;',
'<': '&lt;', '<': '&lt;',
'>': '&gt;', '>': '&gt;',
'"': '&quot;', '"': '&quot;',
"'": '&#39;', "'": '&#39;',
}; };
const getEscapeReplacement = (ch) => escapeReplacements[ch]; const getEscapeReplacement = (ch) => escapeReplacements[ch];
function escape$1(html, encode) { function escape$1(html, encode) {
if (encode) { if (encode) {
if (escapeTest.test(html)) { if (escapeTest.test(html)) {
return html.replace(escapeReplace, getEscapeReplacement); return html.replace(escapeReplace, getEscapeReplacement);
@@ -72,9 +58,9 @@ let __marked_exports = {};
} }
} }
return html; return html;
} }
const caret = /(^|[^\[])\^/g; const caret = /(^|[^\[])\^/g;
function edit(regex, opt) { function edit(regex, opt) {
let source = typeof regex === 'string' ? regex : regex.source; let source = typeof regex === 'string' ? regex : regex.source;
opt = opt || ''; opt = opt || '';
const obj = { const obj = {
@@ -89,8 +75,8 @@ let __marked_exports = {};
}, },
}; };
return obj; return obj;
} }
function cleanUrl(href) { function cleanUrl(href) {
try { try {
href = encodeURI(href).replace(/%25/g, '%'); href = encodeURI(href).replace(/%25/g, '%');
} }
@@ -98,9 +84,9 @@ let __marked_exports = {};
return null; return null;
} }
return href; return href;
} }
const noopTest = { exec: () => null }; const noopTest = { exec: () => null };
function splitCells(tableRow, count) { function splitCells(tableRow, count) {
// ensure that every cell-delimiting pipe has a space // ensure that every cell-delimiting pipe has a space
// before it to distinguish it from an escaped pipe // before it to distinguish it from an escaped pipe
const row = tableRow.replace(/\|/g, (match, offset, str) => { const row = tableRow.replace(/\|/g, (match, offset, str) => {
@@ -140,8 +126,8 @@ let __marked_exports = {};
cells[i] = cells[i].trim().replace(/\\\|/g, '|'); cells[i] = cells[i].trim().replace(/\\\|/g, '|');
} }
return cells; return cells;
} }
/** /**
* Remove trailing 'c's. Equivalent to str.replace(/c*$/, ''). * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').
* /c*$/ is vulnerable to REDOS. * /c*$/ is vulnerable to REDOS.
* *
@@ -149,7 +135,7 @@ let __marked_exports = {};
* @param c * @param c
* @param invert Remove suffix of non-c chars instead. Default falsey. * @param invert Remove suffix of non-c chars instead. Default falsey.
*/ */
function rtrim(str, c, invert) { function rtrim(str, c, invert) {
const l = str.length; const l = str.length;
if (l === 0) { if (l === 0) {
return ''; return '';
@@ -170,8 +156,8 @@ let __marked_exports = {};
} }
} }
return str.slice(0, l - suffLen); return str.slice(0, l - suffLen);
} }
function findClosingBracket(str, b) { function findClosingBracket(str, b) {
if (str.indexOf(b[1]) === -1) { if (str.indexOf(b[1]) === -1) {
return -1; return -1;
} }
@@ -191,9 +177,9 @@ let __marked_exports = {};
} }
} }
return -1; return -1;
} }
function outputLink(cap, link, raw, lexer) { function outputLink(cap, link, raw, lexer) {
const href = link.href; const href = link.href;
const title = link.title ? escape$1(link.title) : null; const title = link.title ? escape$1(link.title) : null;
const text = cap[1].replace(/\\([\[\]])/g, '$1'); const text = cap[1].replace(/\\([\[\]])/g, '$1');
@@ -217,8 +203,8 @@ let __marked_exports = {};
title, title,
text: escape$1(text), text: escape$1(text),
}; };
} }
function indentCodeCompensation(raw, text) { function indentCodeCompensation(raw, text) {
const matchIndentToCode = raw.match(/^(\s+)(?:```)/); const matchIndentToCode = raw.match(/^(\s+)(?:```)/);
if (matchIndentToCode === null) { if (matchIndentToCode === null) {
return text; return text;
@@ -238,16 +224,16 @@ let __marked_exports = {};
return node; return node;
}) })
.join('\n'); .join('\n');
} }
/** /**
* Tokenizer * Tokenizer
*/ */
class _Tokenizer { class _Tokenizer {
options; options;
rules; // set by the lexer rules; // set by the lexer
lexer; // set by the lexer lexer; // set by the lexer
constructor(options) { constructor(options) {
this.options = options || exports.defaults; this.options = options || _defaults;
} }
space(src) { space(src) {
const cap = this.rules.block.newline.exec(src); const cap = this.rules.block.newline.exec(src);
@@ -972,18 +958,18 @@ let __marked_exports = {};
}; };
} }
} }
} }
/** /**
* Block-Level Grammar * Block-Level Grammar
*/ */
const newline = /^(?: *(?:\n|$))+/; const newline = /^(?: *(?:\n|$))+/;
const blockCode = /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/; const blockCode = /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/;
const fences = /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/; const fences = /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/;
const hr = /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/; const hr = /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/;
const heading = /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/; const heading = /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/;
const bullet = /(?:[*+-]|\d{1,9}[.)])/; const bullet = /(?:[*+-]|\d{1,9}[.)])/;
const lheading = edit(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html))+?)\n {0,3}(=+|-+) *(?:\n+|$)/) const lheading = edit(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html))+?)\n {0,3}(=+|-+) *(?:\n+|$)/)
.replace(/bull/g, bullet) // lists can interrupt .replace(/bull/g, bullet) // lists can interrupt
.replace(/blockCode/g, / {4}/) // indented code blocks can interrupt .replace(/blockCode/g, / {4}/) // indented code blocks can interrupt
.replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt
@@ -991,24 +977,24 @@ let __marked_exports = {};
.replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt
.replace(/html/g, / {0,3}<[^\n>]+>\n/) // block html can interrupt .replace(/html/g, / {0,3}<[^\n>]+>\n/) // block html can interrupt
.getRegex(); .getRegex();
const _paragraph = /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/; const _paragraph = /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/;
const blockText = /^[^\n]+/; const blockText = /^[^\n]+/;
const _blockLabel = /(?!\s*\])(?:\\.|[^\[\]\\])+/; const _blockLabel = /(?!\s*\])(?:\\.|[^\[\]\\])+/;
const def = edit(/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/) const def = edit(/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/)
.replace('label', _blockLabel) .replace('label', _blockLabel)
.replace('title', /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/) .replace('title', /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/)
.getRegex(); .getRegex();
const list = edit(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/) const list = edit(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/)
.replace(/bull/g, bullet) .replace(/bull/g, bullet)
.getRegex(); .getRegex();
const _tag = 'address|article|aside|base|basefont|blockquote|body|caption' const _tag = 'address|article|aside|base|basefont|blockquote|body|caption'
+ '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption' + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'
+ '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe' + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'
+ '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option' + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'
+ '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title' + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'
+ '|tr|track|ul'; + '|tr|track|ul';
const _comment = /<!--(?:-?>|[\s\S]*?(?:-->|$))/; const _comment = /<!--(?:-?>|[\s\S]*?(?:-->|$))/;
const html = edit('^ {0,3}(?:' // optional indentation const html = edit('^ {0,3}(?:' // optional indentation
+ '<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)' // (1) + '<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)' // (1)
+ '|comment[^\\n]*(\\n+|$)' // (2) + '|comment[^\\n]*(\\n+|$)' // (2)
+ '|<\\?[\\s\\S]*?(?:\\?>\\n*|$)' // (3) + '|<\\?[\\s\\S]*?(?:\\?>\\n*|$)' // (3)
@@ -1022,7 +1008,7 @@ let __marked_exports = {};
.replace('tag', _tag) .replace('tag', _tag)
.replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/) .replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/)
.getRegex(); .getRegex();
const paragraph = edit(_paragraph) const paragraph = edit(_paragraph)
.replace('hr', hr) .replace('hr', hr)
.replace('heading', ' {0,3}#{1,6}(?:\\s|$)') .replace('heading', ' {0,3}#{1,6}(?:\\s|$)')
.replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs
@@ -1033,13 +1019,13 @@ let __marked_exports = {};
.replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)') .replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)')
.replace('tag', _tag) // pars can be interrupted by type (6) html blocks .replace('tag', _tag) // pars can be interrupted by type (6) html blocks
.getRegex(); .getRegex();
const blockquote = edit(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/) const blockquote = edit(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/)
.replace('paragraph', paragraph) .replace('paragraph', paragraph)
.getRegex(); .getRegex();
/** /**
* Normal Block Grammar * Normal Block Grammar
*/ */
const blockNormal = { const blockNormal = {
blockquote, blockquote,
code: blockCode, code: blockCode,
def, def,
@@ -1053,11 +1039,11 @@ let __marked_exports = {};
paragraph, paragraph,
table: noopTest, table: noopTest,
text: blockText, text: blockText,
}; };
/** /**
* GFM Block Grammar * GFM Block Grammar
*/ */
const gfmTable = edit('^ *([^\\n ].*)\\n' // Header const gfmTable = edit('^ *([^\\n ].*)\\n' // Header
+ ' {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)' // Align + ' {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)' // Align
+ '(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)') // Cells + '(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)') // Cells
.replace('hr', hr) .replace('hr', hr)
@@ -1069,7 +1055,7 @@ let __marked_exports = {};
.replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)') .replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)')
.replace('tag', _tag) // tables can be interrupted by type (6) html blocks .replace('tag', _tag) // tables can be interrupted by type (6) html blocks
.getRegex(); .getRegex();
const blockGfm = { const blockGfm = {
...blockNormal, ...blockNormal,
table: gfmTable, table: gfmTable,
paragraph: edit(_paragraph) paragraph: edit(_paragraph)
@@ -1083,11 +1069,11 @@ let __marked_exports = {};
.replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)') .replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)')
.replace('tag', _tag) // pars can be interrupted by type (6) html blocks .replace('tag', _tag) // pars can be interrupted by type (6) html blocks
.getRegex(), .getRegex(),
}; };
/** /**
* Pedantic grammar (original John Gruber's loose markdown specification) * Pedantic grammar (original John Gruber's loose markdown specification)
*/ */
const blockPedantic = { const blockPedantic = {
...blockNormal, ...blockNormal,
html: edit('^ *(?:comment *(?:\\n|\\s*$)' html: edit('^ *(?:comment *(?:\\n|\\s*$)'
+ '|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)' // closed tag + '|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)' // closed tag
@@ -1113,24 +1099,24 @@ let __marked_exports = {};
.replace('|html', '') .replace('|html', '')
.replace('|tag', '') .replace('|tag', '')
.getRegex(), .getRegex(),
}; };
/** /**
* Inline-Level Grammar * Inline-Level Grammar
*/ */
const escape = /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/; const escape = /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/;
const inlineCode = /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/; const inlineCode = /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/;
const br = /^( {2,}|\\)\n(?!\s*$)/; const br = /^( {2,}|\\)\n(?!\s*$)/;
const inlineText = /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/; const inlineText = /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/;
// list of unicode punctuation marks, plus any missing characters from CommonMark spec // list of unicode punctuation marks, plus any missing characters from CommonMark spec
const _punctuation = '\\p{P}\\p{S}'; const _punctuation = '\\p{P}\\p{S}';
const punctuation = edit(/^((?![*_])[\spunctuation])/, 'u') const punctuation = edit(/^((?![*_])[\spunctuation])/, 'u')
.replace(/punctuation/g, _punctuation).getRegex(); .replace(/punctuation/g, _punctuation).getRegex();
// sequences em should skip over [title](link), `code`, <html> // sequences em should skip over [title](link), `code`, <html>
const blockSkip = /\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g; const blockSkip = /\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g;
const emStrongLDelim = edit(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/, 'u') const emStrongLDelim = edit(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/, 'u')
.replace(/punct/g, _punctuation) .replace(/punct/g, _punctuation)
.getRegex(); .getRegex();
const emStrongRDelimAst = edit('^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)' // Skip orphan inside strong const emStrongRDelimAst = edit('^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)' // Skip orphan inside strong
+ '|[^*]+(?=[^*])' // Consume to delim + '|[^*]+(?=[^*])' // Consume to delim
+ '|(?!\\*)[punct](\\*+)(?=[\\s]|$)' // (1) #*** can only be a Right Delimiter + '|(?!\\*)[punct](\\*+)(?=[\\s]|$)' // (1) #*** can only be a Right Delimiter
+ '|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)' // (2) a***#, a*** can only be a Right Delimiter + '|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)' // (2) a***#, a*** can only be a Right Delimiter
@@ -1140,8 +1126,8 @@ let __marked_exports = {};
+ '|[^punct\\s](\\*+)(?=[^punct\\s])', 'gu') // (6) a***a can be either Left or Right Delimiter + '|[^punct\\s](\\*+)(?=[^punct\\s])', 'gu') // (6) a***a can be either Left or Right Delimiter
.replace(/punct/g, _punctuation) .replace(/punct/g, _punctuation)
.getRegex(); .getRegex();
// (6) Not allowed for _ // (6) Not allowed for _
const emStrongRDelimUnd = edit('^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)' // Skip orphan inside strong const emStrongRDelimUnd = edit('^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)' // Skip orphan inside strong
+ '|[^_]+(?=[^_])' // Consume to delim + '|[^_]+(?=[^_])' // Consume to delim
+ '|(?!_)[punct](_+)(?=[\\s]|$)' // (1) #___ can only be a Right Delimiter + '|(?!_)[punct](_+)(?=[\\s]|$)' // (1) #___ can only be a Right Delimiter
+ '|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)' // (2) a___#, a___ can only be a Right Delimiter + '|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)' // (2) a___#, a___ can only be a Right Delimiter
@@ -1150,15 +1136,15 @@ let __marked_exports = {};
+ '|(?!_)[punct](_+)(?!_)(?=[punct])', 'gu') // (5) #___# can be either Left or Right Delimiter + '|(?!_)[punct](_+)(?!_)(?=[punct])', 'gu') // (5) #___# can be either Left or Right Delimiter
.replace(/punct/g, _punctuation) .replace(/punct/g, _punctuation)
.getRegex(); .getRegex();
const anyPunctuation = edit(/\\([punct])/, 'gu') const anyPunctuation = edit(/\\([punct])/, 'gu')
.replace(/punct/g, _punctuation) .replace(/punct/g, _punctuation)
.getRegex(); .getRegex();
const autolink = edit(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/) const autolink = edit(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/)
.replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/) .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)
.replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/) .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)
.getRegex(); .getRegex();
const _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex(); const _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();
const tag = edit('^comment' const tag = edit('^comment'
+ '|^</[a-zA-Z][\\w:-]*\\s*>' // self-closing tag + '|^</[a-zA-Z][\\w:-]*\\s*>' // self-closing tag
+ '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag
+ '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. <?php ?> + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. <?php ?>
@@ -1167,27 +1153,27 @@ let __marked_exports = {};
.replace('comment', _inlineComment) .replace('comment', _inlineComment)
.replace('attribute', /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/) .replace('attribute', /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/)
.getRegex(); .getRegex();
const _inlineLabel = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/; const _inlineLabel = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/;
const link = edit(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/) const link = edit(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/)
.replace('label', _inlineLabel) .replace('label', _inlineLabel)
.replace('href', /<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/) .replace('href', /<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/)
.replace('title', /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/) .replace('title', /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/)
.getRegex(); .getRegex();
const reflink = edit(/^!?\[(label)\]\[(ref)\]/) const reflink = edit(/^!?\[(label)\]\[(ref)\]/)
.replace('label', _inlineLabel) .replace('label', _inlineLabel)
.replace('ref', _blockLabel) .replace('ref', _blockLabel)
.getRegex(); .getRegex();
const nolink = edit(/^!?\[(ref)\](?:\[\])?/) const nolink = edit(/^!?\[(ref)\](?:\[\])?/)
.replace('ref', _blockLabel) .replace('ref', _blockLabel)
.getRegex(); .getRegex();
const reflinkSearch = edit('reflink|nolink(?!\\()', 'g') const reflinkSearch = edit('reflink|nolink(?!\\()', 'g')
.replace('reflink', reflink) .replace('reflink', reflink)
.replace('nolink', nolink) .replace('nolink', nolink)
.getRegex(); .getRegex();
/** /**
* Normal Inline Grammar * Normal Inline Grammar
*/ */
const inlineNormal = { const inlineNormal = {
_backpedal: noopTest, // only used for GFM url _backpedal: noopTest, // only used for GFM url
anyPunctuation, anyPunctuation,
autolink, autolink,
@@ -1207,11 +1193,11 @@ let __marked_exports = {};
tag, tag,
text: inlineText, text: inlineText,
url: noopTest, url: noopTest,
}; };
/** /**
* Pedantic Inline Grammar * Pedantic Inline Grammar
*/ */
const inlinePedantic = { const inlinePedantic = {
...inlineNormal, ...inlineNormal,
link: edit(/^!?\[(label)\]\((.*?)\)/) link: edit(/^!?\[(label)\]\((.*?)\)/)
.replace('label', _inlineLabel) .replace('label', _inlineLabel)
@@ -1219,11 +1205,11 @@ let __marked_exports = {};
reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/) reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/)
.replace('label', _inlineLabel) .replace('label', _inlineLabel)
.getRegex(), .getRegex(),
}; };
/** /**
* GFM Inline Grammar * GFM Inline Grammar
*/ */
const inlineGfm = { const inlineGfm = {
...inlineNormal, ...inlineNormal,
escape: edit(escape).replace('])', '~|])').getRegex(), escape: edit(escape).replace('])', '~|])').getRegex(),
url: edit(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/, 'i') url: edit(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/, 'i')
@@ -1232,37 +1218,37 @@ let __marked_exports = {};
_backpedal: /(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/, _backpedal: /(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,
del: /^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/, del: /^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,
text: /^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/, text: /^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/,
}; };
/** /**
* GFM + Line Breaks Inline Grammar * GFM + Line Breaks Inline Grammar
*/ */
const inlineBreaks = { const inlineBreaks = {
...inlineGfm, ...inlineGfm,
br: edit(br).replace('{2,}', '*').getRegex(), br: edit(br).replace('{2,}', '*').getRegex(),
text: edit(inlineGfm.text) text: edit(inlineGfm.text)
.replace('\\b_', '\\b_| {2,}\\n') .replace('\\b_', '\\b_| {2,}\\n')
.replace(/\{2,\}/g, '*') .replace(/\{2,\}/g, '*')
.getRegex(), .getRegex(),
}; };
/** /**
* exports * exports
*/ */
const block = { const block = {
normal: blockNormal, normal: blockNormal,
gfm: blockGfm, gfm: blockGfm,
pedantic: blockPedantic, pedantic: blockPedantic,
}; };
const inline = { const inline = {
normal: inlineNormal, normal: inlineNormal,
gfm: inlineGfm, gfm: inlineGfm,
breaks: inlineBreaks, breaks: inlineBreaks,
pedantic: inlinePedantic, pedantic: inlinePedantic,
}; };
/** /**
* Block Lexer * Block Lexer
*/ */
class _Lexer { class _Lexer {
tokens; tokens;
options; options;
state; state;
@@ -1272,7 +1258,7 @@ let __marked_exports = {};
// TokenList cannot be created in one go // TokenList cannot be created in one go
this.tokens = []; this.tokens = [];
this.tokens.links = Object.create(null); this.tokens.links = Object.create(null);
this.options = options || exports.defaults; this.options = options || _defaults;
this.options.tokenizer = this.options.tokenizer || new _Tokenizer(); this.options.tokenizer = this.options.tokenizer || new _Tokenizer();
this.tokenizer = this.options.tokenizer; this.tokenizer = this.options.tokenizer;
this.tokenizer.options = this.options; this.tokenizer.options = this.options;
@@ -1688,16 +1674,16 @@ let __marked_exports = {};
} }
return tokens; return tokens;
} }
} }
/** /**
* Renderer * Renderer
*/ */
class _Renderer { class _Renderer {
options; options;
parser; // set by the parser parser; // set by the parser
constructor(options) { constructor(options) {
this.options = options || exports.defaults; this.options = options || _defaults;
} }
space(token) { space(token) {
return ''; return '';
@@ -1860,13 +1846,13 @@ let __marked_exports = {};
text(token) { text(token) {
return 'tokens' in token && token.tokens ? this.parser.parseInline(token.tokens) : token.text; return 'tokens' in token && token.tokens ? this.parser.parseInline(token.tokens) : token.text;
} }
} }
/** /**
* TextRenderer * TextRenderer
* returns only the textual part of the token * returns only the textual part of the token
*/ */
class _TextRenderer { class _TextRenderer {
// no need for block level renderers // no need for block level renderers
strong({ text }) { strong({ text }) {
return text; return text;
@@ -1895,17 +1881,17 @@ let __marked_exports = {};
br() { br() {
return ''; return '';
} }
} }
/** /**
* Parsing & Compiling * Parsing & Compiling
*/ */
class _Parser { class _Parser {
options; options;
renderer; renderer;
textRenderer; textRenderer;
constructor(options) { constructor(options) {
this.options = options || exports.defaults; this.options = options || _defaults;
this.options.renderer = this.options.renderer || new _Renderer(); this.options.renderer = this.options.renderer || new _Renderer();
this.renderer = this.options.renderer; this.renderer = this.options.renderer;
this.renderer.options = this.options; this.renderer.options = this.options;
@@ -2086,12 +2072,12 @@ let __marked_exports = {};
} }
return out; return out;
} }
} }
class _Hooks { class _Hooks {
options; options;
constructor(options) { constructor(options) {
this.options = options || exports.defaults; this.options = options || _defaults;
} }
static passThroughHooks = new Set([ static passThroughHooks = new Set([
'preprocess', 'preprocess',
@@ -2116,9 +2102,9 @@ let __marked_exports = {};
processAllTokens(tokens) { processAllTokens(tokens) {
return tokens; return tokens;
} }
} }
class Marked { class Marked {
defaults = _getDefaults(); defaults = _getDefaults();
options = this.setOptions; options = this.setOptions;
parse = this.parseMarkdown(_Lexer.lex, _Parser.parse); parse = this.parseMarkdown(_Lexer.lex, _Parser.parse);
@@ -2425,110 +2411,72 @@ let __marked_exports = {};
throw e; throw e;
}; };
} }
} }
const markedInstance = new Marked(); const markedInstance = new Marked();
function marked(src, opt) { function marked(src, opt) {
return markedInstance.parse(src, opt); return markedInstance.parse(src, opt);
} }
/** /**
* Sets the default options. * Sets the default options.
* *
* @param options Hash of options * @param options Hash of options
*/ */
marked.options = marked.options =
marked.setOptions = function (options) { marked.setOptions = function (options) {
markedInstance.setOptions(options); markedInstance.setOptions(options);
marked.defaults = markedInstance.defaults; marked.defaults = markedInstance.defaults;
changeDefaults(marked.defaults); changeDefaults(marked.defaults);
return marked; return marked;
}; };
/** /**
* Gets the original marked default options. * Gets the original marked default options.
*/ */
marked.getDefaults = _getDefaults; marked.getDefaults = _getDefaults;
marked.defaults = exports.defaults; marked.defaults = _defaults;
/** /**
* Use Extension * Use Extension
*/ */
marked.use = function (...args) { marked.use = function (...args) {
markedInstance.use(...args); markedInstance.use(...args);
marked.defaults = markedInstance.defaults; marked.defaults = markedInstance.defaults;
changeDefaults(marked.defaults); changeDefaults(marked.defaults);
return marked; return marked;
}; };
/** /**
* Run callback for every token * Run callback for every token
*/ */
marked.walkTokens = function (tokens, callback) { marked.walkTokens = function (tokens, callback) {
return markedInstance.walkTokens(tokens, callback); return markedInstance.walkTokens(tokens, callback);
}; };
/** /**
* Compiles markdown to HTML without enclosing `p` tag. * Compiles markdown to HTML without enclosing `p` tag.
* *
* @param src String of markdown source to be compiled * @param src String of markdown source to be compiled
* @param options Hash of options * @param options Hash of options
* @return String of compiled HTML * @return String of compiled HTML
*/ */
marked.parseInline = markedInstance.parseInline; marked.parseInline = markedInstance.parseInline;
/** /**
* Expose * Expose
*/ */
marked.Parser = _Parser; marked.Parser = _Parser;
marked.parser = _Parser.parse; marked.parser = _Parser.parse;
marked.Renderer = _Renderer; marked.Renderer = _Renderer;
marked.TextRenderer = _TextRenderer; marked.TextRenderer = _TextRenderer;
marked.Lexer = _Lexer; marked.Lexer = _Lexer;
marked.lexer = _Lexer.lex; marked.lexer = _Lexer.lex;
marked.Tokenizer = _Tokenizer; marked.Tokenizer = _Tokenizer;
marked.Hooks = _Hooks; marked.Hooks = _Hooks;
marked.parse = marked; marked.parse = marked;
const options = marked.options; const options = marked.options;
const setOptions = marked.setOptions; const setOptions = marked.setOptions;
const use = marked.use; const use = marked.use;
const walkTokens = marked.walkTokens; const walkTokens = marked.walkTokens;
const parseInline = marked.parseInline; const parseInline = marked.parseInline;
const parse = marked; const parse = marked;
const parser = _Parser.parse; const parser = _Parser.parse;
const lexer = _Lexer.lex; const lexer = _Lexer.lex;
exports.Hooks = _Hooks; export { _Hooks as Hooks, _Lexer as Lexer, Marked, _Parser as Parser, _Renderer as Renderer, _TextRenderer as TextRenderer, _Tokenizer as Tokenizer, _defaults as defaults, _getDefaults as getDefaults, lexer, marked, options, parse, parseInline, parser, setOptions, use, walkTokens };
exports.Lexer = _Lexer; //# sourceMappingURL=marked.esm.js.map
exports.Marked = Marked;
exports.Parser = _Parser;
exports.Renderer = _Renderer;
exports.TextRenderer = _TextRenderer;
exports.Tokenizer = _Tokenizer;
exports.getDefaults = _getDefaults;
exports.lexer = lexer;
exports.marked = marked;
exports.options = options;
exports.parse = parse;
exports.parseInline = parseInline;
exports.parser = parser;
exports.setOptions = setOptions;
exports.use = use;
exports.walkTokens = walkTokens;
}));
})();
export var Hooks = (__marked_exports.Hooks || exports.Hooks);
export var Lexer = (__marked_exports.Lexer || exports.Lexer);
export var Marked = (__marked_exports.Marked || exports.Marked);
export var Parser = (__marked_exports.Parser || exports.Parser);
export var Renderer = (__marked_exports.Renderer || exports.Renderer);
export var TextRenderer = (__marked_exports.TextRenderer || exports.TextRenderer);
export var Tokenizer = (__marked_exports.Tokenizer || exports.Tokenizer);
export var defaults = (__marked_exports.defaults || exports.defaults);
export var getDefaults = (__marked_exports.getDefaults || exports.getDefaults);
export var lexer = (__marked_exports.lexer || exports.lexer);
export var marked = (__marked_exports.marked || exports.marked);
export var options = (__marked_exports.options || exports.options);
export var parse = (__marked_exports.parse || exports.parse);
export var parseInline = (__marked_exports.parseInline || exports.parseInline);
export var parser = (__marked_exports.parser || exports.parser);
export var setOptions = (__marked_exports.setOptions || exports.setOptions);
export var use = (__marked_exports.use || exports.use);
export var walkTokens = (__marked_exports.walkTokens || exports.walkTokens);
//# sourceMappingURL=marked.umd.js.map

35
src/vs/loader.d.ts vendored
View File

@@ -1,35 +0,0 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
declare namespace AMDLoader {
interface ILoaderPlugin {
load: (pluginParam: string, parentRequire: IRelativeRequire, loadCallback: IPluginLoadCallback, options: IConfigurationOptions) => void;
write?: (pluginName: string, moduleName: string, write: IPluginWriteCallback) => void;
writeFile?: (pluginName: string, moduleName: string, req: IRelativeRequire, write: IPluginWriteFileCallback, config: IConfigurationOptions) => void;
finishBuild?: (write: (filename: string, contents: string) => void) => void;
}
interface IRelativeRequire {
(dependencies: string[], callback: Function, errorback?: (error: Error) => void): void;
toUrl(id: string): string;
}
interface IPluginLoadCallback {
(value: any): void;
error(err: any): void;
}
interface IConfigurationOptions {
isBuild: boolean | undefined;
[key: string]: any;
}
interface IPluginWriteCallback {
(contents: string): void;
getEntryPoint(): string;
asModule(moduleId: string, contents: string): void;
}
interface IPluginWriteFileCallback {
(filename: string, contents: string): void;
getEntryPoint(): string;
asModule(moduleId: string, contents: string): void;
}
}

View File

@@ -6,6 +6,8 @@
/* /*
* This module exists so that the AMD build of the monaco editor can replace this with an async loader plugin. * This module exists so that the AMD build of the monaco editor can replace this with an async loader plugin.
* If you add new functions to this module make sure that they are also provided in the AMD build of the monaco editor. * If you add new functions to this module make sure that they are also provided in the AMD build of the monaco editor.
*
* TODO@esm remove me once we no longer ship an AMD build.
*/ */
export function getNLSMessages(): string[] { export function getNLSMessages(): string[] {

View File

@@ -3,9 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information. * Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
// eslint-disable-next-line local/code-import-patterns
import { getNLSLanguage, getNLSMessages } from './nls.messages.js'; import { getNLSLanguage, getNLSMessages } from './nls.messages.js';
// eslint-disable-next-line local/code-import-patterns
export { getNLSLanguage, getNLSMessages } from './nls.messages.js'; export { getNLSLanguage, getNLSMessages } from './nls.messages.js';
const isPseudo = getNLSLanguage() === 'pseudo' || (typeof document !== 'undefined' && document.location && typeof document.location.hash === 'string' && document.location.hash.indexOf('pseudo=true') >= 0); const isPseudo = getNLSLanguage() === 'pseudo' || (typeof document !== 'undefined' && document.location && typeof document.location.hash === 'string' && document.location.hash.indexOf('pseudo=true') >= 0);

View File

@@ -81,7 +81,7 @@ export interface IUtilityProcessWorkerService {
* end of the message port connection will be sent back to the calling window * end of the message port connection will be sent back to the calling window
* as identified by the `reply` configuration. * as identified by the `reply` configuration.
* *
* Requires the forked process to be AMD module that uses our IPC channel framework * Requires the forked process to be ES module that uses our IPC channel framework
* to respond to the provided `channelName` as a server. * to respond to the provided `channelName` as a server.
* *
* The process will be automatically terminated when the receiver window closes, * The process will be automatically terminated when the receiver window closes,

View File

@@ -43,7 +43,7 @@ export interface IUtilityProcessWorkerWorkbenchService {
* Will fork a new process with the provided module identifier in a utility * Will fork a new process with the provided module identifier in a utility
* process and establishes a message port connection to that process. * process and establishes a message port connection to that process.
* *
* Requires the forked process to be AMD module that uses our IPC channel framework * Requires the forked process to be ES module that uses our IPC channel framework
* to respond to the provided `channelName` as a server. * to respond to the provided `channelName` as a server.
* *
* The process will be automatically terminated when the workbench window closes, * The process will be automatically terminated when the workbench window closes,

View File

@@ -1,498 +0,0 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
// UTILITY
// Object.create compatible in IE
const create = Object.create || function (p) {
if (!p) { throw Error('no type'); }
function f() { }
f.prototype = p;
return new f();
};
// UTILITY
var util = {
inherits: function (ctor, superCtor) {
ctor.super_ = superCtor;
ctor.prototype = create(superCtor.prototype, {
constructor: {
value: ctor,
enumerable: false,
writable: true,
configurable: true
}
});
},
isArray: function (ar) {
return Array.isArray(ar);
},
isBoolean: function (arg) {
return typeof arg === 'boolean';
},
isNull: function (arg) {
return arg === null;
},
isNullOrUndefined: function (arg) {
return arg == null;
},
isNumber: function (arg) {
return typeof arg === 'number';
},
isString: function (arg) {
return typeof arg === 'string';
},
isSymbol: function (arg) {
return typeof arg === 'symbol';
},
isUndefined: function (arg) {
return arg === undefined;
},
isRegExp: function (re) {
return util.isObject(re) && util.objectToString(re) === '[object RegExp]';
},
isObject: function (arg) {
return typeof arg === 'object' && arg !== null;
},
isDate: function (d) {
return util.isObject(d) && util.objectToString(d) === '[object Date]';
},
isError: function (e) {
return isObject(e) &&
(objectToString(e) === '[object Error]' || e instanceof Error);
},
isFunction: function (arg) {
return typeof arg === 'function';
},
isPrimitive: function (arg) {
return arg === null ||
typeof arg === 'boolean' ||
typeof arg === 'number' ||
typeof arg === 'string' ||
typeof arg === 'symbol' || // ES6 symbol
typeof arg === 'undefined';
},
objectToString: function (o) {
return Object.prototype.toString.call(o);
}
};
const pSlice = Array.prototype.slice;
// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
const Object_keys = typeof Object.keys === 'function' ? Object.keys : (function () {
const hasOwnProperty = Object.prototype.hasOwnProperty,
hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString'),
dontEnums = [
'toString',
'toLocaleString',
'valueOf',
'hasOwnProperty',
'isPrototypeOf',
'propertyIsEnumerable',
'constructor'
],
dontEnumsLength = dontEnums.length;
return function (obj) {
if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {
throw new TypeError('Object.keys called on non-object');
}
let result = [], prop, i;
for (prop in obj) {
if (hasOwnProperty.call(obj, prop)) {
result.push(prop);
}
}
if (hasDontEnumBug) {
for (i = 0; i < dontEnumsLength; i++) {
if (hasOwnProperty.call(obj, dontEnums[i])) {
result.push(dontEnums[i]);
}
}
}
return result;
};
})();
// 1. The assert module provides functions that throw
// AssertionError's when particular conditions are not met. The
// assert module must conform to the following interface.
const assert = ok;
// 2. The AssertionError is defined in assert.
// new assert.AssertionError({ message: message,
// actual: actual,
// expected: expected })
assert.AssertionError = function AssertionError(options) {
this.name = 'AssertionError';
this.actual = options.actual;
this.expected = options.expected;
this.operator = options.operator;
if (options.message) {
this.message = options.message;
this.generatedMessage = false;
} else {
this.message = getMessage(this);
this.generatedMessage = true;
}
const stackStartFunction = options.stackStartFunction || fail;
if (Error.captureStackTrace) {
Error.captureStackTrace(this, stackStartFunction);
} else {
// try to throw an error now, and from the stack property
// work out the line that called in to assert.js.
try {
this.stack = (new Error).stack.toString();
} catch (e) { }
}
};
// assert.AssertionError instanceof Error
util.inherits(assert.AssertionError, Error);
function replacer(key, value) {
if (util.isUndefined(value)) {
return '' + value;
}
if (util.isNumber(value) && (isNaN(value) || !isFinite(value))) {
return value.toString();
}
if (util.isFunction(value) || util.isRegExp(value)) {
return value.toString();
}
return value;
}
function truncate(s, n) {
if (util.isString(s)) {
return s.length < n ? s : s.slice(0, n);
} else {
return s;
}
}
function getMessage(self) {
return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
self.operator + ' ' +
truncate(JSON.stringify(self.expected, replacer), 128);
}
// At present only the three keys mentioned above are used and
// understood by the spec. Implementations or sub modules can pass
// other keys to the AssertionError's constructor - they will be
// ignored.
// 3. All of the following functions must throw an AssertionError
// when a corresponding condition is not met, with a message that
// may be undefined if not provided. All assertion methods provide
// both the actual and expected values to the assertion error for
// display purposes.
export function fail(actual, expected, message, operator, stackStartFunction) {
throw new assert.AssertionError({
message: message,
actual: actual,
expected: expected,
operator: operator,
stackStartFunction: stackStartFunction
});
}
// EXTENSION! allows for well behaved errors defined elsewhere.
assert.fail = fail;
// 4. Pure assertion tests whether a value is truthy, as determined
// by !!guard.
// assert.ok(guard, message_opt);
// This statement is equivalent to assert.equal(true, !!guard,
// message_opt);. To test strictly for the value true, use
// assert.strictEqual(true, guard, message_opt);.
export function ok(value, message) {
if (!value) { fail(value, true, message, '==', assert.ok); }
}
assert.ok = ok;
// 5. The equality assertion tests shallow, coercive equality with
// ==.
// assert.equal(actual, expected, message_opt);
assert.equal = function equal(actual, expected, message) {
if (actual != expected) { fail(actual, expected, message, '==', assert.equal); }
};
// 6. The non-equality assertion tests for whether two objects are not equal
// with != assert.notEqual(actual, expected, message_opt);
assert.notEqual = function notEqual(actual, expected, message) {
if (actual == expected) {
fail(actual, expected, message, '!=', assert.notEqual);
}
};
// 7. The equivalence assertion tests a deep equality relation.
// assert.deepEqual(actual, expected, message_opt);
assert.deepEqual = function deepEqual(actual, expected, message) {
if (!_deepEqual(actual, expected, false)) {
fail(actual, expected, message, 'deepEqual', assert.deepEqual);
}
};
assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
if (!_deepEqual(actual, expected, true)) {
fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
}
};
function _deepEqual(actual, expected, strict) {
// 7.1. All identical values are equivalent, as determined by ===.
if (actual === expected) {
return true;
// } else if (actual instanceof Buffer && expected instanceof Buffer) {
// return compare(actual, expected) === 0;
// 7.2. If the expected value is a Date object, the actual value is
// equivalent if it is also a Date object that refers to the same time.
} else if (util.isDate(actual) && util.isDate(expected)) {
return actual.getTime() === expected.getTime();
// 7.3 If the expected value is a RegExp object, the actual value is
// equivalent if it is also a RegExp object with the same source and
// properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
} else if (util.isRegExp(actual) && util.isRegExp(expected)) {
return actual.source === expected.source &&
actual.global === expected.global &&
actual.multiline === expected.multiline &&
actual.lastIndex === expected.lastIndex &&
actual.ignoreCase === expected.ignoreCase;
// 7.4. Other pairs that do not both pass typeof value == 'object',
// equivalence is determined by ==.
} else if ((actual === null || typeof actual !== 'object') &&
(expected === null || typeof expected !== 'object')) {
return strict ? actual === expected : actual == expected;
// 7.5 For all other Object pairs, including Array objects, equivalence is
// determined by having the same number of owned properties (as verified
// with Object.prototype.hasOwnProperty.call), the same set of keys
// (although not necessarily the same order), equivalent values for every
// corresponding key, and an identical 'prototype' property. Note: this
// accounts for both named and indexed properties on Arrays.
} else {
return objEquiv(actual, expected, strict);
}
}
function isArguments(object) {
return Object.prototype.toString.call(object) == '[object Arguments]';
}
function objEquiv(a, b, strict) {
if (a === null || a === undefined || b === null || b === undefined) { return false; }
// if one is a primitive, the other must be same
if (util.isPrimitive(a) || util.isPrimitive(b)) { return a === b; }
if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b)) { return false; }
const aIsArgs = isArguments(a),
bIsArgs = isArguments(b);
if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs)) { return false; }
if (aIsArgs) {
a = pSlice.call(a);
b = pSlice.call(b);
return _deepEqual(a, b, strict);
}
let ka = Object.keys(a),
kb = Object.keys(b),
key, i;
// having the same number of owned properties (keys incorporates
// hasOwnProperty)
if (ka.length !== kb.length) { return false; }
//the same set of keys (although not necessarily the same order),
ka.sort();
kb.sort();
//~~~cheap key test
for (i = ka.length - 1; i >= 0; i--) {
if (ka[i] !== kb[i]) { return false; }
}
//equivalent values for every corresponding key, and
//~~~possibly expensive deep test
for (i = ka.length - 1; i >= 0; i--) {
key = ka[i];
if (!_deepEqual(a[key], b[key], strict)) { return false; }
}
return true;
}
// 8. The non-equivalence assertion tests for any deep inequality.
// assert.notDeepEqual(actual, expected, message_opt);
assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
if (_deepEqual(actual, expected, false)) {
fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
}
};
assert.notDeepStrictEqual = notDeepStrictEqual;
export function notDeepStrictEqual(actual, expected, message) {
if (_deepEqual(actual, expected, true)) {
fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
}
}
// 9. The strict equality assertion tests strict equality, as determined by ===.
// assert.strictEqual(actual, expected, message_opt);
assert.strictEqual = function strictEqual(actual, expected, message) {
if (actual !== expected) {
fail(actual, expected, message, '===', assert.strictEqual);
}
};
// 10. The strict non-equality assertion tests for strict inequality, as
// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
if (actual === expected) {
fail(actual, expected, message, '!==', assert.notStrictEqual);
}
};
function expectedException(actual, expected) {
if (!actual || !expected) {
return false;
}
if (Object.prototype.toString.call(expected) == '[object RegExp]') {
return expected.test(actual);
} else if (actual instanceof expected) {
return true;
} else if (expected.call({}, actual) === true) {
return true;
}
return false;
}
function _throws(shouldThrow, block, expected, message) {
let actual;
if (typeof block !== 'function') {
throw new TypeError('block must be a function');
}
if (typeof expected === 'string') {
message = expected;
expected = null;
}
try {
block();
} catch (e) {
actual = e;
}
message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
(message ? ' ' + message : '.');
if (shouldThrow && !actual) {
fail(actual, expected, 'Missing expected exception' + message);
}
if (!shouldThrow && expectedException(actual, expected)) {
fail(actual, expected, 'Got unwanted exception' + message);
}
if ((shouldThrow && actual && expected &&
!expectedException(actual, expected)) || (!shouldThrow && actual)) {
throw actual;
}
}
// 11. Expected to throw an error:
// assert.throws(block, Error_opt, message_opt);
assert.throws = function (block, /*optional*/error, /*optional*/message) {
_throws.apply(this, [true].concat(pSlice.call(arguments)));
};
// EXTENSION! This is annoying to write outside this module.
assert.doesNotThrow = function (block, /*optional*/message) {
_throws.apply(this, [false].concat(pSlice.call(arguments)));
};
assert.ifError = function (err) { if (err) { throw err; } };
function checkIsPromise(obj) {
return (obj !== null && typeof obj === 'object' &&
typeof obj.then === 'function' &&
typeof obj.catch === 'function');
}
const NO_EXCEPTION_SENTINEL = {};
async function waitForActual(promiseFn) {
let resultPromise;
if (typeof promiseFn === 'function') {
// Return a rejected promise if `promiseFn` throws synchronously.
resultPromise = promiseFn();
// Fail in case no promise is returned.
if (!checkIsPromise(resultPromise)) {
throw new Error('ERR_INVALID_RETURN_VALUE: promiseFn did not return Promise. ' + resultPromise);
}
} else if (checkIsPromise(promiseFn)) {
resultPromise = promiseFn;
} else {
throw new Error('ERR_INVALID_ARG_TYPE: promiseFn is not Function or Promise. ' + promiseFn);
}
try {
await resultPromise;
} catch (e) {
return e;
}
return NO_EXCEPTION_SENTINEL;
}
function expectsError(shouldHaveError, actual, message) {
if (shouldHaveError && actual === NO_EXCEPTION_SENTINEL) {
fail(undefined, 'Error', `Missing expected rejection${message ? ': ' + message : ''}`)
} else if (!shouldHaveError && actual !== NO_EXCEPTION_SENTINEL) {
fail(actual, undefined, `Got unexpected rejection (${actual.message})${message ? ': ' + message : ''}`)
}
}
assert.rejects = async function rejects(promiseFn, message) {
expectsError(true, await waitForActual(promiseFn), message);
};
assert.doesNotReject = async function doesNotReject(fn, message) {
expectsError(false, await waitForActual(fn), message);
};
// ESM export
export default assert;
export const AssertionError = assert.AssertionError
// export const fail = assert.fail
// export const ok = assert.ok
export const equal = assert.equal
export const notEqual = assert.notEqual
export const deepEqual = assert.deepEqual
export const deepStrictEqual = assert.deepStrictEqual
export const notDeepEqual = assert.notDeepEqual
// export const notDeepStrictEqual = assert.notDeepStrictEqual
export const strictEqual = assert.strictEqual
export const notStrictEqual = assert.notStrictEqual
export const throws = assert.throws
export const doesNotThrow = assert.doesNotThrow
export const ifError = assert.ifError
export const rejects = assert.rejects
export const doesNotReject = assert.doesNotReject

View File

@@ -1,52 +1,22 @@
// http://wiki.commonjs.org/wiki/Unit_Testing/1.0 /*---------------------------------------------------------------------------------------------
// * Copyright (c) Microsoft Corporation. All rights reserved.
// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8! * Licensed under the MIT License. See License.txt in the project root for license information.
// *--------------------------------------------------------------------------------------------*/
// Copyright (c) 2011 Jxck
//
// Originally from node.js (http://nodejs.org)
// Copyright Joyent, Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the 'Software'), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
(function(root, factory) {
if (typeof define === 'function' && define.amd) {
define([], factory); // AMD
} else if (typeof exports === 'object') {
module.exports = factory(); // CommonJS
} else {
root.assert = factory(); // Global
}
})(this, function() {
// UTILITY // UTILITY
// Object.create compatible in IE // Object.create compatible in IE
var create = Object.create || function(p) { const create = Object.create || function (p) {
if (!p) throw Error('no type'); if (!p) { throw Error('no type'); }
function f() {}; function f() { }
f.prototype = p; f.prototype = p;
return new f(); return new f();
}; };
// UTILITY // UTILITY
var util = { var util = {
inherits: function(ctor, superCtor) { inherits: function (ctor, superCtor) {
ctor.super_ = superCtor; ctor.super_ = superCtor;
ctor.prototype = create(superCtor.prototype, { ctor.prototype = create(superCtor.prototype, {
constructor: { constructor: {
@@ -57,47 +27,47 @@ var util = {
} }
}); });
}, },
isArray: function(ar) { isArray: function (ar) {
return Array.isArray(ar); return Array.isArray(ar);
}, },
isBoolean: function(arg) { isBoolean: function (arg) {
return typeof arg === 'boolean'; return typeof arg === 'boolean';
}, },
isNull: function(arg) { isNull: function (arg) {
return arg === null; return arg === null;
}, },
isNullOrUndefined: function(arg) { isNullOrUndefined: function (arg) {
return arg == null; return arg == null;
}, },
isNumber: function(arg) { isNumber: function (arg) {
return typeof arg === 'number'; return typeof arg === 'number';
}, },
isString: function(arg) { isString: function (arg) {
return typeof arg === 'string'; return typeof arg === 'string';
}, },
isSymbol: function(arg) { isSymbol: function (arg) {
return typeof arg === 'symbol'; return typeof arg === 'symbol';
}, },
isUndefined: function(arg) { isUndefined: function (arg) {
return arg === undefined; return arg === undefined;
}, },
isRegExp: function(re) { isRegExp: function (re) {
return util.isObject(re) && util.objectToString(re) === '[object RegExp]'; return util.isObject(re) && util.objectToString(re) === '[object RegExp]';
}, },
isObject: function(arg) { isObject: function (arg) {
return typeof arg === 'object' && arg !== null; return typeof arg === 'object' && arg !== null;
}, },
isDate: function(d) { isDate: function (d) {
return util.isObject(d) && util.objectToString(d) === '[object Date]'; return util.isObject(d) && util.objectToString(d) === '[object Date]';
}, },
isError: function(e) { isError: function (e) {
return isObject(e) && return isObject(e) &&
(objectToString(e) === '[object Error]' || e instanceof Error); (objectToString(e) === '[object Error]' || e instanceof Error);
}, },
isFunction: function(arg) { isFunction: function (arg) {
return typeof arg === 'function'; return typeof arg === 'function';
}, },
isPrimitive: function(arg) { isPrimitive: function (arg) {
return arg === null || return arg === null ||
typeof arg === 'boolean' || typeof arg === 'boolean' ||
typeof arg === 'number' || typeof arg === 'number' ||
@@ -105,16 +75,16 @@ var util = {
typeof arg === 'symbol' || // ES6 symbol typeof arg === 'symbol' || // ES6 symbol
typeof arg === 'undefined'; typeof arg === 'undefined';
}, },
objectToString: function(o) { objectToString: function (o) {
return Object.prototype.toString.call(o); return Object.prototype.toString.call(o);
} }
}; };
var pSlice = Array.prototype.slice; const pSlice = Array.prototype.slice;
// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys // From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
var Object_keys = typeof Object.keys === 'function' ? Object.keys : (function() { const Object_keys = typeof Object.keys === 'function' ? Object.keys : (function () {
var hasOwnProperty = Object.prototype.hasOwnProperty, const hasOwnProperty = Object.prototype.hasOwnProperty,
hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString'), hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString'),
dontEnums = [ dontEnums = [
'toString', 'toString',
@@ -127,12 +97,12 @@ var Object_keys = typeof Object.keys === 'function' ? Object.keys : (function()
], ],
dontEnumsLength = dontEnums.length; dontEnumsLength = dontEnums.length;
return function(obj) { return function (obj) {
if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) { if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {
throw new TypeError('Object.keys called on non-object'); throw new TypeError('Object.keys called on non-object');
} }
var result = [], prop, i; let result = [], prop, i;
for (prop in obj) { for (prop in obj) {
if (hasOwnProperty.call(obj, prop)) { if (hasOwnProperty.call(obj, prop)) {
@@ -149,20 +119,20 @@ var Object_keys = typeof Object.keys === 'function' ? Object.keys : (function()
} }
return result; return result;
}; };
})(); })();
// 1. The assert module provides functions that throw // 1. The assert module provides functions that throw
// AssertionError's when particular conditions are not met. The // AssertionError's when particular conditions are not met. The
// assert module must conform to the following interface. // assert module must conform to the following interface.
var assert = ok; const assert = ok;
// 2. The AssertionError is defined in assert. // 2. The AssertionError is defined in assert.
// new assert.AssertionError({ message: message, // new assert.AssertionError({ message: message,
// actual: actual, // actual: actual,
// expected: expected }) // expected: expected })
assert.AssertionError = function AssertionError(options) { assert.AssertionError = function AssertionError(options) {
this.name = 'AssertionError'; this.name = 'AssertionError';
this.actual = options.actual; this.actual = options.actual;
this.expected = options.expected; this.expected = options.expected;
@@ -174,7 +144,7 @@ assert.AssertionError = function AssertionError(options) {
this.message = getMessage(this); this.message = getMessage(this);
this.generatedMessage = true; this.generatedMessage = true;
} }
var stackStartFunction = options.stackStartFunction || fail; const stackStartFunction = options.stackStartFunction || fail;
if (Error.captureStackTrace) { if (Error.captureStackTrace) {
Error.captureStackTrace(this, stackStartFunction); Error.captureStackTrace(this, stackStartFunction);
} else { } else {
@@ -182,14 +152,14 @@ assert.AssertionError = function AssertionError(options) {
// work out the line that called in to assert.js. // work out the line that called in to assert.js.
try { try {
this.stack = (new Error).stack.toString(); this.stack = (new Error).stack.toString();
} catch (e) {} } catch (e) { }
} }
}; };
// assert.AssertionError instanceof Error // assert.AssertionError instanceof Error
util.inherits(assert.AssertionError, Error); util.inherits(assert.AssertionError, Error);
function replacer(key, value) { function replacer(key, value) {
if (util.isUndefined(value)) { if (util.isUndefined(value)) {
return '' + value; return '' + value;
} }
@@ -200,34 +170,34 @@ function replacer(key, value) {
return value.toString(); return value.toString();
} }
return value; return value;
} }
function truncate(s, n) { function truncate(s, n) {
if (util.isString(s)) { if (util.isString(s)) {
return s.length < n ? s : s.slice(0, n); return s.length < n ? s : s.slice(0, n);
} else { } else {
return s; return s;
} }
} }
function getMessage(self) { function getMessage(self) {
return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' + return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
self.operator + ' ' + self.operator + ' ' +
truncate(JSON.stringify(self.expected, replacer), 128); truncate(JSON.stringify(self.expected, replacer), 128);
} }
// At present only the three keys mentioned above are used and // At present only the three keys mentioned above are used and
// understood by the spec. Implementations or sub modules can pass // understood by the spec. Implementations or sub modules can pass
// other keys to the AssertionError's constructor - they will be // other keys to the AssertionError's constructor - they will be
// ignored. // ignored.
// 3. All of the following functions must throw an AssertionError // 3. All of the following functions must throw an AssertionError
// when a corresponding condition is not met, with a message that // when a corresponding condition is not met, with a message that
// may be undefined if not provided. All assertion methods provide // may be undefined if not provided. All assertion methods provide
// both the actual and expected values to the assertion error for // both the actual and expected values to the assertion error for
// display purposes. // display purposes.
function fail(actual, expected, message, operator, stackStartFunction) { export function fail(actual, expected, message, operator, stackStartFunction) {
throw new assert.AssertionError({ throw new assert.AssertionError({
message: message, message: message,
actual: actual, actual: actual,
@@ -235,56 +205,56 @@ function fail(actual, expected, message, operator, stackStartFunction) {
operator: operator, operator: operator,
stackStartFunction: stackStartFunction stackStartFunction: stackStartFunction
}); });
} }
// EXTENSION! allows for well behaved errors defined elsewhere. // EXTENSION! allows for well behaved errors defined elsewhere.
assert.fail = fail; assert.fail = fail;
// 4. Pure assertion tests whether a value is truthy, as determined // 4. Pure assertion tests whether a value is truthy, as determined
// by !!guard. // by !!guard.
// assert.ok(guard, message_opt); // assert.ok(guard, message_opt);
// This statement is equivalent to assert.equal(true, !!guard, // This statement is equivalent to assert.equal(true, !!guard,
// message_opt);. To test strictly for the value true, use // message_opt);. To test strictly for the value true, use
// assert.strictEqual(true, guard, message_opt);. // assert.strictEqual(true, guard, message_opt);.
function ok(value, message) { export function ok(value, message) {
if (!value) fail(value, true, message, '==', assert.ok); if (!value) { fail(value, true, message, '==', assert.ok); }
} }
assert.ok = ok; assert.ok = ok;
// 5. The equality assertion tests shallow, coercive equality with // 5. The equality assertion tests shallow, coercive equality with
// ==. // ==.
// assert.equal(actual, expected, message_opt); // assert.equal(actual, expected, message_opt);
assert.equal = function equal(actual, expected, message) { assert.equal = function equal(actual, expected, message) {
if (actual != expected) fail(actual, expected, message, '==', assert.equal); if (actual != expected) { fail(actual, expected, message, '==', assert.equal); }
}; };
// 6. The non-equality assertion tests for whether two objects are not equal // 6. The non-equality assertion tests for whether two objects are not equal
// with != assert.notEqual(actual, expected, message_opt); // with != assert.notEqual(actual, expected, message_opt);
assert.notEqual = function notEqual(actual, expected, message) { assert.notEqual = function notEqual(actual, expected, message) {
if (actual == expected) { if (actual == expected) {
fail(actual, expected, message, '!=', assert.notEqual); fail(actual, expected, message, '!=', assert.notEqual);
} }
}; };
// 7. The equivalence assertion tests a deep equality relation. // 7. The equivalence assertion tests a deep equality relation.
// assert.deepEqual(actual, expected, message_opt); // assert.deepEqual(actual, expected, message_opt);
assert.deepEqual = function deepEqual(actual, expected, message) { assert.deepEqual = function deepEqual(actual, expected, message) {
if (!_deepEqual(actual, expected, false)) { if (!_deepEqual(actual, expected, false)) {
fail(actual, expected, message, 'deepEqual', assert.deepEqual); fail(actual, expected, message, 'deepEqual', assert.deepEqual);
} }
}; };
assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) { assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
if (!_deepEqual(actual, expected, true)) { if (!_deepEqual(actual, expected, true)) {
fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual); fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
} }
}; };
function _deepEqual(actual, expected, strict) { function _deepEqual(actual, expected, strict) {
// 7.1. All identical values are equivalent, as determined by ===. // 7.1. All identical values are equivalent, as determined by ===.
if (actual === expected) { if (actual === expected) {
return true; return true;
@@ -321,89 +291,83 @@ function _deepEqual(actual, expected, strict) {
} else { } else {
return objEquiv(actual, expected, strict); return objEquiv(actual, expected, strict);
} }
} }
function isArguments(object) { function isArguments(object) {
return Object.prototype.toString.call(object) == '[object Arguments]'; return Object.prototype.toString.call(object) == '[object Arguments]';
} }
function objEquiv(a, b, strict) { function objEquiv(a, b, strict) {
if (a === null || a === undefined || b === null || b === undefined) if (a === null || a === undefined || b === null || b === undefined) { return false; }
return false;
// if one is a primitive, the other must be same // if one is a primitive, the other must be same
if (util.isPrimitive(a) || util.isPrimitive(b)) if (util.isPrimitive(a) || util.isPrimitive(b)) { return a === b; }
return a === b; if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b)) { return false; }
if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b)) const aIsArgs = isArguments(a),
return false;
var aIsArgs = isArguments(a),
bIsArgs = isArguments(b); bIsArgs = isArguments(b);
if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs)) if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs)) { return false; }
return false;
if (aIsArgs) { if (aIsArgs) {
a = pSlice.call(a); a = pSlice.call(a);
b = pSlice.call(b); b = pSlice.call(b);
return _deepEqual(a, b, strict); return _deepEqual(a, b, strict);
} }
var ka = Object.keys(a), let ka = Object.keys(a),
kb = Object.keys(b), kb = Object.keys(b),
key, i; key, i;
// having the same number of owned properties (keys incorporates // having the same number of owned properties (keys incorporates
// hasOwnProperty) // hasOwnProperty)
if (ka.length !== kb.length) if (ka.length !== kb.length) { return false; }
return false;
//the same set of keys (although not necessarily the same order), //the same set of keys (although not necessarily the same order),
ka.sort(); ka.sort();
kb.sort(); kb.sort();
//~~~cheap key test //~~~cheap key test
for (i = ka.length - 1; i >= 0; i--) { for (i = ka.length - 1; i >= 0; i--) {
if (ka[i] !== kb[i]) if (ka[i] !== kb[i]) { return false; }
return false;
} }
//equivalent values for every corresponding key, and //equivalent values for every corresponding key, and
//~~~possibly expensive deep test //~~~possibly expensive deep test
for (i = ka.length - 1; i >= 0; i--) { for (i = ka.length - 1; i >= 0; i--) {
key = ka[i]; key = ka[i];
if (!_deepEqual(a[key], b[key], strict)) return false; if (!_deepEqual(a[key], b[key], strict)) { return false; }
} }
return true; return true;
} }
// 8. The non-equivalence assertion tests for any deep inequality. // 8. The non-equivalence assertion tests for any deep inequality.
// assert.notDeepEqual(actual, expected, message_opt); // assert.notDeepEqual(actual, expected, message_opt);
assert.notDeepEqual = function notDeepEqual(actual, expected, message) { assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
if (_deepEqual(actual, expected, false)) { if (_deepEqual(actual, expected, false)) {
fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual); fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
} }
}; };
assert.notDeepStrictEqual = notDeepStrictEqual; assert.notDeepStrictEqual = notDeepStrictEqual;
function notDeepStrictEqual(actual, expected, message) { export function notDeepStrictEqual(actual, expected, message) {
if (_deepEqual(actual, expected, true)) { if (_deepEqual(actual, expected, true)) {
fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual); fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
} }
} }
// 9. The strict equality assertion tests strict equality, as determined by ===. // 9. The strict equality assertion tests strict equality, as determined by ===.
// assert.strictEqual(actual, expected, message_opt); // assert.strictEqual(actual, expected, message_opt);
assert.strictEqual = function strictEqual(actual, expected, message) { assert.strictEqual = function strictEqual(actual, expected, message) {
if (actual !== expected) { if (actual !== expected) {
fail(actual, expected, message, '===', assert.strictEqual); fail(actual, expected, message, '===', assert.strictEqual);
} }
}; };
// 10. The strict non-equality assertion tests for strict inequality, as // 10. The strict non-equality assertion tests for strict inequality, as
// determined by !==. assert.notStrictEqual(actual, expected, message_opt); // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
assert.notStrictEqual = function notStrictEqual(actual, expected, message) { assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
if (actual === expected) { if (actual === expected) {
fail(actual, expected, message, '!==', assert.notStrictEqual); fail(actual, expected, message, '!==', assert.notStrictEqual);
} }
}; };
function expectedException(actual, expected) { function expectedException(actual, expected) {
if (!actual || !expected) { if (!actual || !expected) {
return false; return false;
} }
@@ -417,10 +381,10 @@ function expectedException(actual, expected) {
} }
return false; return false;
} }
function _throws(shouldThrow, block, expected, message) { function _throws(shouldThrow, block, expected, message) {
var actual; let actual;
if (typeof block !== 'function') { if (typeof block !== 'function') {
throw new TypeError('block must be a function'); throw new TypeError('block must be a function');
@@ -452,30 +416,30 @@ function _throws(shouldThrow, block, expected, message) {
!expectedException(actual, expected)) || (!shouldThrow && actual)) { !expectedException(actual, expected)) || (!shouldThrow && actual)) {
throw actual; throw actual;
} }
} }
// 11. Expected to throw an error: // 11. Expected to throw an error:
// assert.throws(block, Error_opt, message_opt); // assert.throws(block, Error_opt, message_opt);
assert.throws = function(block, /*optional*/error, /*optional*/message) { assert.throws = function (block, /*optional*/error, /*optional*/message) {
_throws.apply(this, [true].concat(pSlice.call(arguments))); _throws.apply(this, [true].concat(pSlice.call(arguments)));
}; };
// EXTENSION! This is annoying to write outside this module. // EXTENSION! This is annoying to write outside this module.
assert.doesNotThrow = function(block, /*optional*/message) { assert.doesNotThrow = function (block, /*optional*/message) {
_throws.apply(this, [false].concat(pSlice.call(arguments))); _throws.apply(this, [false].concat(pSlice.call(arguments)));
}; };
assert.ifError = function(err) { if (err) {throw err;}}; assert.ifError = function (err) { if (err) { throw err; } };
function checkIsPromise(obj) { function checkIsPromise(obj) {
return (obj !== null && typeof obj === 'object' && return (obj !== null && typeof obj === 'object' &&
typeof obj.then === 'function' && typeof obj.then === 'function' &&
typeof obj.catch === 'function'); typeof obj.catch === 'function');
} }
const NO_EXCEPTION_SENTINEL = {}; const NO_EXCEPTION_SENTINEL = {};
async function waitForActual(promiseFn) { async function waitForActual(promiseFn) {
let resultPromise; let resultPromise;
if (typeof promiseFn === 'function') { if (typeof promiseFn === 'function') {
// Return a rejected promise if `promiseFn` throws synchronously. // Return a rejected promise if `promiseFn` throws synchronously.
@@ -496,23 +460,39 @@ async function waitForActual(promiseFn) {
return e; return e;
} }
return NO_EXCEPTION_SENTINEL; return NO_EXCEPTION_SENTINEL;
} }
function expectsError(shouldHaveError, actual, message) { function expectsError(shouldHaveError, actual, message) {
if (shouldHaveError && actual === NO_EXCEPTION_SENTINEL) { if (shouldHaveError && actual === NO_EXCEPTION_SENTINEL) {
fail(undefined, 'Error', `Missing expected rejection${message ? ': ' + message : ''}`) fail(undefined, 'Error', `Missing expected rejection${message ? ': ' + message : ''}`)
} else if (!shouldHaveError && actual !== NO_EXCEPTION_SENTINEL) { } else if (!shouldHaveError && actual !== NO_EXCEPTION_SENTINEL) {
fail(actual, undefined, `Got unexpected rejection (${actual.message})${message ? ': ' + message : ''}`) fail(actual, undefined, `Got unexpected rejection (${actual.message})${message ? ': ' + message : ''}`)
} }
} }
assert.rejects = async function rejects(promiseFn, message) { assert.rejects = async function rejects(promiseFn, message) {
expectsError(true, await waitForActual(promiseFn), message); expectsError(true, await waitForActual(promiseFn), message);
}; };
assert.doesNotReject = async function doesNotReject(fn, message) { assert.doesNotReject = async function doesNotReject(fn, message) {
expectsError(false, await waitForActual(fn), message); expectsError(false, await waitForActual(fn), message);
}; };
return assert; // ESM export
}); export default assert;
export const AssertionError = assert.AssertionError
// export const fail = assert.fail
// export const ok = assert.ok
export const equal = assert.equal
export const notEqual = assert.notEqual
export const deepEqual = assert.deepEqual
export const deepStrictEqual = assert.deepStrictEqual
export const notDeepEqual = assert.notDeepEqual
// export const notDeepStrictEqual = assert.notDeepStrictEqual
export const strictEqual = assert.strictEqual
export const notStrictEqual = assert.notStrictEqual
export const throws = assert.throws
export const doesNotThrow = assert.doesNotThrow
export const ifError = assert.ifError
export const rejects = assert.rejects
export const doesNotReject = assert.doesNotReject

View File

@@ -53,7 +53,7 @@
const importMap = { const importMap = {
imports: { imports: {
vs: new URL(`../../../${out}/vs`, baseUrl).href, vs: new URL(`../../../${out}/vs`, baseUrl).href,
assert: new URL('../assert-esm.js', baseUrl).href, assert: new URL('../assert.js', baseUrl).href,
sinon: new URL('../../../node_modules/sinon/pkg/sinon-esm.js', baseUrl).href, sinon: new URL('../../../node_modules/sinon/pkg/sinon-esm.js', baseUrl).href,
'sinon-test': new URL('../../../node_modules/sinon-test/dist/sinon-test-es.js', baseUrl).href, 'sinon-test': new URL('../../../node_modules/sinon-test/dist/sinon-test-es.js', baseUrl).href,
'@xterm/xterm': new URL('../../../node_modules/@xterm/xterm/lib/xterm.js', baseUrl).href, '@xterm/xterm': new URL('../../../node_modules/@xterm/xterm/lib/xterm.js', baseUrl).href,

View File

@@ -78,7 +78,7 @@
// generate import map // generate import map
const importMap = { const importMap = {
imports: { imports: {
assert: new URL('../test/unit/assert-esm.js', baseUrl).href, assert: new URL('../test/unit/assert.js', baseUrl).href,
sinon: new URL('../node_modules/sinon/pkg/sinon-esm.js', baseUrl).href, sinon: new URL('../node_modules/sinon/pkg/sinon-esm.js', baseUrl).href,
'sinon-test': new URL('../node_modules/sinon-test/dist/sinon-test-es.js', baseUrl).href, 'sinon-test': new URL('../node_modules/sinon-test/dist/sinon-test-es.js', baseUrl).href,
'electron': asRequireBlobUri('electron'), 'electron': asRequireBlobUri('electron'),