UNPKG

@structured-types/instant-documentation-plugin

Version:

Typescript playground plugin to display instant documentation.

1,378 lines (1,279 loc) 448 kB
define((function () { 'use strict'; /** * The property type or kind */ var PropKind$1; (function (PropKind) { PropKind[PropKind["String"] = 1] = "String"; PropKind[PropKind["Number"] = 2] = "Number"; PropKind[PropKind["Boolean"] = 3] = "Boolean"; PropKind[PropKind["Union"] = 4] = "Union"; PropKind[PropKind["Enum"] = 5] = "Enum"; PropKind[PropKind["Tuple"] = 6] = "Tuple"; PropKind[PropKind["Rest"] = 7] = "Rest"; PropKind[PropKind["Undefined"] = 8] = "Undefined"; PropKind[PropKind["Unknown"] = 9] = "Unknown"; PropKind[PropKind["Null"] = 10] = "Null"; PropKind[PropKind["Function"] = 11] = "Function"; PropKind[PropKind["Void"] = 12] = "Void"; PropKind[PropKind["Class"] = 13] = "Class"; PropKind[PropKind["Interface"] = 14] = "Interface"; PropKind[PropKind["Type"] = 15] = "Type"; PropKind[PropKind["Array"] = 16] = "Array"; PropKind[PropKind["Any"] = 17] = "Any"; PropKind[PropKind["Index"] = 20] = "Index"; PropKind[PropKind["Constructor"] = 21] = "Constructor"; PropKind[PropKind["Getter"] = 22] = "Getter"; PropKind[PropKind["Setter"] = 23] = "Setter"; PropKind[PropKind["BigInt"] = 24] = "BigInt"; PropKind[PropKind["Component"] = 25] = "Component"; PropKind[PropKind["Object"] = 26] = "Object"; PropKind[PropKind["Namespace"] = 27] = "Namespace"; PropKind[PropKind["RegEx"] = 28] = "RegEx"; })(PropKind$1 || (PropKind$1 = {})); /** * NumberProp type guard predicate */ const isNumberProp = (prop) => { return prop.kind === PropKind$1.Number || prop.kind === PropKind$1.BigInt; }; /** * BooleanProp type guard predicate */ const isBooleanProp = (prop) => { return prop.kind === PropKind$1.Boolean; }; /** * EnumProp type guard predicate */ const isEnumProp$1 = (prop) => { return prop.kind === PropKind$1.Enum; }; /** * UnknownProp type guard predicate */ const isUnknownProp = (prop) => { return prop.kind === PropKind$1.Unknown; }; /** * BaseFunctionProp type guard predicate */ const isFunctionBaseType = (prop) => { return (prop.kind === PropKind$1.Function || prop.kind === PropKind$1.Constructor || prop.kind === PropKind$1.Getter || prop.kind === PropKind$1.Setter); }; /** * TypeProp type guard predicate */ const isTypeProp = (prop) => { return prop.kind === PropKind$1.Type; }; /** * HasGenericsProp predicate to determine if a prop has a generics field */ const hasGenerics$1 = (prop) => { return (prop.kind === PropKind$1.Type || prop.kind === PropKind$1.Class || prop.kind === PropKind$1.Interface || prop.kind === PropKind$1.Array); }; /** * ArrayProp type guard predicate */ const isArrayProp$1 = (prop) => { return prop.kind === PropKind$1.Array; }; /** * IndexProp type guard predicate */ const isIndexProp$1 = (prop) => { return prop.kind === PropKind$1.Index; }; /** * ClassLikeProp predicate to determine if a prop is class-like */ const isClassLikeProp$1 = (prop) => { return (prop.kind === PropKind$1.Class || prop.kind === PropKind$1.Interface || prop.kind === PropKind$1.Type || prop.kind === PropKind$1.Object || prop.kind === PropKind$1.Component); }; /** * ObjectLikeProp predicate to determine if a prop is object-like */ const isObjectLikeProp = (prop) => { return (isClassLikeProp$1(prop) || prop.kind === PropKind$1.Index || prop.kind === PropKind$1.Enum || prop.kind === PropKind$1.Object); }; /** * assign the value of a property, with type conversion * @param prop the input property * @param value the value as a string * @returns the modified property */ const propValue = (prop, value) => { if (typeof value !== 'undefined') { if (isNumberProp(prop)) { prop.value = Number(value); } else if (isBooleanProp(prop)) { prop.value = Boolean(value); } else { prop.value = value; } } return prop; }; /** * remove single and double quotes around a string * @param txt the input text * @returns the text without the enclosing quotes */ const trimQuotes = (txt) => txt ? txt.replace(/['"]+/g, '') : txt; const strValue = (value) => { switch (value) { case 'undefined': return undefined; case 'null': return null; case 'false': return false; case 'true': return true; default: return value; } }; function assertPath$1$1(path) { if (typeof path !== 'string') { throw new TypeError('Path must be a string. Received ' + JSON.stringify(path)); } } // Resolves . and .. elements in a path with directory names function normalizeStringPosix$1$1(path, allowAboveRoot) { var res = ''; var lastSegmentLength = 0; var lastSlash = -1; var dots = 0; var code; for (var i = 0; i <= path.length; ++i) { if (i < path.length) code = path.charCodeAt(i); else if (code === 47 /*/*/) break; else code = 47 /*/*/; if (code === 47 /*/*/) { if (lastSlash === i - 1 || dots === 1) ; else if (lastSlash !== i - 1 && dots === 2) { if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) { if (res.length > 2) { var lastSlashIndex = res.lastIndexOf('/'); if (lastSlashIndex !== res.length - 1) { if (lastSlashIndex === -1) { res = ''; lastSegmentLength = 0; } else { res = res.slice(0, lastSlashIndex); lastSegmentLength = res.length - 1 - res.lastIndexOf('/'); } lastSlash = i; dots = 0; continue; } } else if (res.length === 2 || res.length === 1) { res = ''; lastSegmentLength = 0; lastSlash = i; dots = 0; continue; } } if (allowAboveRoot) { if (res.length > 0) res += '/..'; else res = '..'; lastSegmentLength = 2; } } else { if (res.length > 0) res += '/' + path.slice(lastSlash + 1, i); else res = path.slice(lastSlash + 1, i); lastSegmentLength = i - lastSlash - 1; } lastSlash = i; dots = 0; } else if (code === 46 /*.*/ && dots !== -1) { ++dots; } else { dots = -1; } } return res; } function _format$1$1(sep, pathObject) { var dir = pathObject.dir || pathObject.root; var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || ''); if (!dir) { return base; } if (dir === pathObject.root) { return dir + base; } return dir + sep + base; } var posix$1$1 = { // path.resolve([from ...], to) resolve: function resolve() { var resolvedPath = ''; var resolvedAbsolute = false; var cwd; for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { var path; if (i >= 0) path = arguments[i]; else { if (cwd === undefined) cwd = process.cwd(); path = cwd; } assertPath$1$1(path); // Skip empty entries if (path.length === 0) { continue; } resolvedPath = path + '/' + resolvedPath; resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/; } // At this point the path should be resolved to a full absolute path, but // handle relative paths to be safe (might happen when process.cwd() fails) // Normalize the path resolvedPath = normalizeStringPosix$1$1(resolvedPath, !resolvedAbsolute); if (resolvedAbsolute) { if (resolvedPath.length > 0) return '/' + resolvedPath; else return '/'; } else if (resolvedPath.length > 0) { return resolvedPath; } else { return '.'; } }, normalize: function normalize(path) { assertPath$1$1(path); if (path.length === 0) return '.'; var isAbsolute = path.charCodeAt(0) === 47 /*/*/; var trailingSeparator = path.charCodeAt(path.length - 1) === 47 /*/*/; // Normalize the path path = normalizeStringPosix$1$1(path, !isAbsolute); if (path.length === 0 && !isAbsolute) path = '.'; if (path.length > 0 && trailingSeparator) path += '/'; if (isAbsolute) return '/' + path; return path; }, isAbsolute: function isAbsolute(path) { assertPath$1$1(path); return path.length > 0 && path.charCodeAt(0) === 47 /*/*/; }, join: function join() { if (arguments.length === 0) return '.'; var joined; for (var i = 0; i < arguments.length; ++i) { var arg = arguments[i]; assertPath$1$1(arg); if (arg.length > 0) { if (joined === undefined) joined = arg; else joined += '/' + arg; } } if (joined === undefined) return '.'; return posix$1$1.normalize(joined); }, relative: function relative(from, to) { assertPath$1$1(from); assertPath$1$1(to); if (from === to) return ''; from = posix$1$1.resolve(from); to = posix$1$1.resolve(to); if (from === to) return ''; // Trim any leading backslashes var fromStart = 1; for (; fromStart < from.length; ++fromStart) { if (from.charCodeAt(fromStart) !== 47 /*/*/) break; } var fromEnd = from.length; var fromLen = fromEnd - fromStart; // Trim any leading backslashes var toStart = 1; for (; toStart < to.length; ++toStart) { if (to.charCodeAt(toStart) !== 47 /*/*/) break; } var toEnd = to.length; var toLen = toEnd - toStart; // Compare paths to find the longest common path from root var length = fromLen < toLen ? fromLen : toLen; var lastCommonSep = -1; var i = 0; for (; i <= length; ++i) { if (i === length) { if (toLen > length) { if (to.charCodeAt(toStart + i) === 47 /*/*/) { // We get here if `from` is the exact base path for `to`. // For example: from='/foo/bar'; to='/foo/bar/baz' return to.slice(toStart + i + 1); } else if (i === 0) { // We get here if `from` is the root // For example: from='/'; to='/foo' return to.slice(toStart + i); } } else if (fromLen > length) { if (from.charCodeAt(fromStart + i) === 47 /*/*/) { // We get here if `to` is the exact base path for `from`. // For example: from='/foo/bar/baz'; to='/foo/bar' lastCommonSep = i; } else if (i === 0) { // We get here if `to` is the root. // For example: from='/foo'; to='/' lastCommonSep = 0; } } break; } var fromCode = from.charCodeAt(fromStart + i); var toCode = to.charCodeAt(toStart + i); if (fromCode !== toCode) break; else if (fromCode === 47 /*/*/) lastCommonSep = i; } var out = ''; // Generate the relative path based on the path difference between `to` // and `from` for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) { if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) { if (out.length === 0) out += '..'; else out += '/..'; } } // Lastly, append the rest of the destination (`to`) path that comes after // the common path parts if (out.length > 0) return out + to.slice(toStart + lastCommonSep); else { toStart += lastCommonSep; if (to.charCodeAt(toStart) === 47 /*/*/) ++toStart; return to.slice(toStart); } }, _makeLong: function _makeLong(path) { return path; }, dirname: function dirname(path) { assertPath$1$1(path); if (path.length === 0) return '.'; var code = path.charCodeAt(0); var hasRoot = code === 47 /*/*/; var end = -1; var matchedSlash = true; for (var i = path.length - 1; i >= 1; --i) { code = path.charCodeAt(i); if (code === 47 /*/*/) { if (!matchedSlash) { end = i; break; } } else { // We saw the first non-path separator matchedSlash = false; } } if (end === -1) return hasRoot ? '/' : '.'; if (hasRoot && end === 1) return '//'; return path.slice(0, end); }, basename: function basename(path, ext) { if (ext !== undefined && typeof ext !== 'string') throw new TypeError('"ext" argument must be a string'); assertPath$1$1(path); var start = 0; var end = -1; var matchedSlash = true; var i; if (ext !== undefined && ext.length > 0 && ext.length <= path.length) { if (ext.length === path.length && ext === path) return ''; var extIdx = ext.length - 1; var firstNonSlashEnd = -1; for (i = path.length - 1; i >= 0; --i) { var code = path.charCodeAt(i); if (code === 47 /*/*/) { // If we reached a path separator that was not part of a set of path // separators at the end of the string, stop now if (!matchedSlash) { start = i + 1; break; } } else { if (firstNonSlashEnd === -1) { // We saw the first non-path separator, remember this index in case // we need it if the extension ends up not matching matchedSlash = false; firstNonSlashEnd = i + 1; } if (extIdx >= 0) { // Try to match the explicit extension if (code === ext.charCodeAt(extIdx)) { if (--extIdx === -1) { // We matched the extension, so mark this as the end of our path // component end = i; } } else { // Extension does not match, so our result is the entire path // component extIdx = -1; end = firstNonSlashEnd; } } } } if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length; return path.slice(start, end); } else { for (i = path.length - 1; i >= 0; --i) { if (path.charCodeAt(i) === 47 /*/*/) { // If we reached a path separator that was not part of a set of path // separators at the end of the string, stop now if (!matchedSlash) { start = i + 1; break; } } else if (end === -1) { // We saw the first non-path separator, mark this as the end of our // path component matchedSlash = false; end = i + 1; } } if (end === -1) return ''; return path.slice(start, end); } }, extname: function extname(path) { assertPath$1$1(path); var startDot = -1; var startPart = 0; var end = -1; var matchedSlash = true; // Track the state of characters (if any) we see before our first dot and // after any path separator we find var preDotState = 0; for (var i = path.length - 1; i >= 0; --i) { var code = path.charCodeAt(i); if (code === 47 /*/*/) { // If we reached a path separator that was not part of a set of path // separators at the end of the string, stop now if (!matchedSlash) { startPart = i + 1; break; } continue; } if (end === -1) { // We saw the first non-path separator, mark this as the end of our // extension matchedSlash = false; end = i + 1; } if (code === 46 /*.*/) { // If this is our first dot, mark it as the start of our extension if (startDot === -1) startDot = i; else if (preDotState !== 1) preDotState = 1; } else if (startDot !== -1) { // We saw a non-dot and non-path separator before our dot, so we should // have a good chance at having a non-empty extension preDotState = -1; } } if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot preDotState === 0 || // The (right-most) trimmed path component is exactly '..' preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) { return ''; } return path.slice(startDot, end); }, format: function format(pathObject) { if (pathObject === null || typeof pathObject !== 'object') { throw new TypeError('The "pathObject" argument must be of type Object. Received type ' + typeof pathObject); } return _format$1$1('/', pathObject); }, parse: function parse(path) { assertPath$1$1(path); var ret = { root: '', dir: '', base: '', ext: '', name: '' }; if (path.length === 0) return ret; var code = path.charCodeAt(0); var isAbsolute = code === 47 /*/*/; var start; if (isAbsolute) { ret.root = '/'; start = 1; } else { start = 0; } var startDot = -1; var startPart = 0; var end = -1; var matchedSlash = true; var i = path.length - 1; // Track the state of characters (if any) we see before our first dot and // after any path separator we find var preDotState = 0; // Get non-dir info for (; i >= start; --i) { code = path.charCodeAt(i); if (code === 47 /*/*/) { // If we reached a path separator that was not part of a set of path // separators at the end of the string, stop now if (!matchedSlash) { startPart = i + 1; break; } continue; } if (end === -1) { // We saw the first non-path separator, mark this as the end of our // extension matchedSlash = false; end = i + 1; } if (code === 46 /*.*/) { // If this is our first dot, mark it as the start of our extension if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1; } else if (startDot !== -1) { // We saw a non-dot and non-path separator before our dot, so we should // have a good chance at having a non-empty extension preDotState = -1; } } if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot preDotState === 0 || // The (right-most) trimmed path component is exactly '..' preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) { if (end !== -1) { if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end); } } else { if (startPart === 0 && isAbsolute) { ret.name = path.slice(1, startDot); ret.base = path.slice(1, end); } else { ret.name = path.slice(startPart, startDot); ret.base = path.slice(startPart, end); } ret.ext = path.slice(startDot, end); } if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = '/'; return ret; }, sep: '/', delimiter: ':', win32: null, posix: null }; posix$1$1.posix = posix$1$1; function assertPath$3(path) { if (typeof path !== 'string') { throw new TypeError('Path must be a string. Received ' + JSON.stringify(path)); } } // Resolves . and .. elements in a path with directory names function normalizeStringPosix$3(path, allowAboveRoot) { var res = ''; var lastSegmentLength = 0; var lastSlash = -1; var dots = 0; var code; for (var i = 0; i <= path.length; ++i) { if (i < path.length) code = path.charCodeAt(i); else if (code === 47 /*/*/) break; else code = 47 /*/*/; if (code === 47 /*/*/) { if (lastSlash === i - 1 || dots === 1) ; else if (lastSlash !== i - 1 && dots === 2) { if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) { if (res.length > 2) { var lastSlashIndex = res.lastIndexOf('/'); if (lastSlashIndex !== res.length - 1) { if (lastSlashIndex === -1) { res = ''; lastSegmentLength = 0; } else { res = res.slice(0, lastSlashIndex); lastSegmentLength = res.length - 1 - res.lastIndexOf('/'); } lastSlash = i; dots = 0; continue; } } else if (res.length === 2 || res.length === 1) { res = ''; lastSegmentLength = 0; lastSlash = i; dots = 0; continue; } } if (allowAboveRoot) { if (res.length > 0) res += '/..'; else res = '..'; lastSegmentLength = 2; } } else { if (res.length > 0) res += '/' + path.slice(lastSlash + 1, i); else res = path.slice(lastSlash + 1, i); lastSegmentLength = i - lastSlash - 1; } lastSlash = i; dots = 0; } else if (code === 46 /*.*/ && dots !== -1) { ++dots; } else { dots = -1; } } return res; } function _format$3(sep, pathObject) { var dir = pathObject.dir || pathObject.root; var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || ''); if (!dir) { return base; } if (dir === pathObject.root) { return dir + base; } return dir + sep + base; } var posix$3 = { // path.resolve([from ...], to) resolve: function resolve() { var resolvedPath = ''; var resolvedAbsolute = false; var cwd; for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { var path; if (i >= 0) path = arguments[i]; else { if (cwd === undefined) cwd = process.cwd(); path = cwd; } assertPath$3(path); // Skip empty entries if (path.length === 0) { continue; } resolvedPath = path + '/' + resolvedPath; resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/; } // At this point the path should be resolved to a full absolute path, but // handle relative paths to be safe (might happen when process.cwd() fails) // Normalize the path resolvedPath = normalizeStringPosix$3(resolvedPath, !resolvedAbsolute); if (resolvedAbsolute) { if (resolvedPath.length > 0) return '/' + resolvedPath; else return '/'; } else if (resolvedPath.length > 0) { return resolvedPath; } else { return '.'; } }, normalize: function normalize(path) { assertPath$3(path); if (path.length === 0) return '.'; var isAbsolute = path.charCodeAt(0) === 47 /*/*/; var trailingSeparator = path.charCodeAt(path.length - 1) === 47 /*/*/; // Normalize the path path = normalizeStringPosix$3(path, !isAbsolute); if (path.length === 0 && !isAbsolute) path = '.'; if (path.length > 0 && trailingSeparator) path += '/'; if (isAbsolute) return '/' + path; return path; }, isAbsolute: function isAbsolute(path) { assertPath$3(path); return path.length > 0 && path.charCodeAt(0) === 47 /*/*/; }, join: function join() { if (arguments.length === 0) return '.'; var joined; for (var i = 0; i < arguments.length; ++i) { var arg = arguments[i]; assertPath$3(arg); if (arg.length > 0) { if (joined === undefined) joined = arg; else joined += '/' + arg; } } if (joined === undefined) return '.'; return posix$3.normalize(joined); }, relative: function relative(from, to) { assertPath$3(from); assertPath$3(to); if (from === to) return ''; from = posix$3.resolve(from); to = posix$3.resolve(to); if (from === to) return ''; // Trim any leading backslashes var fromStart = 1; for (; fromStart < from.length; ++fromStart) { if (from.charCodeAt(fromStart) !== 47 /*/*/) break; } var fromEnd = from.length; var fromLen = fromEnd - fromStart; // Trim any leading backslashes var toStart = 1; for (; toStart < to.length; ++toStart) { if (to.charCodeAt(toStart) !== 47 /*/*/) break; } var toEnd = to.length; var toLen = toEnd - toStart; // Compare paths to find the longest common path from root var length = fromLen < toLen ? fromLen : toLen; var lastCommonSep = -1; var i = 0; for (; i <= length; ++i) { if (i === length) { if (toLen > length) { if (to.charCodeAt(toStart + i) === 47 /*/*/) { // We get here if `from` is the exact base path for `to`. // For example: from='/foo/bar'; to='/foo/bar/baz' return to.slice(toStart + i + 1); } else if (i === 0) { // We get here if `from` is the root // For example: from='/'; to='/foo' return to.slice(toStart + i); } } else if (fromLen > length) { if (from.charCodeAt(fromStart + i) === 47 /*/*/) { // We get here if `to` is the exact base path for `from`. // For example: from='/foo/bar/baz'; to='/foo/bar' lastCommonSep = i; } else if (i === 0) { // We get here if `to` is the root. // For example: from='/foo'; to='/' lastCommonSep = 0; } } break; } var fromCode = from.charCodeAt(fromStart + i); var toCode = to.charCodeAt(toStart + i); if (fromCode !== toCode) break; else if (fromCode === 47 /*/*/) lastCommonSep = i; } var out = ''; // Generate the relative path based on the path difference between `to` // and `from` for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) { if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) { if (out.length === 0) out += '..'; else out += '/..'; } } // Lastly, append the rest of the destination (`to`) path that comes after // the common path parts if (out.length > 0) return out + to.slice(toStart + lastCommonSep); else { toStart += lastCommonSep; if (to.charCodeAt(toStart) === 47 /*/*/) ++toStart; return to.slice(toStart); } }, _makeLong: function _makeLong(path) { return path; }, dirname: function dirname(path) { assertPath$3(path); if (path.length === 0) return '.'; var code = path.charCodeAt(0); var hasRoot = code === 47 /*/*/; var end = -1; var matchedSlash = true; for (var i = path.length - 1; i >= 1; --i) { code = path.charCodeAt(i); if (code === 47 /*/*/) { if (!matchedSlash) { end = i; break; } } else { // We saw the first non-path separator matchedSlash = false; } } if (end === -1) return hasRoot ? '/' : '.'; if (hasRoot && end === 1) return '//'; return path.slice(0, end); }, basename: function basename(path, ext) { if (ext !== undefined && typeof ext !== 'string') throw new TypeError('"ext" argument must be a string'); assertPath$3(path); var start = 0; var end = -1; var matchedSlash = true; var i; if (ext !== undefined && ext.length > 0 && ext.length <= path.length) { if (ext.length === path.length && ext === path) return ''; var extIdx = ext.length - 1; var firstNonSlashEnd = -1; for (i = path.length - 1; i >= 0; --i) { var code = path.charCodeAt(i); if (code === 47 /*/*/) { // If we reached a path separator that was not part of a set of path // separators at the end of the string, stop now if (!matchedSlash) { start = i + 1; break; } } else { if (firstNonSlashEnd === -1) { // We saw the first non-path separator, remember this index in case // we need it if the extension ends up not matching matchedSlash = false; firstNonSlashEnd = i + 1; } if (extIdx >= 0) { // Try to match the explicit extension if (code === ext.charCodeAt(extIdx)) { if (--extIdx === -1) { // We matched the extension, so mark this as the end of our path // component end = i; } } else { // Extension does not match, so our result is the entire path // component extIdx = -1; end = firstNonSlashEnd; } } } } if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length; return path.slice(start, end); } else { for (i = path.length - 1; i >= 0; --i) { if (path.charCodeAt(i) === 47 /*/*/) { // If we reached a path separator that was not part of a set of path // separators at the end of the string, stop now if (!matchedSlash) { start = i + 1; break; } } else if (end === -1) { // We saw the first non-path separator, mark this as the end of our // path component matchedSlash = false; end = i + 1; } } if (end === -1) return ''; return path.slice(start, end); } }, extname: function extname(path) { assertPath$3(path); var startDot = -1; var startPart = 0; var end = -1; var matchedSlash = true; // Track the state of characters (if any) we see before our first dot and // after any path separator we find var preDotState = 0; for (var i = path.length - 1; i >= 0; --i) { var code = path.charCodeAt(i); if (code === 47 /*/*/) { // If we reached a path separator that was not part of a set of path // separators at the end of the string, stop now if (!matchedSlash) { startPart = i + 1; break; } continue; } if (end === -1) { // We saw the first non-path separator, mark this as the end of our // extension matchedSlash = false; end = i + 1; } if (code === 46 /*.*/) { // If this is our first dot, mark it as the start of our extension if (startDot === -1) startDot = i; else if (preDotState !== 1) preDotState = 1; } else if (startDot !== -1) { // We saw a non-dot and non-path separator before our dot, so we should // have a good chance at having a non-empty extension preDotState = -1; } } if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot preDotState === 0 || // The (right-most) trimmed path component is exactly '..' preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) { return ''; } return path.slice(startDot, end); }, format: function format(pathObject) { if (pathObject === null || typeof pathObject !== 'object') { throw new TypeError('The "pathObject" argument must be of type Object. Received type ' + typeof pathObject); } return _format$3('/', pathObject); }, parse: function parse(path) { assertPath$3(path); var ret = { root: '', dir: '', base: '', ext: '', name: '' }; if (path.length === 0) return ret; var code = path.charCodeAt(0); var isAbsolute = code === 47 /*/*/; var start; if (isAbsolute) { ret.root = '/'; start = 1; } else { start = 0; } var startDot = -1; var startPart = 0; var end = -1; var matchedSlash = true; var i = path.length - 1; // Track the state of characters (if any) we see before our first dot and // after any path separator we find var preDotState = 0; // Get non-dir info for (; i >= start; --i) { code = path.charCodeAt(i); if (code === 47 /*/*/) { // If we reached a path separator that was not part of a set of path // separators at the end of the string, stop now if (!matchedSlash) { startPart = i + 1; break; } continue; } if (end === -1) { // We saw the first non-path separator, mark this as the end of our // extension matchedSlash = false; end = i + 1; } if (code === 46 /*.*/) { // If this is our first dot, mark it as the start of our extension if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1; } else if (startDot !== -1) { // We saw a non-dot and non-path separator before our dot, so we should // have a good chance at having a non-empty extension preDotState = -1; } } if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot preDotState === 0 || // The (right-most) trimmed path component is exactly '..' preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) { if (end !== -1) { if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end); } } else { if (startPart === 0 && isAbsolute) { ret.name = path.slice(1, startDot); ret.base = path.slice(1, end); } else { ret.name = path.slice(startPart, startDot); ret.base = path.slice(startPart, end); } ret.ext = path.slice(startDot, end); } if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = '/'; return ret; }, sep: '/', delimiter: ':', win32: null, posix: null }; posix$3.posix = posix$3; var pathBrowserify$1 = posix$3; const isVariableLikeDeclaration = (node) => { return (node.kind === window.ts.SyntaxKind.VariableDeclaration || node.kind === window.ts.SyntaxKind.Parameter || node.kind === window.ts.SyntaxKind.BindingElement || node.kind === window.ts.SyntaxKind.PropertyDeclaration || node.kind === window.ts.SyntaxKind.PropertyAssignment || node.kind === window.ts.SyntaxKind.PropertySignature || node.kind === window.ts.SyntaxKind.JsxAttribute || node.kind === window.ts.SyntaxKind.EnumMember); }; const isHasType = (node) => { return (node.kind === window.ts.SyntaxKind.CallSignature || node.kind === window.ts.SyntaxKind.ConstructSignature || node.kind === window.ts.SyntaxKind.MethodSignature || node.kind === window.ts.SyntaxKind.IndexSignature || node.kind === window.ts.SyntaxKind.FunctionType || node.kind === window.ts.SyntaxKind.MethodDeclaration || node.kind === window.ts.SyntaxKind.Constructor || node.kind === window.ts.SyntaxKind.GetAccessor || node.kind === window.ts.SyntaxKind.SetAccessor || node.kind === window.ts.SyntaxKind.FunctionExpression || node.kind === window.ts.SyntaxKind.ArrowFunction || node.kind === window.ts.SyntaxKind.VariableDeclaration || node.kind === window.ts.SyntaxKind.Parameter || node.kind === window.ts.SyntaxKind.PropertySignature || node.kind === window.ts.SyntaxKind.PropertyDeclaration || node.kind === window.ts.SyntaxKind.TypePredicate || node.kind === window.ts.SyntaxKind.ParenthesizedType || node.kind === window.ts.SyntaxKind.TypeOperator || node.kind === window.ts.SyntaxKind.MappedType || node.kind === window.ts.SyntaxKind.TypeAssertionExpression || node.kind === window.ts.SyntaxKind.AsExpression || node.kind === window.ts.SyntaxKind.TypeAliasDeclaration); }; const isSignatureDeclaration = (node) => { return (node.kind === window.ts.SyntaxKind.CallSignature || node.kind === window.ts.SyntaxKind.ConstructSignature || node.kind === window.ts.SyntaxKind.MethodSignature || node.kind === window.ts.SyntaxKind.IndexSignature || node.kind === window.ts.SyntaxKind.FunctionType || node.kind === window.ts.SyntaxKind.ConstructorType || node.kind === window.ts.SyntaxKind.JSDocFunctionType || node.kind === window.ts.SyntaxKind.FunctionDeclaration || node.kind === window.ts.SyntaxKind.MethodDeclaration || node.kind === window.ts.SyntaxKind.Constructor || node.kind === window.ts.SyntaxKind.GetAccessor || node.kind === window.ts.SyntaxKind.SetAccessor || node.kind === window.ts.SyntaxKind.FunctionExpression || node.kind === window.ts.SyntaxKind.ArrowFunction); }; const tsKindToPropKind = { [window.ts.SyntaxKind.ObjectLiteralExpression]: PropKind$1.Object, [window.ts.SyntaxKind.StringKeyword]: PropKind$1.String, [window.ts.SyntaxKind.StringLiteral]: PropKind$1.String, [window.ts.SyntaxKind.RegularExpressionLiteral]: PropKind$1.RegEx, [window.ts.SyntaxKind.NumberKeyword]: PropKind$1.Number, [window.ts.SyntaxKind.NumericLiteral]: PropKind$1.Number, [window.ts.SyntaxKind.BooleanKeyword]: PropKind$1.Boolean, [window.ts.SyntaxKind.EnumDeclaration]: PropKind$1.Enum, [window.ts.SyntaxKind.UnionType]: PropKind$1.Union, [window.ts.SyntaxKind.ClassDeclaration]: PropKind$1.Class, [window.ts.SyntaxKind.ClassExpression]: PropKind$1.Class, [window.ts.SyntaxKind.ClassDeclaration]: PropKind$1.Class, [window.ts.SyntaxKind.InterfaceDeclaration]: PropKind$1.Interface, [window.ts.SyntaxKind.TypeLiteral]: PropKind$1.Type, [window.ts.SyntaxKind.CallSignature]: PropKind$1.Function, [window.ts.SyntaxKind.ConstructSignature]: PropKind$1.Constructor, [window.ts.SyntaxKind.MethodSignature]: PropKind$1.Function, [window.ts.SyntaxKind.FunctionDeclaration]: PropKind$1.Function, [window.ts.SyntaxKind.FunctionType]: PropKind$1.Function, [window.ts.SyntaxKind.MethodDeclaration]: PropKind$1.Function, [window.ts.SyntaxKind.Constructor]: PropKind$1.Constructor, [window.ts.SyntaxKind.GetAccessor]: PropKind$1.Getter, [window.ts.SyntaxKind.SetAccessor]: PropKind$1.Setter, [window.ts.SyntaxKind.FunctionExpression]: PropKind$1.Function, [window.ts.SyntaxKind.ArrowFunction]: PropKind$1.Function, [window.ts.SyntaxKind.TypePredicate]: PropKind$1.Type, [window.ts.SyntaxKind.TypeOperator]: PropKind$1.Type, [window.ts.SyntaxKind.MappedType]: PropKind$1.Type, [window.ts.SyntaxKind.TypeAssertionExpression]: PropKind$1.Type, [window.ts.SyntaxKind.TypeAliasDeclaration]: PropKind$1.Type, [window.ts.SyntaxKind.IndexSignature]: PropKind$1.Index, [window.ts.SyntaxKind.ArrayType]: PropKind$1.Array, [window.ts.SyntaxKind.JSDocTypeLiteral]: PropKind$1.Type, [window.ts.SyntaxKind.JSDocTypedefTag]: PropKind$1.Type, [window.ts.SyntaxKind.ModuleDeclaration]: PropKind$1.Namespace, [window.ts.SyntaxKind.NamespaceExportDeclaration]: PropKind$1.Namespace, [window.ts.SyntaxKind.NamespaceKeyword]: PropKind$1.Namespace, }; const isObjectTypeDeclaration = (node) => { return (node.kind === window.ts.SyntaxKind.ClassDeclaration || node.kind === window.ts.SyntaxKind.ClassExpression || node.kind === window.ts.SyntaxKind.InterfaceDeclaration); }; const isTypeParameterType = (node) => isObjectTypeDeclaration(node) || node.kind === window.ts.SyntaxKind.TypeAliasDeclaration; const isGenericsType = (node) => isTypeParameterType(node) || node.kind === window.ts.SyntaxKind.TypeLiteral; const isFunctionBodyType = (node) => { return (node.kind === window.ts.SyntaxKind.ArrowFunction || node.kind === window.ts.SyntaxKind.FunctionDeclaration || node.kind === window.ts.SyntaxKind.FunctionExpression || node.kind === window.ts.SyntaxKind.GetAccessor || node.kind === window.ts.SyntaxKind.Constructor || node.kind === window.ts.SyntaxKind.MethodDeclaration); }; const isFunctionLike = (node) => { return (isFunctionBodyType(node) || node.kind === window.ts.SyntaxKind.SetAccessor || node.kind === window.ts.SyntaxKind.FunctionType || node.kind === window.ts.SyntaxKind.MethodSignature); }; const isArrayLike = (node) => { return (node.kind === window.ts.SyntaxKind.ArrayType || node.kind === window.ts.SyntaxKind.ArrayLiteralExpression || (window.ts.isTypeReferenceNode(node) && ['ArrayConstructor', 'Array'].includes(node.typeName.getText()))); }; const tsDefaults = { jsx: window.ts.JsxEmit.ReactJSX, module: window.ts.ModuleKind.CommonJS, target: window.ts.ScriptTarget.ES2017, noImplicitAny: true, noImplicitReturns: true, strictNullChecks: true, strictFunctionTypes: true, strictBindCallApply: true, strictPropertyInitialization: true, esModuleInterop: true, noImplicitThis: true, alwaysStrict: true, allowJs: true, checkJs: true, }; const defaultParseOptions = { collectHelpers: true, collectGenerics: true, collectParameters: true, collectProperties: true, collectInheritance: true, collectExtension: true, collectAliasName: true, filter: (prop) => !prop.ignore, internalTypes: { Function: PropKind$1.Function, CallableFunction: PropKind$1.Function, NewableFunction: PropKind$1.Function, Object: PropKind$1.Unknown, String: PropKind$1.String, Boolean: PropKind$1.Boolean, Booleanish: PropKind$1.Boolean, Number: PropKind$1.Number, Array: PropKind$1.Array, Promise: PropKind$1.Any, ConcatArray: PropKind$1.Array, ReadonlyArray: PropKind$1.Array, TemplateStringsArray: PropKind$1.Array, }, }; const getTypeKind = (typeNode) => { if (typeNode) { if (typeNode.flags & window.ts.TypeFlags.Unknown) { return PropKind$1.Unknown; } else if (typeNode.flags & window.ts.TypeFlags.String) { return PropKind$1.String; } else if (typeNode.flags & window.ts.TypeFlags.Number) { return PropKind$1.Number; } else if (typeNode.flags & window.ts.TypeFlags.Boolean) { return PropKind$1.Boolean; } else if (typeNode.flags & window.ts.TypeFlags.Enum) { return PropKind$1.Enum; } else if (typeNode.flags & window.ts.TypeFlags.BigInt) { return PropKind$1.BigInt; } else if (typeNode.flags & window.ts.TypeFlags.Void) { return PropKind$1.Void; } else if (typeNode.flags & window.ts.TypeFlags.Undefined) { return PropKind$1.Undefined; } else if (typeNode.flags & window.ts.TypeFlags.Any) { return PropKind$1.Any; } else if (typeNode.flags & window.ts.TypeFlags.Null) { return PropKind$1.Null; } else if (typeNode.flags & window.ts.TypeFlags.Never) { return PropKind$1.Unknown; } } return undefined; }; const isValidType = (type) => { return (!('intrinsicName' in type) || type.intrinsicName !== 'error'); }; const getSymbolType = (checker, symbol) => { const declaration = getSymbolDeclaration(symbol); if (declaration) { const type = checker.getTypeOfSymbolAtLocation(symbol, declaration); if (isValidType(type)) { return type; } } const symbolType = checker.getDeclaredTypeOfSymbol(symbol); if (isValidType(symbolType)) { return symbolType; } return undefined; }; const updateModifiers = (prop, declaration) => { if (declaration) { if (declaration.questionToken) { prop.optional = true; } if (declaration.modifiers) { for (const m of declaration.modifiers) { if (m.kind === window.ts.SyntaxKind.Pri