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/loader.js
**/test/unit/assert.js
**/test/unit/assert-esm.js
**/test/automation/out/**
**/typings/**
!.vscode

View File

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

View File

@@ -2,7 +2,7 @@
"root": true,
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": 6,
"ecmaVersion": 2022,
"sourceType": "module"
},
"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": []
},
{

View File

@@ -79,7 +79,6 @@ module.exports.indentationFilter = [
'!src/vs/base/node/cpuUsage.sh',
'!src/vs/editor/common/languages/highlights/*.scm',
'!test/unit/assert.js',
'!test/unit/assert-esm.js',
'!resources/linux/snap/electron-launch',
'!build/ext.js',
'!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)
// Feel free to add more core types as you see needed if present in node.js and browsers
const CORE_TYPES = [
'require', // from our AMD loader
'setTimeout',
'clearTimeout',
'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)
// Feel free to add more core types as you see needed if present in node.js and browsers
const CORE_TYPES = [
'require', // from our AMD loader
'setTimeout',
'clearTimeout',
'setInterval',

View File

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

View File

@@ -5,7 +5,7 @@ echo Runs tests against the current documentation in https://github.com/microsof
pushd %~dp0\..
:: Endgame tests in AMD
:: Endgame tests
call .\scripts\test.bat --runGlob **\*.releaseTest.js %*
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"
# Tests in AMD
# Tests
./scripts/test.sh --runGlob **/*.releaseTest.js "$@"

View File

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

View File

@@ -34,7 +34,7 @@ echo "Storing crash reports into '$VSCODECRASHDIR'."
echo "Storing log files into '$VSCODELOGSDIR'."
# Tests standalone (AMD)
# Unit tests
echo
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:
* the language bundles have lower case language tags and we always lower case
* the locale we receive from the user or OS.

View File

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

View File

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

View File

@@ -3,9 +3,7 @@
* 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';
// eslint-disable-next-line local/code-import-patterns
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);

View File

