Support TypeScript 5 (backport #14391 and #13819) (#14512)

This commit is contained in:
fisker Cheung authored and GitHub committed 2023-03-20 13:57:48 +08:00
1 parent e7b383b570
commit 019ebe5207
40 files changed
+1071 -681

No files matched your search

+6
View File
@@ -0,0 +1,6 @@
#### Support TypeScript 5.0 (#14391 by @fisker, #13819 by @fisker, @sosukesuzuki)
TypeScript 5.0 introduces two new syntactic features:
- `const` modifiers for type parameters
- `export type *` declarations
+1
View File
@@ -339,6 +339,7 @@
"Tradeshift",
"Transloadit",
"trippable",
"tsbuild",
"tsep",
"TSES",
"TSJS",
+5 -5
View File
@@ -24,10 +24,10 @@
"dependencies": {
"@angular/compiler": "12.2.16",
"@babel/code-frame": "7.18.6",
"@babel/parser": "7.20.7",
"@babel/parser": "7.21.3",
"@glimmer/syntax": "0.84.2",
"@iarna/toml": "2.2.5",
"@typescript-eslint/typescript-estree": "5.45.0",
"@typescript-eslint/typescript-estree": "5.55.0",
"acorn": "8.8.1",
"acorn-jsx": "5.3.2",
"angular-estree-parser": "2.5.1",
@@ -85,7 +85,7 @@
"semver": "7.3.7",
"string-width": "5.0.1",
"strip-ansi": "7.0.1",
"typescript": "4.9.3",
"typescript": "5.0.2",
"unicode-regex": "3.0.0",
"unified": "9.2.1",
"vnopts": "1.0.2",
@@ -93,7 +93,7 @@
"yaml-unist-parser": "1.3.1"
},
"devDependencies": {
"@babel/core": "7.20.7",
"@babel/core": "7.21.3",
"@babel/preset-env": "7.20.2",
"@babel/types": "7.20.7",
"@esbuild-plugins/node-modules-polyfill": "0.1.4",
@@ -102,7 +102,7 @@
"@types/file-entry-cache": "5.0.2",
"@types/find-cache-dir": "3.2.1",
"@types/jest": "27.4.1",
"@typescript-eslint/eslint-plugin": "5.36.2",
"@typescript-eslint/eslint-plugin": "5.55.0",
"babel-jest": "27.5.1",
"benchmark": "2.1.4",
"browserslist-to-esbuild": "1.2.0",
+198 -394
View File
@@ -4,92 +4,82 @@ import { outdent } from "outdent";
import MagicString from "magic-string";
import { writeFile, PROJECT_ROOT } from "../utils/index.mjs";
/*
Root submodule in `typescript.js` are bundled like
function* getModules(text) {
const parts = text.split(/(?<=\n)( {2}\/\/ src\/\S+\n)/);
```js
var ts;
(function (ts) {
// Submodule
})(ts || (ts = {}));
```
*/
let start = parts[0].length;
const SUBMODULE_START = escapeStringRegexp("var ts;\n(function (ts) {");
const SUBMODULE_END = escapeStringRegexp("})(ts || (ts = {}));");
for (let partIndex = 1; partIndex < parts.length - 1; partIndex += 2) {
const comment = parts[partIndex];
const code = parts[partIndex + 1];
function getSubmodules(text) {
const regexp = new RegExp(
[
"(?<=\n)",
`(?<before>${SUBMODULE_START})`,
"(?=\n)",
"(?<text>.*?)",
"(?<=\n)",
`(?<after>${SUBMODULE_END})`,
"(?=\n)",
].join(""),
"gsu"
);
const path = comment.slice(" // ".length, -1);
const end = start + comment.length + code.length;
return [...text.matchAll(regexp)].map((match) => ({
start: match.index,
end: match.index + match[0].length,
...match.groups,
}));
if (/\S/.test(code)) {
const esmRegExp = new RegExp(
[
"\\s*var (?<initFunctionName>\\w+) = __esm\\({",
`\\s*"${escapeStringRegexp(path)}"\\(\\) {`,
".*",
"\\s*}",
"\\s*}\\);",
].join("\\n"),
"s"
);
const match = code.match(esmRegExp);
yield {
isEntry: path === "src/typescript/typescript.ts",
path,
start: start + comment.length,
end: end - 1,
code,
esmModuleInitFunctionName: match?.groups.initFunctionName,
};
}
start = end;
}
}
class TypeScriptModuleSource {
#source;
#modules;
modules;
constructor(text) {
this.#source = new MagicString(text);
this.#modules = getSubmodules(text);
this.modules = [...getModules(text)];
}
removeSubmodule(testFunction) {
return this.replaceSubmodule(testFunction, "");
}
replaceSubmodule(testFunction, replacement) {
const modules = this.#modules.filter(({ text }) => testFunction(text));
if (modules.length !== 1) {
return this;
// TODO: Enable this check when merge to `next` branch
// throw Object.assign(
// new Error(
// `Expect exactly one submodule to be found, got ${modules.length} submodules.`
// ),
// { modules }
// );
replaceModule(module, replacement) {
if (typeof module === "string") {
module = this.modules.find((searching) => searching.path === module);
}
const [{ start, end, before, after }] = modules;
if (!replacement) {
this.#source.remove(start, end);
} else {
this.#source.overwrite(
start,
end,
before + "\n" + replacement + "\n" + after
);
if (!module) {
throw Object.assign(new Error("Module not found"), { module });
}
const { esmModuleInitFunctionName } = module;
const moduleInitCode = esmModuleInitFunctionName
? `var ${esmModuleInitFunctionName} = () => {};`
: "";
this.#source.overwrite(
module.start,
module.end,
moduleInitCode + replacement
);
return this;
}
removeMultipleSubmodules(testFunction) {
const modules = this.#modules.filter(({ text }) => testFunction(text));
if (modules.length < 2) {
throw new Error("Expect more than one submodules to be found");
removeModule(module) {
if (typeof module === "string") {
module = this.modules.find((searching) => searching.path === module);
}
for (const { start, end } of modules) {
this.#source.remove(start, end);
}
return this;
return this.replaceModule(module, "");
}
replaceAlignedCode({ start, end, replacement = "" }) {
@@ -116,374 +106,188 @@ class TypeScriptModuleSource {
return this;
}
prepend(...args) {
this.#source.prepend(...args);
return this;
}
append(...args) {
this.#source.append(...args);
return this;
}
replace(...args) {
this.#source.replace(...args);
return this;
}
replaceAll(...args) {
this.#source.replaceAll(...args);
return this;
}
applyChanges() {
const text = this.#source.toString();
this.#source = new MagicString(text);
this.modules = getModules(text);
}
toString() {
return this.#source.toString();
}
}
function unwrap(text) {
const startMark = "var ts = (() => {";
const endMark = "return require_typescript();";
const start = text.indexOf(startMark);
const end = text.lastIndexOf(endMark);
if (start === -1 || end === -1) {
throw new Error("Unexpected source");
}
return text.slice(start + startMark.length, end);
}
function modifyTypescriptModule(text) {
text = unwrap(text);
const source = new TypeScriptModuleSource(text);
// Code after `globalThis` shim are useless
const positionOfGlobalThisShim = text.indexOf(
"// We polyfill `globalThis` here so re can reliably patch the global scope"
);
if (positionOfGlobalThisShim === -1) {
throw new Error("Unexpected source.");
// Deprecated
for (const module of source.modules) {
if (module.path.startsWith("src/deprecatedCompat/")) {
source.removeModule(module);
}
}
source.remove(positionOfGlobalThisShim, text.length);
source.append("module.exports = ts;");
// File system
source.removeSubmodule((text) =>
text.includes("ts.generateDjb2Hash = generateDjb2Hash;")
);
// jsTyping
for (const module of source.modules) {
if (module.path.startsWith("src/jsTyping/")) {
source.removeModule(module);
}
}
// Language service
source.removeSubmodule((text) =>
text.includes("ts.TypeScriptServicesFactory = TypeScriptServicesFactory;")
);
// services
for (const module of source.modules) {
if (
module.path === "src/services/services.ts" ||
module.path === "src/services/_namespaces/ts.ts"
) {
continue;
}
// `ts.Version`
source.removeSubmodule((text) => text.includes("ts.Version = Version;"));
// This is a big module, most code except `scanner` is not used
if (module.path === "src/services/utilities.ts") {
source.replaceModule(
module,
outdent`
var scanner;
var ${module.esmModuleInitFunctionName} = () => {
init_debug();
scanner = createScanner(99 /* Latest */, /*skipTrivia*/ true);
};
`
);
continue;
}
// `ts.transform`
source.removeSubmodule((text) => text.includes("ts.transform = transform;"));
if (module.path.startsWith("src/services/")) {
source.removeModule(module);
}
}
// `ts.BreakpointResolver`
source.removeSubmodule((text) =>
text.trimStart().startsWith("var BreakpointResolver;")
);
// `ts.textChanges`
source.removeSubmodule((text) =>
text.trimStart().startsWith("var textChanges;")
);
// `ts.preProcessFile`
source.removeSubmodule((text) =>
text.includes("ts.preProcessFile = preProcessFile;")
);
// `ts.Rename`
source.removeSubmodule((text) => text.trimStart().startsWith("var Rename;"));
// `ts.SmartSelectionRange`
source.removeSubmodule((text) =>
text.trimStart().startsWith("var SmartSelectionRange;")
);
// `ts.SignatureHelp`
source.removeSubmodule((text) =>
text.trimStart().startsWith("var SignatureHelp;")
);
// `ts.InlayHints`
source.removeSubmodule((text) =>
text.trimStart().startsWith("var InlayHints;")
);
// Sourcemap
source
.removeSubmodule((text) =>
text.includes("ts.getSourceMapper = getSourceMapper;")
)
.removeSubmodule((text) =>
text.includes("ts.createSourceMapGenerator = createSourceMapGenerator;")
);
// Suggestion
source.removeSubmodule((text) =>
text.includes(
"ts.computeSuggestionDiagnostics = computeSuggestionDiagnostics;"
)
);
// Tracing
source.removeSubmodule((text) =>
text.includes("ts.startTracing = tracingEnabled.startTracing;")
);
// Diagnostics
source.removeSubmodule((text) =>
text.includes("ts.createProgramHost = createProgramHost;")
);
// `ts.transformTypeScript`
source.removeSubmodule((text) =>
text.includes("ts.transformTypeScript = transformTypeScript;")
);
// `ts.createRuntimeTypeSerializer`
source.removeSubmodule((text) =>
text.includes(
"ts.createRuntimeTypeSerializer = createRuntimeTypeSerializer;"
)
);
// Transform
source
// `ts.transformLegacyDecorators`
.removeSubmodule((text) =>
text.includes("ts.transformLegacyDecorators = transformLegacyDecorators;")
)
// `ts.transformES5`
.removeSubmodule((text) => text.includes("ts.transformES5 = transformES5;"))
// `ts.transformES2015`
.removeSubmodule((text) =>
text.includes("ts.transformES2015 = transformES2015;")
)
// `ts.transformES2016`
.removeSubmodule((text) =>
text.includes("ts.transformES2016 = transformES2016;")
)
// `ts.transformES2017` & `ts.createSuperAccessVariableStatement`
.removeSubmodule(
(text) =>
text.includes("ts.transformES2017 = transformES2017;") &&
text.includes(
"ts.createSuperAccessVariableStatement = createSuperAccessVariableStatement;"
)
)
// `ts.transformES2018`
.removeSubmodule((text) =>
text.includes("ts.transformES2018 = transformES2018;")
)
// `ts.transformES2019`
.removeSubmodule((text) =>
text.includes("ts.transformES2019 = transformES2019;")
)
// `ts.transformES2020`
.removeSubmodule((text) =>
text.includes("ts.transformES2020 = transformES2020;")
)
// `ts.transformES2021`
.removeSubmodule((text) =>
text.includes("ts.transformES2021 = transformES2021;")
)
// `ts.transformESNext`
.removeSubmodule((text) =>
text.includes("ts.transformESNext = transformESNext;")
)
// `ts.transformJsx`
.removeSubmodule((text) => text.includes("ts.transformJsx = transformJsx;"))
// `ts.transformGenerators`
.removeSubmodule((text) =>
text.includes("ts.transformGenerators = transformGenerators;")
)
// `ts.transformModule`
.removeSubmodule((text) =>
text.includes("ts.transformModule = transformModule;")
)
// `ts.transformSystemModule`
.removeSubmodule((text) =>
text.includes("ts.transformSystemModule = transformSystemModule;")
)
// `ts.transformECMAScriptModule`
.removeSubmodule((text) =>
text.includes("ts.transformECMAScriptModule = transformECMAScriptModule;")
)
// `ts.transformNodeModule`
.removeSubmodule((text) =>
text.includes("ts.transformNodeModule = transformNodeModule;")
)
// `ts.transformClassFields`
.removeSubmodule((text) =>
text.includes("ts.transformClassFields = transformClassFields;")
)
// `ts.transformDeclarations`
.removeSubmodule((text) =>
text.includes("ts.transformDeclarations = transformDeclarations;")
);
// `ts.transformNodes` and more
source.removeSubmodule((text) =>
text.includes("ts.transformNodes = transformNodes;")
);
// `ts.server`
source.removeSubmodule((text) => text.includes("(ts.server = {})"));
// `ts.JsTyping`
source.removeSubmodule((text) => text.includes("(ts.JsTyping = {})"));
// `ts.ClassificationType`
source.removeSubmodule((text) =>
text.includes("(ts.ClassificationType = {})")
);
// Build
source
.removeSubmodule((text) =>
text.includes("ts.createSolutionBuilder = createSolutionBuilder;")
)
.removeSubmodule((text) =>
text.includes("ts.parseBuildCommand = parseBuildCommand;")
)
.removeSubmodule((text) =>
text.includes("ts.createBuilderProgram = createBuilderProgram;")
)
.removeSubmodule((text) =>
text.includes(
"ts.createSemanticDiagnosticsBuilderProgram = createSemanticDiagnosticsBuilderProgram;"
)
)
.removeSubmodule((text) =>
text.includes("ts.createResolutionCache = createResolutionCache;")
)
.removeSubmodule((text) =>
text.includes("ts.createWatchCompilerHost = createWatchCompilerHost;")
)
.removeSubmodule((text) =>
text.includes(
"ts.resolveConfigFileProjectName = resolveConfigFileProjectName;"
)
)
.removeSubmodule((text) =>
text.includes("ts.getBuildInfo = getBuildInfo;")
);
// Compile
source
.removeSubmodule((text) =>
text.includes("ts.createCompilerHost = createCompilerHost;")
)
.removeSubmodule((text) => text.includes("(ts.BuilderState = {})"))
.removeSubmodule((text) => text.includes("ts.transpile = transpile;"));
// Watch
source.removeSubmodule((text) =>
text.includes("ts.getWatchFactory = getWatchFactory;")
);
// `ts.canProduceDiagnostics`, `ts.createGetSymbolAccessibilityDiagnosticForNode`, and `ts.createGetSymbolAccessibilityDiagnosticForNode`
source.removeSubmodule((text) =>
text.includes("ts.canProduceDiagnostics = canProduceDiagnostics;")
);
// `transformers`
source.removeModule("src/compiler/transformer.ts");
for (const module of source.modules) {
if (module.path.startsWith("src/compiler/transformers/")) {
source.removeModule(module);
}
}
// `ts.moduleSpecifiers`
source.removeSubmodule((text) => text.includes("(ts.moduleSpecifiers = {})"));
source.removeModule("src/compiler/_namespaces/ts.moduleSpecifiers.ts");
source.removeModule("src/compiler/moduleSpecifiers.ts");
// `ts.trace`
source.removeSubmodule((text) => text.includes("ts.trace = trace;"));
// Sourcemap
source.removeModule("src/compiler/sourcemap.ts");
// `ts.createTypeChecker`
source.removeSubmodule((text) =>
text.includes("ts.createTypeChecker = createTypeChecker;")
// watch
source.removeModule("src/compiler/watch.ts");
source.removeModule("src/compiler/watchPublic.ts");
source.removeModule("src/compiler/watchUtilities.ts");
// build
source.removeModule("src/compiler/commandLineParser.ts");
source.removeModule("src/compiler/builder.ts");
source.removeModule("src/compiler/builderPublic.ts");
source.removeModule("src/compiler/resolutionCache.ts");
source.removeModule("src/compiler/tsbuild.ts");
source.removeModule("src/compiler/tsbuildPublic.ts");
source.removeModule("src/compiler/builderState.ts");
source.removeModule("src/compiler/builderStatePublic.ts");
// Misc
source.removeModule("src/compiler/symbolWalker.ts");
source.removeModule("src/compiler/binder.ts");
source.removeModule("src/compiler/semver.ts");
source.removeModule("src/compiler/program.ts");
source.removeModule("src/compiler/moduleNameResolver.ts");
source.removeModule("src/compiler/checker.ts");
source.removeModule("src/compiler/visitorPublic.ts");
source.removeModule("src/compiler/emitter.ts");
source.removeModule("src/compiler/_namespaces/ts.performance.ts");
// File system
source.replaceModule("src/compiler/sys.ts", "var sys;");
source.replaceModule("src/compiler/tracing.ts", "var tracing;");
// perfLogger
source.replaceModule(
"src/compiler/perfLogger.ts",
"var perfLogger = new Proxy(() => {}, {get: () => perfLogger});"
);
// `ts.DocumentHighlights`
source.removeSubmodule((text) =>
text.includes("(ts.DocumentHighlights = {})")
);
// `ts.createDocumentRegistry`
source.removeSubmodule((text) =>
text.includes("ts.createDocumentRegistry = createDocumentRegistry;")
);
// `ts.CallHierarchy`
source.removeSubmodule((text) => text.includes("(ts.CallHierarchy = {})"));
// `ts.flattenDestructuringAssignment` and `ts.flattenDestructuringBinding`
source.removeSubmodule(
(text) =>
text.includes(
"ts.flattenDestructuringAssignment = flattenDestructuringAssignment"
) &&
text.includes(
"ts.flattenDestructuringBinding = flattenDestructuringBinding"
)
);
// `ts.processTaggedTemplateExpression`
source.removeSubmodule((text) =>
text.includes(
"ts.processTaggedTemplateExpression = processTaggedTemplateExpression"
)
);
// Editor
source
.removeSubmodule((text) =>
text.includes("ts.getEditsForFileRename = getEditsForFileRename;")
)
.removeSubmodule((text) => text.includes("(ts.GoToDefinition = {})"))
.removeSubmodule((text) => text.includes("(ts.JsDoc = {})"))
.removeSubmodule((text) => text.includes("(ts.NavigateTo = {})"))
.removeSubmodule((text) => text.includes("(ts.NavigationBar = {})"))
.removeSubmodule((text) => text.includes("(ts.OrganizeImports = {})"))
.removeSubmodule((text) =>
text.includes("(ts.OutliningElementsCollector = {})")
)
.removeSubmodule((text) =>
text.includes("ts.createPatternMatcher = createPatternMatcher;")
)
.removeSubmodule((text) => text.includes("(ts.SymbolDisplay = {})"));
// `ts.refactor` (multiple)
source.removeMultipleSubmodules((text) =>
text.trimStart().startsWith("var refactor;")
);
// `ts.codefix` (multiple)
source.removeMultipleSubmodules((text) =>
text.trimStart().startsWith("var codefix;")
);
// `ts.formatting` (multiple)
source.removeMultipleSubmodules((text) =>
text.trimStart().startsWith("var formatting;")
);
// `ts.Completions` (multiple)
source.removeMultipleSubmodules((text) =>
text.trimStart().startsWith("var Completions;")
);
// `ts.FindAllReferences` (multiple)
source.removeMultipleSubmodules((text) =>
text.trimStart().startsWith("var FindAllReferences;")
);
// Performance
source.replaceSubmodule(
(text) =>
text.includes(
"ts.tryGetNativePerformanceHooks = tryGetNativePerformanceHooks;"
),
// performanceCore
source.replaceModule(
"src/compiler/performanceCore.ts",
outdent`
ts.tryGetNativePerformanceHooks = () => {};
ts.timestamp = Date.now;
var tryGetNativePerformanceHooks = () => {};
var timestamp = Date.now;
`
);
for (const [find, replacement] of Object.entries({
// yarn pnp
"process.versions.pnp": "undefined",
// `factory`
source.removeModule("src/compiler/factory/emitNode.ts");
source.removeModule("src/compiler/factory/emitHelpers.ts");
source.replaceModule(
"src/compiler/factory/nodeConverters.ts",
outdent`
var createNodeConverters = () => new Proxy({}, {get: () => () => {}});
`
);
// Dynamic `require()`s
"ts.sys && ts.sys.require": "false",
"require(etwModulePath)": "undefined",
})) {
source.replaceAll(find, replacement);
}
/* spell-checker: disable */
// `ts.createParenthesizerRules`
source.replaceAlignedCode({
start: "function createParenthesizerRules(",
end: "}",
});
/* spell-checker: enable */
source.replaceAlignedCode({
start: "var debugObjectHost = (function () {",
end: "})();",
start: "function getScriptTargetFeatures(",
end: "}",
});
source.replaceAlignedCode({
start: "var __require = ",
end: "});",
});
source.append("module.exports = require_typescript();");
return source.toString();
}
+1 -1
View File
@@ -42,7 +42,7 @@ async function run() {
const steps = await Promise.all(
[
"./steps/validate-new-version.js",
// "./steps/validate-new-version.js",
"./steps/check-git-status.js",
!params["skip-dependencies-install"] && "./steps/install-dependencies.js",
params.manual && "./steps/run-tests.js",
@@ -5,18 +5,9 @@ const isTsKeywordType = require("../../utils/is-ts-keyword-type.js");
const isTypeCastComment = require("../../utils/is-type-cast-comment.js");
const getLast = require("../../../utils/get-last.js");
const visitNode = require("./visit-node.js");
const { throwErrorForInvalidNodes } = require("./typescript.js");
const throwSyntaxError = require("./throw-syntax-error.js");
function postprocess(ast, options) {
if (
options.parser === "typescript" &&
// decorators or abstract properties
/@|abstract/.test(options.originalText)
) {
throwErrorForInvalidNodes(ast, options);
}
// Keep Babel's non-standard ParenthesizedExpression nodes only if they have Closure-style type cast comments.
if (
options.parser !== "typescript" &&
+75 -18
View File
@@ -19,25 +19,76 @@ function getSourceFileOfNode(node) {
return node;
}
// Invalid decorators are removed since `@typescript-eslint/typescript-estree` v4
// https://github.com/typescript-eslint/typescript-eslint/pull/2375
// There is a `checkGrammarDecorators` in `typescript` package, consider use it directly in future
function throwErrorForInvalidDecorator(tsNode) {
const { illegalDecorators } = tsNode;
if (!isNonEmptyArray(illegalDecorators)) {
return;
}
const [{ expression }] = illegalDecorators;
const sourceFile = getSourceFileOfNode(expression);
const [start, end] = [expression.pos, expression.end].map((position) => {
function throwErrorOnTsNode(node, message) {
const sourceFile = getSourceFileOfNode(node);
const [start, end] = [node.getStart(), node.end].map((position) => {
const { line, character: column } =
sourceFile.getLineAndCharacterOfPosition(position);
return { line: line + 1, column };
});
throwSyntaxError({ loc: { start, end } }, "Decorators are not valid here.");
throwSyntaxError({ loc: { start, end } }, message);
}
// Invalid decorators are removed since `@typescript-eslint/typescript-estree` v4
// https://github.com/typescript-eslint/typescript-eslint/pull/2375
// There is a `checkGrammarDecorators` in `typescript` package, consider use it directly in future
function throwErrorForInvalidDecorator(node) {
const { modifiers } = node;
if (!isNonEmptyArray(modifiers)) {
return;
}
const ts = require("typescript");
const { SyntaxKind } = ts;
for (const modifier of modifiers) {
if (ts.isDecorator(modifier)) {
const legacyDecorators = true;
if (
// @ts-expect-error -- internal?
!ts.nodeCanBeDecorated(
legacyDecorators,
node,
node.parent,
node.parent.parent
)
) {
if (
node.kind === SyntaxKind.MethodDeclaration &&
// @ts-expect-error -- internal?
!ts.nodeIsPresent(node.body)
) {
throwErrorOnTsNode(
modifier,
"A decorator can only decorate a method implementation, not an overload."
);
} else {
throwErrorOnTsNode(modifier, "Decorators are not valid here.");
}
} else if (
legacyDecorators &&
(node.kind === SyntaxKind.GetAccessor ||
node.kind === SyntaxKind.SetAccessor)
) {
// @ts-expect-error -- internal?
const accessors = ts.getAllAccessorDeclarations(
node.parent.members,
node
);
if (
// @ts-expect-error -- internal?
ts.hasDecorators(accessors.firstAccessor) &&
node === accessors.secondAccessor
) {
throwErrorOnTsNode(
modifier,
"Decorators cannot be applied to multiple get/set accessors of the same name."
);
}
}
}
}
}
// Values of abstract property is removed since `@typescript-eslint/typescript-estree` v5
@@ -60,11 +111,17 @@ function throwErrorForInvalidAbstractProperty(tsNode, esTreeNode) {
}
}
function throwErrorForInvalidNodes(ast, options) {
const { esTreeNodeToTSNodeMap, tsNodeToESTreeNodeMap } =
options.tsParseResult;
function throwErrorForInvalidNodes(result, options) {
if (
// decorators or abstract properties
!/@|abstract/.test(options.originalText)
) {
return;
}
visitNode(ast, (node) => {
const { esTreeNodeToTSNodeMap, tsNodeToESTreeNodeMap } = result;
visitNode(result.ast, (node) => {
const tsNode = esTreeNodeToTSNodeMap.get(node);
if (!tsNode) {
return;
+3 -1
View File
@@ -5,6 +5,7 @@ const tryCombinations = require("../../utils/try-combinations.js");
const createParser = require("./utils/create-parser.js");
const replaceHashbang = require("./utils/replace-hashbang.js");
const postprocess = require("./postprocess/index.js");
const { throwErrorForInvalidNodes } = require("./postprocess/typescript.js");
/** @type {import("@typescript-eslint/typescript-estree").TSESTreeOptions} */
const parseOptions = {
@@ -50,7 +51,8 @@ function parse(text, parsers, options = {}) {
}
options.originalText = text;
options.tsParseResult = result;
throwErrorForInvalidNodes(result, options);
return postprocess(result.ast, options);
}
+1 -1
View File
@@ -107,7 +107,7 @@ function printDanglingCommentsForInline(path, options) {
function printTypeParameter(path, options, print) {
const node = path.getValue();
const parts = [];
const parts = [node.type === "TSTypeParameter" && node.const ? "const " : ""];
const parent = path.getParentNode();
if (parent.type === "TSMappedType") {
if (parent.readonly) {
@@ -25,9 +25,9 @@ exports[`arguments.js [flow] format 1`] = `
`;
exports[`arguments.js [typescript] format 1`] = `
"Argument expression expected. (1:13)
"Decorators are not valid here. (1:13)
> 1 | console.log(@deco class Foo {})
| ^
| ^^^^^
2 | console.log(@deco class {})
3 |"
`;
@@ -57,9 +57,9 @@ exports[`arguments.js - {"semi":false} [flow] format 1`] = `
`;
exports[`arguments.js - {"semi":false} [typescript] format 1`] = `
"Argument expression expected. (1:13)
"Decorators are not valid here. (1:13)
> 1 | console.log(@deco class Foo {})
| ^
| ^^^^^
2 | console.log(@deco class {})
3 |"
`;
@@ -145,9 +145,9 @@ exports[`class-expression.js [flow] format 1`] = `
`;
exports[`class-expression.js [typescript] format 1`] = `
"Expression expected. (1:13)
"Decorators are not valid here. (1:13)
> 1 | const a1 = (@deco class Foo {});
| ^
| ^^^^^
2 | const a2 = (@deco class {});
3 |
4 | (@deco class Foo {});"
@@ -181,9 +181,9 @@ exports[`class-expression.js - {"semi":false} [flow] format 1`] = `
`;
exports[`class-expression.js - {"semi":false} [typescript] format 1`] = `
"Expression expected. (1:13)
"Decorators are not valid here. (1:13)
> 1 | const a1 = (@deco class Foo {});
| ^
| ^^^^^
2 | const a2 = (@deco class {});
3 |
4 | (@deco class Foo {});"
@@ -337,9 +337,9 @@ exports[`member-expression.js [flow] format 1`] = `
`;
exports[`member-expression.js [typescript] format 1`] = `
"Expression expected. (1:2)
"Decorators are not valid here. (1:2)
> 1 | (@deco class Foo {}).name;
| ^
| ^^^^^
2 | (@deco class {}).name;
3 |"
`;
@@ -369,9 +369,9 @@ exports[`member-expression.js - {"semi":false} [flow] format 1`] = `
`;
exports[`member-expression.js - {"semi":false} [typescript] format 1`] = `
"Expression expected. (1:2)
"Decorators are not valid here. (1:2)
> 1 | (@deco class Foo {}).name;
| ^
| ^^^^^
2 | (@deco class {}).name;
3 |"
`;
@@ -449,9 +449,9 @@ exports[`super-class.js [flow] format 1`] = `
`;
exports[`super-class.js [typescript] format 1`] = `
"Expression expected. (1:20)
"Decorators are not valid here. (1:20)
> 1 | class Foo extends (@deco class Foo {}){}
| ^
| ^^^^^
2 |
3 | class Foo extends (@deco class {}){}
4 |"
@@ -485,9 +485,9 @@ exports[`super-class.js - {"semi":false} [flow] format 1`] = `
`;
exports[`super-class.js - {"semi":false} [typescript] format 1`] = `
"Expression expected. (1:20)
"Decorators are not valid here. (1:20)
> 1 | class Foo extends (@deco class Foo {}){}
| ^
| ^^^^^
2 |
3 | class Foo extends (@deco class {}){}
4 |"
@@ -7,7 +7,7 @@ exports[`export.js [acorn] format 1`] = `
| ^
3 | export a, * as b from 'mod';
4 | export c, { foo } from 'mod';
5 | export * as d, { bar } from 'mod';"
5 | export * as d from 'mod';"
`;
exports[`export.js [espree] format 1`] = `
@@ -17,7 +17,7 @@ exports[`export.js [espree] format 1`] = `
| ^
3 | export a, * as b from 'mod';
4 | export c, { foo } from 'mod';
5 | export * as d, { bar } from 'mod';"
5 | export * as d from 'mod';"
`;
exports[`export.js [meriyah] format 1`] = `
@@ -27,7 +27,7 @@ exports[`export.js [meriyah] format 1`] = `
| ^
3 | export a, * as b from 'mod';
4 | export c, { foo } from 'mod';
5 | export * as d, { bar } from 'mod';"
5 | export * as d from 'mod';"
`;
exports[`export.js format 1`] = `
@@ -40,9 +40,9 @@ export * as ns from 'mod';
export v from 'mod';
export a, * as b from 'mod';
export c, { foo } from 'mod';
export * as d, { bar } from 'mod';
export * as d from 'mod';
export { fooooooooooooooooooooooooooooooooooooooooooooooooo } from "fooooooooooooooooooooooooooooo";
export Bar, { barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr } from "barrrrrrrrrrrrrrrrrrrrrrrrrrrr";
export Bar from "barrrrrrrrrrrrrrrrrrrrrrrrrrrr";
export { foooooooooooooooooooooooooooooooooooooooooooooo, fooooooooooooooooooooooooooooooooooooooooooooooo } from "fooooooooooooooooooooooooooooo";
=====================================output=====================================
@@ -50,11 +50,9 @@ export * as ns from "mod";
export v from "mod";
export a, * as b from "mod";
export c, { foo } from "mod";
export * as d, { bar } from "mod";
export * as d from "mod";
export { fooooooooooooooooooooooooooooooooooooooooooooooooo } from "fooooooooooooooooooooooooooooo";
export Bar, {
barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr,
} from "barrrrrrrrrrrrrrrrrrrrrrrrrrrr";
export Bar from "barrrrrrrrrrrrrrrrrrrrrrrrrrrr";
export {
foooooooooooooooooooooooooooooooooooooooooooooo,
fooooooooooooooooooooooooooooooooooooooooooooooo,
@@ -2,7 +2,7 @@ export * as ns from 'mod';
export v from 'mod';
export a, * as b from 'mod';
export c, { foo } from 'mod';
export * as d, { bar } from 'mod';
export * as d from 'mod';
export { fooooooooooooooooooooooooooooooooooooooooooooooooo } from "fooooooooooooooooooooooooooooo";
export Bar, { barrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr } from "barrrrrrrrrrrrrrrrrrrrrrrrrrrr";
export Bar from "barrrrrrrrrrrrrrrrrrrrrrrrrrrr";
export { foooooooooooooooooooooooooooooooooooooooooooooo, fooooooooooooooooooooooooooooooooooooooooooooooo } from "fooooooooooooooooooooooooooooo";
@@ -51,6 +51,35 @@ export * as default from "foo";
================================================================================
`;
exports[`export-star-as-reserved-word.js [flow] format 1`] = `
"Unexpected token \`function\` (1:13)
> 1 | export * as function from 'foo'
| ^^^^^^^^
2 | export * as const from 'foo'
3 | export * as as from 'foo'
4 | export * as from from 'foo'"
`;
exports[`export-star-as-reserved-word.js format 1`] = `
====================================options=====================================
parsers: ["babel", "flow", "typescript"]
printWidth: 80
| printWidth
=====================================input======================================
export * as function from 'foo'
export * as const from 'foo'
export * as as from 'foo'
export * as from from 'foo'
=====================================output=====================================
export * as function from "foo";
export * as const from "foo";
export * as as from "foo";
export * as from from "foo";
================================================================================
`;
exports[`export-star-as-string.js [flow] format 1`] = `
"Unexpected string, expected an identifier (1:13)
> 1 | export * as 'foo' from 'foo'
@@ -0,0 +1,4 @@
export * as function from 'foo'
export * as const from 'foo'
export * as as from 'foo'
export * as from from 'foo'
@@ -4,6 +4,7 @@ run_spec(__dirname, ["babel", "flow", "typescript"], {
"export-star-as-default.js",
"export-star-as-string.js",
"export-star-as-string2.js",
"export-star-as-reserved-word.js",
],
typescript: ["export-star-as-string.js", "export-star-as-string2.js"],
},
@@ -287,3 +287,103 @@ export { c as /* comment */ c } from "c";
================================================================================
`;
exports[`test.js - {"bracketSpacing":false} format 1`] = `
====================================options=====================================
bracketSpacing: false
parsers: ["babel", "flow", "typescript"]
printWidth: 80
| printWidth
=====================================input======================================
export { value1, value2 as value2_renamed, value3, value4 as value4_renamed, value5 } from "exports";
export * as ns from "mod";
export * as foo from "./baz";
=====================================output=====================================
export {
value1,
value2 as value2_renamed,
value3,
value4 as value4_renamed,
value5,
} from "exports";
export * as ns from "mod";
export * as foo from "./baz";
================================================================================
`;
exports[`test.js format 1`] = `
====================================options=====================================
parsers: ["babel", "flow", "typescript"]
printWidth: 80
| printWidth
=====================================input======================================
export { value1, value2 as value2_renamed, value3, value4 as value4_renamed, value5 } from "exports";
export * as ns from "mod";
export * as foo from "./baz";
=====================================output=====================================
export {
value1,
value2 as value2_renamed,
value3,
value4 as value4_renamed,
value5,
} from "exports";
export * as ns from "mod";
export * as foo from "./baz";
================================================================================
`;
exports[`undefined.js [espree] format 1`] = `
"Export 'undefinedExport' is not defined (1:10)
> 1 | export { undefinedExport };
| ^
2 |"
`;
exports[`undefined.js - {"bracketSpacing":false} [espree] format 1`] = `
"Export 'undefinedExport' is not defined (1:10)
> 1 | export { undefinedExport };
| ^
2 |"
`;
exports[`undefined.js - {"bracketSpacing":false} format 1`] = `
====================================options=====================================
bracketSpacing: false
parsers: ["babel", "flow", "typescript"]
printWidth: 80
| printWidth
=====================================input======================================
export { undefinedExport };
=====================================output=====================================
export {undefinedExport};
================================================================================
`;
exports[`undefined.js format 1`] = `
====================================options=====================================
parsers: ["babel", "flow", "typescript"]
printWidth: 80
| printWidth
=====================================input======================================
export { undefinedExport };
=====================================output=====================================
export { undefinedExport };
================================================================================
`;
+7 -2
View File
@@ -1,2 +1,7 @@
run_spec(__dirname, ["babel", "flow", "typescript"]);
run_spec(__dirname, ["babel", "flow", "typescript"], { bracketSpacing: false });
run_spec(__dirname, ["babel", "flow", "typescript"], {
errors: { espree: ["undefined.js"] },
});
run_spec(__dirname, ["babel", "flow", "typescript"], {
bracketSpacing: false,
errors: { espree: ["undefined.js"] },
});
@@ -1,9 +1,5 @@
export { value1, value2 as value2_renamed, value3, value4 as value4_renamed, value5 } from "exports";
export a,{b} from "./baz";
export * as ns from "mod";
export * as foo,{bar} from "./baz";
export { undefinedExport };
export * as foo from "./baz";
+1
View File
@@ -0,0 +1 @@
export { undefinedExport };
@@ -1,70 +0,0 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`test.js [acorn] format 1`] = `
"Unexpected token (3:8)
1 | export { value1, value2 as value2_renamed, value3, value4 as value4_renamed, value5 } from "exports";
2 |
> 3 | export a,{b} from "./baz";
| ^
4 |
5 | export * as ns from "mod";
6 |"
`;
exports[`test.js [espree] format 1`] = `
"Unexpected token a (3:8)
1 | export { value1, value2 as value2_renamed, value3, value4 as value4_renamed, value5 } from "exports";
2 |
> 3 | export a,{b} from "./baz";
| ^
4 |
5 | export * as ns from "mod";
6 |"
`;
exports[`test.js [meriyah] format 1`] = `
"Unexpected token: 'identifier' (3:8)
1 | export { value1, value2 as value2_renamed, value3, value4 as value4_renamed, value5 } from "exports";
2 |
> 3 | export a,{b} from "./baz";
| ^
4 |
5 | export * as ns from "mod";
6 |"
`;
exports[`test.js format 1`] = `
====================================options=====================================
parsers: ["babel"]
printWidth: 80
| printWidth
=====================================input======================================
export { value1, value2 as value2_renamed, value3, value4 as value4_renamed, value5 } from "exports";
export a,{b} from "./baz";
export * as ns from "mod";
export * as foo,{bar} from "./baz";
export { undefinedExport };
=====================================output=====================================
export {
value1,
value2 as value2_renamed,
value3,
value4 as value4_renamed,
value5,
} from "exports";
export a, { b } from "./baz";
export * as ns from "mod";
export * as foo, { bar } from "./baz";
export { undefinedExport };
================================================================================
`;
-3
View File
@@ -1,3 +0,0 @@
run_spec(__dirname, ["babel"], {
errors: { acorn: true, espree: true, meriyah: true },
});
@@ -10,11 +10,11 @@ exports[`decorator.ts [babel-ts] format 1`] = `
`;
exports[`decorator.ts [typescript] format 1`] = `
"Decorators are not valid here. (3:2)
"Decorators are not valid here. (3:1)
1 | declare function dec<T>(target: T): T;
2 |
> 3 | @dec
| ^^^
| ^^^^
4 | enum E {}
5 |"
`;
@@ -31,11 +31,11 @@ exports[`enums.ts [babel-ts] format 1`] = `
`;
exports[`enums.ts [typescript] format 1`] = `
"Decorators are not valid here. (3:2)
"Decorators are not valid here. (3:1)
1 | // https://github.com/typescript-eslint/typescript-eslint/pull/2375
2 |
> 3 | @decorator()
| ^^^^^^^^^^^
| ^^^^^^^^^^^^
4 | enum Direction {
5 | Up = 1,
6 | Down,"
@@ -51,11 +51,11 @@ exports[`function.ts [babel-ts] format 1`] = `
`;
exports[`function.ts [typescript] format 1`] = `
"Decorators are not valid here. (3:2)
"Decorators are not valid here. (3:1)
1 | // https://github.com/typescript-eslint/typescript-eslint/pull/2375
2 |
> 3 | @decorator()
| ^^^^^^^^^^^
| ^^^^^^^^^^^^
4 | function foo( ){}
5 |"
`;
@@ -71,11 +71,11 @@ exports[`interface.ts [babel-ts] format 1`] = `
`;
exports[`interface.ts [typescript] format 1`] = `
"Decorators are not valid here. (4:2)
"Decorators are not valid here. (4:1)
2 | // #4632
3 |
> 4 | @hello()
| ^^^^^^^
| ^^^^^^^^
5 | interface MyInterface {id: string;
6 | }
7 |"
@@ -91,9 +91,9 @@ exports[`issue-9102.ts [babel-ts] format 1`] = `
`;
exports[`issue-9102.ts [typescript] format 1`] = `
"Decorators are not valid here. (1:2)
"Decorators are not valid here. (1:1)
> 1 | @Decorator()
| ^^^^^^^^^^^
| ^^^^^^^^^^^^
2 | type T = 1;
3 | class C {}
4 |"
@@ -7,9 +7,9 @@ exports[`snippet: #0 [acorn] format 1`] = `
`;
exports[`snippet: #0 [babel] format 1`] = `
"Constructors in/after an Optional Chain are not allowed. (1:36)
"Constructors in/after an Optional Chain are not allowed. (1:21)
> 1 | const baz3 = new obj?.foo?.bar?.baz(); // baz instance
| ^"
| ^"
`;
exports[`snippet: #0 [espree] format 1`] = `
@@ -31,9 +31,9 @@ exports[`snippet: #1 [acorn] format 1`] = `
`;
exports[`snippet: #1 [babel] format 1`] = `
"Constructors in/after an Optional Chain are not allowed. (1:32)
"Constructors in/after an Optional Chain are not allowed. (1:22)
> 1 | const safe5 = new obj?.qux?.baz(); // undefined
| ^"
| ^"
`;
exports[`snippet: #1 [espree] format 1`] = `
@@ -55,9 +55,9 @@ exports[`snippet: #2 [acorn] format 1`] = `
`;
exports[`snippet: #2 [babel] format 1`] = `
"Constructors in/after an Optional Chain are not allowed. (1:35)
"Constructors in/after an Optional Chain are not allowed. (1:22)
> 1 | const safe6 = new obj?.foo.bar.qux?.(); // undefined
| ^"
| ^"
`;
exports[`snippet: #2 [espree] format 1`] = `
@@ -79,9 +79,9 @@ exports[`snippet: #3 [acorn] format 1`] = `
`;
exports[`snippet: #3 [babel] format 1`] = `
"Constructors in/after an Optional Chain are not allowed. (1:39)
"Constructors in/after an Optional Chain are not allowed. (1:26)
> 1 | const willThrow = new obj?.foo.bar.qux(); // Error: not a constructor
| ^"
| ^"
`;
exports[`snippet: #3 [espree] format 1`] = `
@@ -105,11 +105,11 @@ exports[`snippet: #4 [acorn] format 1`] = `
`;
exports[`snippet: #4 [babel] format 1`] = `
"Constructors in/after an Optional Chain are not allowed. (4:11)
"Constructors in/after an Optional Chain are not allowed. (4:9)
2 | class Test {
3 | }
> 4 | new Test?.(); // test instance
| ^"
| ^"
`;
exports[`snippet: #4 [espree] format 1`] = `
@@ -135,9 +135,9 @@ exports[`snippet: #5 [acorn] format 1`] = `
`;
exports[`snippet: #5 [babel] format 1`] = `
"Constructors in/after an Optional Chain are not allowed. (1:13)
"Constructors in/after an Optional Chain are not allowed. (1:11)
> 1 | new exists?.(); // undefined
| ^"
| ^"
`;
exports[`snippet: #5 [espree] format 1`] = `
@@ -355,15 +355,18 @@ class Foo {
=====================================output=====================================
class Foo {
accessor ["bar"]
accessor;
["bar"]
}
class Foo {
static accessor bar
static accessor;
bar
}
class Foo {
accessor bar
accessor;
bar
}
================================================================================
@@ -392,15 +395,18 @@ class Foo {
=====================================output=====================================
class Foo {
accessor ["bar"];
accessor;
["bar"];
}
class Foo {
static accessor bar;
static accessor;
bar;
}
class Foo {
accessor bar;
accessor;
bar;
}
================================================================================
@@ -1,5 +1,72 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`abstract-method.ts [babel-ts] format 1`] = `
====================================options=====================================
parsers: ["typescript"]
printWidth: 80
| printWidth
=====================================input======================================
class A {
@decorator()
abstract method(): Array<string>
}
=====================================output=====================================
class A {
@decorator()
abstract method(): Array<string>;
}
================================================================================
`;
exports[`abstract-method.ts [typescript] format 1`] = `
"A decorator can only decorate a method implementation, not an overload. (2:5)
1 | class A {
> 2 | @decorator()
| ^^^^^^^^^^^^
3 | abstract method(): Array<string>
4 | }
5 |"
`;
exports[`accessor.ts [babel-ts] format 1`] = `
====================================options=====================================
parsers: ["typescript"]
printWidth: 80
| printWidth
=====================================input======================================
class A {
@foo()
get a() {return 1}
@bar()
set a(v) {}
}
=====================================output=====================================
class A {
@foo()
get a() {
return 1;
}
@bar()
set a(v) {}
}
================================================================================
`;
exports[`accessor.ts [typescript] format 1`] = `
"Decorators cannot be applied to multiple get/set accessors of the same name. (4:5)
2 | @foo()
3 | get a() {return 1}
> 4 | @bar()
| ^^^^^^
5 | set a(v) {}
6 | }
7 |"
`;
exports[`argument-list-preserve-line.ts format 1`] = `
====================================options=====================================
parsers: ["typescript"]
@@ -37,6 +104,28 @@ class Foo {
================================================================================
`;
exports[`comments.ts format 1`] = `
====================================options=====================================
parsers: ["typescript"]
printWidth: 80
| printWidth
=====================================input======================================
class Something {
@Annotateme()
// comment
static property: Array<string>;
}
=====================================output=====================================
class Something {
@Annotateme()
// comment
static property: Array<string>;
}
================================================================================
`;
exports[`decorator-type-assertion.ts format 1`] = `
====================================options=====================================
parsers: ["typescript"]
@@ -256,12 +345,6 @@ class Something2 {
abstract property: Array<string>
}
class Something3 {
@foo()
// comment
abstract method(): Array<string>
}
=====================================output=====================================
class Foo1 {
@foo
@@ -299,12 +382,6 @@ class Something2 {
abstract property: Array<string>;
}
class Something3 {
@foo()
// comment
abstract method(): Array<string>;
}
================================================================================
`;
@@ -419,3 +496,97 @@ class MyContainerComponent {
================================================================================
`;
exports[`mobx.ts format 1`] = `
====================================options=====================================
parsers: ["typescript"]
printWidth: 80
| printWidth
=====================================input======================================
import {observable} from "mobx";
@observer class OrderLine {
@observable price:number = 0;
@observable amount:number = 1;
constructor(price) {
this.price = price;
}
@computed get total() {
return this.price * this.amount;
}
@action.bound setPrice(price) {
this.price = price;
}
@computed
get total2() {
return this.price * this.amount;
}
@action.bound
setPrice(price) {
this.price = price;
}
@computed @computed @computed @computed @computed @computed @computed get total3() {
return this.price * this.amount;
}
@action handleDecrease = (event: React.ChangeEvent<HTMLInputElement>) => this.count--;
@action handleSomething = (event: React.ChangeEvent<HTMLInputElement>) => doSomething();
}
=====================================output=====================================
import { observable } from "mobx";
@observer
class OrderLine {
@observable price: number = 0;
@observable amount: number = 1;
constructor(price) {
this.price = price;
}
@computed get total() {
return this.price * this.amount;
}
@action.bound setPrice(price) {
this.price = price;
}
@computed
get total2() {
return this.price * this.amount;
}
@action.bound
setPrice(price) {
this.price = price;
}
@computed
@computed
@computed
@computed
@computed
@computed
@computed
get total3() {
return this.price * this.amount;
}
@action handleDecrease = (event: React.ChangeEvent<HTMLInputElement>) =>
this.count--;
@action handleSomething = (event: React.ChangeEvent<HTMLInputElement>) =>
doSomething();
}
================================================================================
`;
@@ -0,0 +1,4 @@
class A {
@decorator()
abstract method(): Array<string>
}
@@ -0,0 +1,6 @@
class A {
@foo()
get a() {return 1}
@bar()
set a(v) {}
}
@@ -0,0 +1,5 @@
class Something {
@Annotateme()
// comment
static property: Array<string>;
}
@@ -34,9 +34,3 @@ class Something2 {
// comment
abstract property: Array<string>
}
class Something3 {
@foo()
// comment
abstract method(): Array<string>
}
@@ -1 +1,3 @@
run_spec(__dirname, ["typescript"]);
run_spec(__dirname, ["typescript"], {
errors: { typescript: ["abstract-method.ts", "accessor.ts"] },
});
@@ -0,0 +1,36 @@
import {observable} from "mobx";
@observer class OrderLine {
@observable price:number = 0;
@observable amount:number = 1;
constructor(price) {
this.price = price;
}
@computed get total() {
return this.price * this.amount;
}
@action.bound setPrice(price) {
this.price = price;
}
@computed
get total2() {
return this.price * this.amount;
}
@action.bound
setPrice(price) {
this.price = price;
}
@computed @computed @computed @computed @computed @computed @computed get total3() {
return this.price * this.amount;
}
@action handleDecrease = (event: React.ChangeEvent<HTMLInputElement>) => this.count--;
@action handleSomething = (event: React.ChangeEvent<HTMLInputElement>) => doSomething();
}
@@ -93,3 +93,46 @@ export default abstract class D {}
================================================================================
`;
exports[`export-type-star-from.ts format 1`] = `
====================================options=====================================
parsers: ["typescript"]
printWidth: 80
| printWidth
=====================================input======================================
export type * from './mod';
export type * as ns from './mod';
=====================================output=====================================
export type * from "./mod";
export type * as ns from "./mod";
================================================================================
`;
exports[`export-type-star-from-2.ts [babel-ts] format 1`] = `
====================================options=====================================
parsers: ["typescript"]
printWidth: 80
| printWidth
=====================================input======================================
// Note: TSC doesn't support string module specifiers yet,
// but it's easier for us to support them than not.
export type * as "ns2" from './mod';
=====================================output=====================================
// Note: TSC doesn't support string module specifiers yet,
// but it's easier for us to support them than not.
export type * as "ns2" from "./mod";
================================================================================
`;
exports[`export-type-star-from-2.ts [typescript] format 1`] = `
"Identifier expected. (3:18)
1 | // Note: TSC doesn't support string module specifiers yet,
2 | // but it's easier for us to support them than not.
> 3 | export type * as "ns2" from './mod';
| ^
4 |"
`;
@@ -0,0 +1,3 @@
// Note: TSC doesn't support string module specifiers yet,
// but it's easier for us to support them than not.
export type * as "ns2" from './mod';
@@ -0,0 +1,2 @@
export type * from './mod';
export type * as ns from './mod';
+3 -1
View File
@@ -1 +1,3 @@
run_spec(__dirname, ["typescript"]);
run_spec(__dirname, ["typescript"], {
errors: { typescript: ["export-type-star-from-2.ts"] },
});
@@ -67,9 +67,9 @@ printWidth: 80
`;
exports[`4.ts [typescript] format 1`] = `
"Expression expected. (1:2)
"Decorators are not valid here. (1:2)
> 1 | (@f<<T>(v: T) => void>() class {});
| ^
| ^^^^^^^^^^^^^^^^^^^^^^^
2 |"
`;
@@ -286,6 +286,82 @@ const appIDs = createSelector(
================================================================================
`;
exports[`const.ts format 1`] = `
====================================options=====================================
parsers: ["typescript"]
printWidth: 80
| printWidth
=====================================input======================================
function a<const T>() {}
function b<const T extends U>() {}
function c<T, const U>() {}
declare function d<const T>();
<const T>() => {};
<const T extends U>() => {};
(function <const T>() {});
(function <const T extends U>() {});
(function <T, const U>() {});
class A<const T> {}
class B<const T extends U> {}
class C<T, const U> {}
class D<in const T> {}
class E<const in T> {}
(class <const T> {});
(class <const T extends U> {});
(class <T, const U> {});
(class <in const T> {});
(class <const in T> {});
interface I<const T> {}
interface J<const T extends U> {}
interface K<T, const U> {}
interface L<in const T> {}
interface M<const in T> {}
class _ {
method<const T>() {}
method<const T extends U>() {}
method<T, const U>() {}
}
=====================================output=====================================
function a<const T>() {}
function b<const T extends U>() {}
function c<T, const U>() {}
declare function d<const T>();
<const T>() => {};
<const T extends U>() => {};
(function <const T>() {});
(function <const T extends U>() {});
(function <T, const U>() {});
class A<const T> {}
class B<const T extends U> {}
class C<T, const U> {}
class D<const in T> {}
class E<const in T> {}
(class<const T> {});
(class<const T extends U> {});
(class<T, const U> {});
(class<const in T> {});
(class<const in T> {});
interface I<const T> {}
interface J<const T extends U> {}
interface K<T, const U> {}
interface L<const in T> {}
interface M<const in T> {}
class _ {
method<const T>() {}
method<const T extends U>() {}
method<T, const U>() {}
}
================================================================================
`;
exports[`long-function-arg.ts format 1`] = `
====================================options=====================================
parsers: ["typescript"]
@@ -0,0 +1,32 @@
function a<const T>() {}
function b<const T extends U>() {}
function c<T, const U>() {}
declare function d<const T>();
<const T>() => {};
<const T extends U>() => {};
(function <const T>() {});
(function <const T extends U>() {});
(function <T, const U>() {});
class A<const T> {}
class B<const T extends U> {}
class C<T, const U> {}
class D<in const T> {}
class E<const in T> {}
(class <const T> {});
(class <const T extends U> {});
(class <T, const U> {});
(class <in const T> {});
(class <const in T> {});
interface I<const T> {}
interface J<const T extends U> {}
interface K<T, const U> {}
interface L<in const T> {}
interface M<const in T> {}
class _ {
method<const T>() {}
method<const T extends U>() {}
method<T, const U>() {}
}
+181 -95
View File
@@ -2,7 +2,7 @@
# yarn lockfile v1
"@ampproject/remapping@^2.1.0":
"@ampproject/remapping@^2.1.0", "@ampproject/remapping@^2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d"
integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==
@@ -36,7 +36,28 @@
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.10.tgz#9d92fa81b87542fff50e848ed585b4212c1d34ec"
integrity sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==
"@babel/core@7.20.7", "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0":
"@babel/core@7.21.3":
version "7.21.3"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.3.tgz#cf1c877284a469da5d1ce1d1e53665253fae712e"
integrity sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==
dependencies:
"@ampproject/remapping" "^2.2.0"
"@babel/code-frame" "^7.18.6"
"@babel/generator" "^7.21.3"
"@babel/helper-compilation-targets" "^7.20.7"
"@babel/helper-module-transforms" "^7.21.2"
"@babel/helpers" "^7.21.0"
"@babel/parser" "^7.21.3"
"@babel/template" "^7.20.7"
"@babel/traverse" "^7.21.3"
"@babel/types" "^7.21.3"
convert-source-map "^1.7.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
json5 "^2.2.2"
semver "^6.3.0"
"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0":
version "7.20.7"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.7.tgz#37072f951bd4d28315445f66e0ec9f6ae0c8c35f"
integrity sha512-t1ZjCluspe5DW24bn2Rr1CDb2v9rn/hROtg9a2tmd0+QYf4bsloYfLQzjG4qHPNMhWtKdGC33R5AxGR2Af2cBw==
@@ -66,6 +87,16 @@
"@jridgewell/gen-mapping" "^0.3.2"
jsesc "^2.5.1"
"@babel/generator@^7.21.3":
version "7.21.3"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.3.tgz#232359d0874b392df04045d72ce2fd9bb5045fce"
integrity sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==
dependencies:
"@babel/types" "^7.21.3"
"@jridgewell/gen-mapping" "^0.3.2"
"@jridgewell/trace-mapping" "^0.3.17"
jsesc "^2.5.1"
"@babel/helper-annotate-as-pure@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb"
@@ -145,6 +176,14 @@
"@babel/template" "^7.18.10"
"@babel/types" "^7.19.0"
"@babel/helper-function-name@^7.21.0":
version "7.21.0"
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4"
integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==
dependencies:
"@babel/template" "^7.20.7"
"@babel/types" "^7.21.0"
"@babel/helper-hoist-variables@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678"
@@ -180,6 +219,20 @@
"@babel/traverse" "^7.20.7"
"@babel/types" "^7.20.7"
"@babel/helper-module-transforms@^7.21.2":
version "7.21.2"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz#160caafa4978ac8c00ac66636cb0fa37b024e2d2"
integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==
dependencies:
"@babel/helper-environment-visitor" "^7.18.9"
"@babel/helper-module-imports" "^7.18.6"
"@babel/helper-simple-access" "^7.20.2"
"@babel/helper-split-export-declaration" "^7.18.6"
"@babel/helper-validator-identifier" "^7.19.1"
"@babel/template" "^7.20.7"
"@babel/traverse" "^7.21.2"
"@babel/types" "^7.21.2"
"@babel/helper-optimise-call-expression@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe"
@@ -269,6 +322,15 @@
"@babel/traverse" "^7.20.7"
"@babel/types" "^7.20.7"
"@babel/helpers@^7.21.0":
version "7.21.0"
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e"
integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==
dependencies:
"@babel/template" "^7.20.7"
"@babel/traverse" "^7.21.0"
"@babel/types" "^7.21.0"
"@babel/highlight@^7.0.0", "@babel/highlight@^7.18.6":
version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf"
@@ -278,7 +340,12 @@
chalk "^2.0.0"
js-tokens "^4.0.0"
"@babel/parser@7.20.7", "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7":
"@babel/parser@7.21.3", "@babel/parser@^7.21.3":
version "7.21.3"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.3.tgz#1d285d67a19162ff9daa358d4cb41d50c06220b3"
integrity sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==
"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7":
version "7.20.7"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.7.tgz#66fe23b3c8569220817d5feb8b9dcdc95bb4f71b"
integrity sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==
@@ -929,6 +996,22 @@
debug "^4.1.0"
globals "^11.1.0"
"@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.21.3":
version "7.21.3"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.3.tgz#4747c5e7903d224be71f90788b06798331896f67"
integrity sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==
dependencies:
"@babel/code-frame" "^7.18.6"
"@babel/generator" "^7.21.3"
"@babel/helper-environment-visitor" "^7.18.9"
"@babel/helper-function-name" "^7.21.0"
"@babel/helper-hoist-variables" "^7.18.6"
"@babel/helper-split-export-declaration" "^7.18.6"
"@babel/parser" "^7.21.3"
"@babel/types" "^7.21.3"
debug "^4.1.0"
globals "^11.1.0"
"@babel/types@7.20.7", "@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
version "7.20.7"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f"
@@ -938,6 +1021,15 @@
"@babel/helper-validator-identifier" "^7.19.1"
to-fast-properties "^2.0.0"
"@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.3":
version "7.21.3"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.3.tgz#4865a5357ce40f64e3400b0f3b737dc6d4f64d05"
integrity sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==
dependencies:
"@babel/helper-string-parser" "^7.19.4"
"@babel/helper-validator-identifier" "^7.19.1"
to-fast-properties "^2.0.0"
"@bcoe/v8-coverage@^0.2.3":
version "0.2.3"
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
@@ -1317,6 +1409,18 @@
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.16.10.tgz#0e9c6a5e69c10d96aff2386b7ee9646138c2a831"
integrity sha512-qddWullt3sC1EIpfHvCRBq3H4g3L86DZpD6n8k2XFjFVyp01D++uNbN1hT/JRsHxTbyyemZcpwL5aRlJwc/zFw==
"@eslint-community/eslint-utils@^4.2.0":
version "4.2.0"
resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz#a831e6e468b4b2b5ae42bf658bea015bf10bc518"
integrity sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==
dependencies:
eslint-visitor-keys "^3.3.0"
"@eslint-community/regexpp@^4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.4.0.tgz#3e61c564fcd6b921cb789838631c5ee44df09403"
integrity sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==
"@eslint/eslintrc@^1.4.0":
version "1.4.0"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.0.tgz#8ec64e0df3e7a1971ee1ff5158da87389f167a63"
@@ -1635,7 +1739,7 @@
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
"@jridgewell/trace-mapping@^0.3.9":
"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9":
version "0.3.17"
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985"
integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==
@@ -1839,29 +1943,22 @@
dependencies:
"@types/yargs-parser" "*"
"@typescript-eslint/eslint-plugin@5.36.2":
version "5.36.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.36.2.tgz#6df092a20e0f9ec748b27f293a12cb39d0c1fe4d"
integrity sha512-OwwR8LRwSnI98tdc2z7mJYgY60gf7I9ZfGjN5EjCwwns9bdTuQfAXcsjSB2wSQ/TVNYSGKf4kzVXbNGaZvwiXw==
"@typescript-eslint/eslint-plugin@5.55.0":
version "5.55.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.55.0.tgz#bc2400c3a23305e8c9a9c04aa40933868aaaeb47"
integrity sha512-IZGc50rtbjk+xp5YQoJvmMPmJEYoC53SiKPXyqWfv15XoD2Y5Kju6zN0DwlmaGJp1Iw33JsWJcQ7nw0lGCGjVg==
dependencies:
"@typescript-eslint/scope-manager" "5.36.2"
"@typescript-eslint/type-utils" "5.36.2"
"@typescript-eslint/utils" "5.36.2"
"@eslint-community/regexpp" "^4.4.0"
"@typescript-eslint/scope-manager" "5.55.0"
"@typescript-eslint/type-utils" "5.55.0"
"@typescript-eslint/utils" "5.55.0"
debug "^4.3.4"
functional-red-black-tree "^1.0.1"
grapheme-splitter "^1.0.4"
ignore "^5.2.0"
regexpp "^3.2.0"
natural-compare-lite "^1.4.0"
semver "^7.3.7"
tsutils "^3.21.0"
"@typescript-eslint/scope-manager@5.36.2":
version "5.36.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.36.2.tgz#a75eb588a3879ae659514780831370642505d1cd"
integrity sha512-cNNP51L8SkIFSfce8B1NSUBTJTu2Ts4nWeWbFrdaqjmn9yKrAaJUBHkyTZc0cL06OFHpb+JZq5AUHROS398Orw==
dependencies:
"@typescript-eslint/types" "5.36.2"
"@typescript-eslint/visitor-keys" "5.36.2"
"@typescript-eslint/scope-manager@5.47.0":
version "5.47.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.47.0.tgz#f58144a6b0ff58b996f92172c488813aee9b09df"
@@ -1870,56 +1967,33 @@
"@typescript-eslint/types" "5.47.0"
"@typescript-eslint/visitor-keys" "5.47.0"
"@typescript-eslint/type-utils@5.36.2":
version "5.36.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.36.2.tgz#752373f4babf05e993adf2cd543a763632826391"
integrity sha512-rPQtS5rfijUWLouhy6UmyNquKDPhQjKsaKH0WnY6hl/07lasj8gPaH2UD8xWkePn6SC+jW2i9c2DZVDnL+Dokw==
"@typescript-eslint/scope-manager@5.55.0":
version "5.55.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.55.0.tgz#e863bab4d4183ddce79967fe10ceb6c829791210"
integrity sha512-OK+cIO1ZGhJYNCL//a3ROpsd83psf4dUJ4j7pdNVzd5DmIk+ffkuUIX2vcZQbEW/IR41DYsfJTB19tpCboxQuw==
dependencies:
"@typescript-eslint/typescript-estree" "5.36.2"
"@typescript-eslint/utils" "5.36.2"
"@typescript-eslint/types" "5.55.0"
"@typescript-eslint/visitor-keys" "5.55.0"
"@typescript-eslint/type-utils@5.55.0":
version "5.55.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.55.0.tgz#74bf0233523f874738677bb73cb58094210e01e9"
integrity sha512-ObqxBgHIXj8rBNm0yh8oORFrICcJuZPZTqtAFh0oZQyr5DnAHZWfyw54RwpEEH+fD8suZaI0YxvWu5tYE/WswA==
dependencies:
"@typescript-eslint/typescript-estree" "5.55.0"
"@typescript-eslint/utils" "5.55.0"
debug "^4.3.4"
tsutils "^3.21.0"
"@typescript-eslint/types@5.36.2":
version "5.36.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.36.2.tgz#a5066e500ebcfcee36694186ccc57b955c05faf9"
integrity sha512-9OJSvvwuF1L5eS2EQgFUbECb99F0mwq501w0H0EkYULkhFa19Qq7WFbycdw1PexAc929asupbZcgjVIe6OK/XQ==
"@typescript-eslint/types@5.45.0":
version "5.45.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.45.0.tgz#794760b9037ee4154c09549ef5a96599621109c5"
integrity sha512-QQij+u/vgskA66azc9dCmx+rev79PzX8uDHpsqSjEFtfF2gBUTRCpvYMh2gw2ghkJabNkPlSUCimsyBEQZd1DA==
"@typescript-eslint/types@5.47.0":
version "5.47.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.47.0.tgz#67490def406eaa023dbbd8da42ee0d0c9b5229d3"
integrity sha512-eslFG0Qy8wpGzDdYKu58CEr3WLkjwC5Usa6XbuV89ce/yN5RITLe1O8e+WFEuxnfftHiJImkkOBADj58ahRxSg==
"@typescript-eslint/typescript-estree@5.36.2":
version "5.36.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.36.2.tgz#0c93418b36c53ba0bc34c61fe9405c4d1d8fe560"
integrity sha512-8fyH+RfbKc0mTspfuEjlfqA4YywcwQK2Amcf6TDOwaRLg7Vwdu4bZzyvBZp4bjt1RRjQ5MDnOZahxMrt2l5v9w==
dependencies:
"@typescript-eslint/types" "5.36.2"
"@typescript-eslint/visitor-keys" "5.36.2"
debug "^4.3.4"
globby "^11.1.0"
is-glob "^4.0.3"
semver "^7.3.7"
tsutils "^3.21.0"
"@typescript-eslint/typescript-estree@5.45.0":
version "5.45.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.45.0.tgz#f70a0d646d7f38c0dfd6936a5e171a77f1e5291d"
integrity sha512-maRhLGSzqUpFcZgXxg1qc/+H0bT36lHK4APhp0AEUVrpSwXiRAomm/JGjSG+kNUio5kAa3uekCYu/47cnGn5EQ==
dependencies:
"@typescript-eslint/types" "5.45.0"
"@typescript-eslint/visitor-keys" "5.45.0"
debug "^4.3.4"
globby "^11.1.0"
is-glob "^4.0.3"
semver "^7.3.7"
tsutils "^3.21.0"
"@typescript-eslint/types@5.55.0":
version "5.55.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.55.0.tgz#9830f8d3bcbecf59d12f821e5bc6960baaed41fd"
integrity sha512-M4iRh4AG1ChrOL6Y+mETEKGeDnT7Sparn6fhZ5LtVJF1909D5O4uqK+C5NPbLmpfZ0XIIxCdwzKiijpZUOvOug==
"@typescript-eslint/typescript-estree@5.47.0":
version "5.47.0"
@@ -1934,17 +2008,32 @@
semver "^7.3.7"
tsutils "^3.21.0"
"@typescript-eslint/utils@5.36.2":
version "5.36.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.36.2.tgz#b01a76f0ab244404c7aefc340c5015d5ce6da74c"
integrity sha512-uNcopWonEITX96v9pefk9DC1bWMdkweeSsewJ6GeC7L6j2t0SJywisgkr9wUTtXk90fi2Eljj90HSHm3OGdGRg==
"@typescript-eslint/typescript-estree@5.55.0":
version "5.55.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.55.0.tgz#8db7c8e47ecc03d49b05362b8db6f1345ee7b575"
integrity sha512-I7X4A9ovA8gdpWMpr7b1BN9eEbvlEtWhQvpxp/yogt48fy9Lj3iE3ild/1H3jKBBIYj5YYJmS2+9ystVhC7eaQ==
dependencies:
"@typescript-eslint/types" "5.55.0"
"@typescript-eslint/visitor-keys" "5.55.0"
debug "^4.3.4"
globby "^11.1.0"
is-glob "^4.0.3"
semver "^7.3.7"
tsutils "^3.21.0"
"@typescript-eslint/utils@5.55.0":
version "5.55.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.55.0.tgz#34e97322e7ae5b901e7a870aabb01dad90023341"
integrity sha512-FkW+i2pQKcpDC3AY6DU54yl8Lfl14FVGYDgBTyGKB75cCwV3KpkpTMFi9d9j2WAJ4271LR2HeC5SEWF/CZmmfw==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
"@types/json-schema" "^7.0.9"
"@typescript-eslint/scope-manager" "5.36.2"
"@typescript-eslint/types" "5.36.2"
"@typescript-eslint/typescript-estree" "5.36.2"
"@types/semver" "^7.3.12"
"@typescript-eslint/scope-manager" "5.55.0"
"@typescript-eslint/types" "5.55.0"
"@typescript-eslint/typescript-estree" "5.55.0"
eslint-scope "^5.1.1"
eslint-utils "^3.0.0"
semver "^7.3.7"
"@typescript-eslint/utils@^5.10.0":
version "5.47.0"
@@ -1960,22 +2049,6 @@
eslint-utils "^3.0.0"
semver "^7.3.7"
"@typescript-eslint/visitor-keys@5.36.2":
version "5.36.2"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.36.2.tgz#2f8f78da0a3bad3320d2ac24965791ac39dace5a"
integrity sha512-BtRvSR6dEdrNt7Net2/XDjbYKU5Ml6GqJgVfXT0CxTCJlnIqK7rAGreuWKMT2t8cFUT2Msv5oxw0GMRD7T5J7A==
dependencies:
"@typescript-eslint/types" "5.36.2"
eslint-visitor-keys "^3.3.0"
"@typescript-eslint/visitor-keys@5.45.0":
version "5.45.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.45.0.tgz#e0d160e9e7fdb7f8da697a5b78e7a14a22a70528"
integrity sha512-jc6Eccbn2RtQPr1s7th6jJWQHBHI6GBVQkCHoJFQ5UreaKm59Vxw+ynQUPPY2u2Amquc+7tmEoC2G52ApsGNNg==
dependencies:
"@typescript-eslint/types" "5.45.0"
eslint-visitor-keys "^3.3.0"
"@typescript-eslint/visitor-keys@5.47.0":
version "5.47.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.47.0.tgz#4aca4efbdf6209c154df1f7599852d571b80bb45"
@@ -1984,6 +2057,14 @@
"@typescript-eslint/types" "5.47.0"
eslint-visitor-keys "^3.3.0"
"@typescript-eslint/visitor-keys@5.55.0":
version "5.55.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.55.0.tgz#01ad414fca8367706d76cdb94adf788dc5b664a2"
integrity sha512-q2dlHHwWgirKh1D3acnuApXG+VNXpEY5/AwRxDVuEQpxWaB0jCDe0jFMVMALJ3ebSfuOVE8/rMS+9ZOYGg1GWw==
dependencies:
"@typescript-eslint/types" "5.55.0"
eslint-visitor-keys "^3.3.0"
abab@^2.0.3, abab@^2.0.5:
version "2.0.6"
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
@@ -3569,11 +3650,6 @@ function.prototype.name@^1.1.5:
es-abstract "^1.19.0"
functions-have-names "^1.2.2"
functional-red-black-tree@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==
functions-have-names@^1.2.2:
version "1.2.3"
resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
@@ -4710,6 +4786,11 @@ json5@^1.0.1:
dependencies:
minimist "^1.2.0"
json5@^2.2.2:
version "2.2.3"
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
jsonfile@^6.0.1:
version "6.1.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
@@ -5008,6 +5089,11 @@ n-readlines@1.0.1:
resolved "https://registry.yarnpkg.com/n-readlines/-/n-readlines-1.0.1.tgz#bbb7364d38bc31a170a199f986fcacfa76b95f6e"
integrity sha512-z4SyAIVgMy7CkgsoNw7YVz40v0g4+WWvvqy8+ZdHrCtgevcEO758WQyrYcw3XPxcLxF+//RszTz/rO48nzD0wQ==
natural-compare-lite@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4"
integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==
natural-compare@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
@@ -6425,10 +6511,10 @@ typedarray-to-buffer@^3.1.5:
dependencies:
is-typedarray "^1.0.0"
typescript@4.9.3:
version "4.9.3"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db"
integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==
typescript@5.0.2:
version "5.0.2"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.2.tgz#891e1a90c5189d8506af64b9ef929fca99ba1ee5"
integrity sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==
unbox-primitive@^1.0.2:
version "1.0.2"