mirror of
https://github.com/microsoft/vscode.git
synced 2025-12-20 02:08:47 +00:00
esm - more cleanup (#230285)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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": []
|
||||
},
|
||||
{
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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%
|
||||
|
||||
|
||||
@@ -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 "$@"
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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/*",
|
||||
|
||||
@@ -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 = {
|
||||
'&': '&',
|
||||
'<': '<',
|
||||
'>': '>',
|
||||
'"': '"',
|
||||
"'": ''',
|
||||
};
|
||||
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
35
src/vs/loader.d.ts
vendored
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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[] {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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'),
|
||||
|
||||
Reference in New Issue
Block a user