@@ -81,7 +81,7 @@ export interface IUtilityProcessWorkerService {
* end of the message port connection will be sent back to the calling window
* 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.
*
* 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
* 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.
*
* 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
//
// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
//
// 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.
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
(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
// Object.create compatible in IE
var create = Object.create || function(p) {
if (!p) throw Error('no type');
function f() {};
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) {
// UTILITY
var util = {
inherits: function (ctor, superCtor) {
ctor.super_ = superCtor;
ctor.prototype = create(superCtor.prototype, {
constructor: {
@@ -57,47 +27,47 @@ var util = {
}
});
},
isArray: function(ar) {
isArray: function (ar) {
return Array.isArray(ar);
},
isBoolean: function(arg) {
isBoolean: function (arg) {
return typeof arg === 'boolean';
},
isNull: function(arg) {
isNull: function (arg) {
return arg === null;
},
isNullOrUndefined: function(arg) {
isNullOrUndefined: function (arg) {
return arg == null;
},
isNumber: function(arg) {
isNumber: function (arg) {
return typeof arg === 'number';
},
isString: function(arg) {
isString: function (arg) {
return typeof arg === 'string';
},
isSymbol: function(arg) {
isSymbol: function (arg) {
return typeof arg === 'symbol';
},
isUndefined: function(arg) {
isUndefined: function (arg) {
return arg === undefined;
},
isRegExp: function(re) {
isRegExp: function (re) {
return util.isObject(re) && util.objectToString(re) === '[object RegExp]';
},
isObject: function(arg) {
isObject: function (arg) {
return typeof arg === 'object' && arg !== null;
},
isDate: function(d) {
isDate: function (d) {
return util.isObject(d) && util.objectToString(d) === '[object Date]';
},
isError: function(e) {
isError: function (e) {
return isObject(e) &&
(objectToString(e) === '[object Error]' || e instanceof Error);
},
isFunction: function(arg) {
isFunction: function (arg) {
return typeof arg === 'function';
},
isPrimitive: function(arg) {
isPrimitive: function (arg) {
return arg === null ||
typeof arg === 'boolean' ||
typeof arg === 'number' ||
@@ -105,16 +75,16 @@ var util = {
typeof arg === 'symbol' || // ES6 symbol
typeof arg === 'undefined';
},
objectToString: function(o) {
objectToString: function (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
var Object_keys = typeof Object.keys === 'function' ? Object.keys : (function() {
var hasOwnProperty = Object.prototype.hasOwnProperty,
// 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',
@@ -127,12 +97,12 @@ var Object_keys = typeof Object.keys === 'function' ? Object.keys : (function()
],
dontEnumsLength = dontEnums.length;
return function(obj) {
return function (obj) {
if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {
throw new TypeError('Object.keys called on non-object');
}
var result = [], prop, i;
let result = [], prop, i;
for (prop in obj) {
if (hasOwnProperty.call(obj, prop)) {
@@ -149,20 +119,20 @@ var Object_keys = typeof Object.keys === 'function' ? Object.keys : (function()
}
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.
// 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.
var assert = ok;
const assert = ok;
// 2. The AssertionError is defined in assert.
// new assert.AssertionError({ message: message,
// actual: actual,
// expected: expected })
// 2. The AssertionError is defined in assert.
// new assert.AssertionError({ message: message,
// actual: actual,
// expected: expected })
assert.AssertionError = function AssertionError(options) {
assert.AssertionError = function AssertionError(options) {
this.name = 'AssertionError';
this.actual = options.actual;
this.expected = options.expected;
@@ -174,7 +144,7 @@ assert.AssertionError = function AssertionError(options) {
this.message = getMessage(this);
this.generatedMessage = true;
}
var stackStartFunction = options.stackStartFunction || fail;
const stackStartFunction = options.stackStartFunction || fail;
if (Error.captureStackTrace) {
Error.captureStackTrace(this, stackStartFunction);
} else {
@@ -182,14 +152,14 @@ assert.AssertionError = function AssertionError(options) {
// work out the line that called in to assert.js.
try {
this.stack = (new Error).stack.toString();
} catch (e) {}
} catch (e) { }
}
};
};
// assert.AssertionError instanceof Error
util.inherits(assert.AssertionError, Error);
// assert.AssertionError instanceof Error
util.inherits(assert.AssertionError, Error);
function replacer(key, value) {
function replacer(key, value) {
if (util.isUndefined(value)) {
return '' + value;
}
@@ -200,34 +170,34 @@ function replacer(key, value) {
return value.toString();
}
return value;
}
}
function truncate(s, n) {
function truncate(s, n) {
if (util.isString(s)) {
return s.length < n ? s : s.slice(0, n);
} else {
return s;
}
}
}
function getMessage(self) {
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.
// 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.
// 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.
function fail(actual, expected, message, operator, stackStartFunction) {
export function fail(actual, expected, message, operator, stackStartFunction) {
throw new assert.AssertionError({
message: message,
actual: actual,
@@ -235,56 +205,56 @@ function fail(actual, expected, message, operator, stackStartFunction) {
operator: operator,
stackStartFunction: stackStartFunction
});
}
}
// EXTENSION! allows for well behaved errors defined elsewhere.
assert.fail = fail;
// 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);.
// 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);.
function ok(value, message) {
if (!value) fail(value, true, message, '==', assert.ok);
}
assert.ok = ok;
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);
// 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);
};
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);
// 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) {
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);
// 7. The equivalence assertion tests a deep equality relation.
// 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)) {
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)) {
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 ===.
if (actual === expected) {
return true;
@@ -321,89 +291,83 @@ function _deepEqual(actual, expected, strict) {
} else {
return objEquiv(actual, expected, strict);
}
}
}
function isArguments(object) {
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;
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;
var aIsArgs = isArguments(a),
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 && !bIsArgs) || (!aIsArgs && bIsArgs)) { return false; }
if (aIsArgs) {
a = pSlice.call(a);
b = pSlice.call(b);
return _deepEqual(a, b, strict);
}
var ka = Object.keys(a),
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;
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;
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;
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);
// 8. The non-equivalence assertion tests for any deep inequality.
// 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)) {
fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
}
};
};
assert.notDeepStrictEqual = notDeepStrictEqual;
function notDeepStrictEqual(actual, expected, message) {
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);
// 9. The strict equality assertion tests strict equality, as determined by ===.
// assert.strictEqual(actual, expected, message_opt);
assert.strictEqual = function strictEqual(actual, expected, message) {
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);
// 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) {
assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
if (actual === expected) {
fail(actual, expected, message, '!==', assert.notStrictEqual);
}
};
};
function expectedException(actual, expected) {
function expectedException(actual, expected) {
if (!actual || !expected) {
return false;
}
@@ -417,10 +381,10 @@ function expectedException(actual, expected) {
}
return false;
}
}
function _throws(shouldThrow, block, expected, message) {
var actual;
function _throws(shouldThrow, block, expected, message) {
let actual;
if (typeof block !== 'function') {
throw new TypeError('block must be a function');
@@ -452,30 +416,30 @@ function _throws(shouldThrow, block, expected, message) {
!expectedException(actual, expected)) || (!shouldThrow && actual)) {
throw actual;
}
}
}
// 11. Expected to throw an error:
// assert.throws(block, Error_opt, message_opt);
// 11. Expected to throw an error:
// 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)));
};
};
// EXTENSION! This is annoying to write outside this module.
assert.doesNotThrow = function(block, /*optional*/message) {
// 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;}};
assert.ifError = function (err) { if (err) { throw err; } };
function checkIsPromise(obj) {
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) {
const NO_EXCEPTION_SENTINEL = {};
async function waitForActual(promiseFn) {
let resultPromise;
if (typeof promiseFn === 'function') {
// Return a rejected promise if `promiseFn` throws synchronously.
@@ -496,23 +460,39 @@ async function waitForActual(promiseFn) {
return e;
}
return NO_EXCEPTION_SENTINEL;
}
}
function expectsError(shouldHaveError, actual, message) {
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) {
assert.rejects = async function rejects(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);
};
};
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 = {
imports: {
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-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,

View File

@@ -78,7 +78,7 @@
// generate import map
const importMap = {
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-test': new URL('../node_modules/sinon-test/dist/sinon-test-es.js', baseUrl).href,
'electron': asRequireBlobUri('electron'),