@flint.fyi/typescript-language 0.18.1 → 0.18.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/createTypeScriptServerHost.d.ts +1 -1
- package/lib/createTypeScriptServerHost.js +13 -9
- package/lib/language.js +2 -0
- package/lib/orderTypeScriptFilePaths.d.ts +3 -0
- package/lib/orderTypeScriptFilePaths.js +92 -0
- package/lib/package.js +1 -1
- package/lib/types/ast.d.ts +1 -1
- package/package.json +6 -5
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type LinterHost } from "@flint.fyi/core";
|
|
2
2
|
import ts from "typescript";
|
|
3
3
|
export declare function createTypeScriptServerHost(host: LinterHost): ts.server.ServerHost;
|
|
4
4
|
//# sourceMappingURL=createTypeScriptServerHost.d.ts.map
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { commonlyIgnoredPaths } from "@flint.fyi/core";
|
|
1
2
|
import ts from "typescript";
|
|
2
3
|
import { FlintAssertionError, assert } from "@flint.fyi/utils";
|
|
3
|
-
import path from "node:path";
|
|
4
4
|
import fs from "node:fs";
|
|
5
5
|
import timers from "node:timers";
|
|
6
|
+
import { resolve } from "pathe";
|
|
6
7
|
//#region src/createTypeScriptServerHost.ts
|
|
7
8
|
function serverHostMethodNotImplemented(methodName) {
|
|
8
9
|
throw new FlintAssertionError(`ts.ServerHost's method '${methodName}' is not implemented.`);
|
|
@@ -22,13 +23,13 @@ function createTypeScriptServerHost(host) {
|
|
|
22
23
|
serverHostMethodNotImplemented("createDirectory");
|
|
23
24
|
},
|
|
24
25
|
directoryExists(directoryPath) {
|
|
25
|
-
return host.fileTypeSync(
|
|
26
|
+
return host.fileTypeSync(resolve(host.getCurrentDirectory(), directoryPath)) === "directory";
|
|
26
27
|
},
|
|
27
28
|
exit() {
|
|
28
29
|
serverHostMethodNotImplemented("exit");
|
|
29
30
|
},
|
|
30
31
|
fileExists(filePath) {
|
|
31
|
-
return host.fileTypeSync(
|
|
32
|
+
return host.fileTypeSync(resolve(host.getCurrentDirectory(), filePath)) === "file";
|
|
32
33
|
},
|
|
33
34
|
readDirectory(directoryPath, extensions, exclude, include, depth) {
|
|
34
35
|
const originalCwd = process.cwd.bind(process);
|
|
@@ -39,7 +40,7 @@ function createTypeScriptServerHost(host) {
|
|
|
39
40
|
assert(typeof readPath === "string", "ts.sys.readDirectory passed unexpected path to fs.readdirSync");
|
|
40
41
|
try {
|
|
41
42
|
fs.readdirSync = originalReadDirSync;
|
|
42
|
-
return host.readDirectorySync(
|
|
43
|
+
return host.readDirectorySync(resolve(host.getCurrentDirectory(), readPath)).map((dirent) => new DirentCtor(dirent.name, dirent.type === "file" ? UV_DIRENT_TYPE.UV_DIRENT_FILE : UV_DIRENT_TYPE.UV_DIRENT_DIR, readPath));
|
|
43
44
|
} finally {
|
|
44
45
|
fs.readdirSync = patchedReaddirSync;
|
|
45
46
|
}
|
|
@@ -53,20 +54,23 @@ function createTypeScriptServerHost(host) {
|
|
|
53
54
|
}
|
|
54
55
|
},
|
|
55
56
|
readFile(filePath) {
|
|
56
|
-
return host.readFileSync(
|
|
57
|
+
return host.readFileSync(resolve(host.getCurrentDirectory(), filePath));
|
|
57
58
|
},
|
|
58
59
|
setImmediate: timers.setImmediate,
|
|
59
60
|
setTimeout: timers.setTimeout,
|
|
60
61
|
watchDirectory(directoryPath, callback, recursive = false) {
|
|
61
|
-
const watcher = host.watchDirectorySync(
|
|
62
|
+
const watcher = host.watchDirectorySync(resolve(host.getCurrentDirectory(), directoryPath), (filePathAbsolute) => {
|
|
62
63
|
callback(filePathAbsolute);
|
|
63
|
-
}, {
|
|
64
|
+
}, {
|
|
65
|
+
ignoredPaths: commonlyIgnoredPaths,
|
|
66
|
+
recursive
|
|
67
|
+
});
|
|
64
68
|
return { close() {
|
|
65
69
|
watcher[Symbol.dispose]();
|
|
66
70
|
} };
|
|
67
71
|
},
|
|
68
72
|
watchFile(filePath, callback) {
|
|
69
|
-
const watcher = host.watchFileSync(
|
|
73
|
+
const watcher = host.watchFileSync(resolve(host.getCurrentDirectory(), filePath), (event) => {
|
|
70
74
|
let eventKind;
|
|
71
75
|
switch (event) {
|
|
72
76
|
case "changed":
|
|
@@ -80,7 +84,7 @@ function createTypeScriptServerHost(host) {
|
|
|
80
84
|
break;
|
|
81
85
|
}
|
|
82
86
|
callback(filePath, eventKind);
|
|
83
|
-
});
|
|
87
|
+
}, { ignoredPaths: commonlyIgnoredPaths });
|
|
84
88
|
return { close() {
|
|
85
89
|
watcher[Symbol.dispose]();
|
|
86
90
|
} };
|
package/lib/language.js
CHANGED
|
@@ -4,6 +4,7 @@ import { name, version } from "./package.js";
|
|
|
4
4
|
import { createTypeScriptServerHost } from "./createTypeScriptServerHost.js";
|
|
5
5
|
import { getFirstEnumValues } from "./getFirstEnumValues.js";
|
|
6
6
|
import { getTypeScriptFileCacheImpacts } from "./getTypeScriptFileCacheImpacts.js";
|
|
7
|
+
import { orderTypeScriptFilePaths } from "./orderTypeScriptFilePaths.js";
|
|
7
8
|
import { createLanguage } from "@flint.fyi/core";
|
|
8
9
|
import * as ts$1 from "typescript";
|
|
9
10
|
import { assert, nullThrows } from "@flint.fyi/utils";
|
|
@@ -64,6 +65,7 @@ const typescriptLanguage = createLanguage({
|
|
|
64
65
|
if ("__volarServices" in file) return file.__volarServices.getLanguageReports();
|
|
65
66
|
return ts$1.getPreEmitDiagnostics(file.services.program, file.services.sourceFile).map(convertTypeScriptDiagnosticToLanguageReport);
|
|
66
67
|
},
|
|
68
|
+
orderFilePaths: orderTypeScriptFilePaths,
|
|
67
69
|
runFileVisitors(file, options, runtime) {
|
|
68
70
|
if (!runtime.visitors) return;
|
|
69
71
|
if ("__volarServices" in file) {
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { createTypeScriptServerHost } from "./createTypeScriptServerHost.js";
|
|
2
|
+
import ts from "typescript";
|
|
3
|
+
import { normalizePath, pathKey } from "@flint.fyi/utils";
|
|
4
|
+
import { dirname, resolve } from "pathe";
|
|
5
|
+
//#region src/orderTypeScriptFilePaths.ts
|
|
6
|
+
const tsConfigFileName = "tsconfig.json";
|
|
7
|
+
function orderTypeScriptFilePaths(filePaths, host) {
|
|
8
|
+
if (filePaths.length < 2) return [...filePaths];
|
|
9
|
+
const caseSensitiveFS = host.isCaseSensitiveFS();
|
|
10
|
+
const cwd = host.getCurrentDirectory();
|
|
11
|
+
const parseHost = {
|
|
12
|
+
...createTypeScriptServerHost(host),
|
|
13
|
+
onUnRecoverableConfigFileDiagnostic() {}
|
|
14
|
+
};
|
|
15
|
+
const configByDirectory = /* @__PURE__ */ new Map();
|
|
16
|
+
const parsedConfigByPath = /* @__PURE__ */ new Map();
|
|
17
|
+
const configByFile = /* @__PURE__ */ new Map();
|
|
18
|
+
function comparePaths(a, b) {
|
|
19
|
+
return pathKey(a, caseSensitiveFS).localeCompare(pathKey(b, caseSensitiveFS));
|
|
20
|
+
}
|
|
21
|
+
function findConfigFile(directoryPath) {
|
|
22
|
+
const directoryPathNormalized = normalizePath(directoryPath);
|
|
23
|
+
const directoryKey = pathKey(directoryPathNormalized, caseSensitiveFS);
|
|
24
|
+
if (configByDirectory.has(directoryKey)) return configByDirectory.get(directoryKey);
|
|
25
|
+
const configPath = ts.findConfigFile(directoryPathNormalized, (path) => parseHost.fileExists(path), tsConfigFileName);
|
|
26
|
+
const normalizedConfigPath = configPath == null ? void 0 : resolve(cwd, configPath);
|
|
27
|
+
configByDirectory.set(directoryKey, normalizedConfigPath);
|
|
28
|
+
return normalizedConfigPath;
|
|
29
|
+
}
|
|
30
|
+
function getParsedConfig(configPath) {
|
|
31
|
+
const configKey = pathKey(configPath, caseSensitiveFS);
|
|
32
|
+
if (parsedConfigByPath.has(configKey)) return parsedConfigByPath.get(configKey);
|
|
33
|
+
const parsed = ts.getParsedCommandLineOfConfigFile(configPath, {}, parseHost);
|
|
34
|
+
const parsedConfig = parsed == null ? void 0 : {
|
|
35
|
+
fileNames: parsed.fileNames.map((fileName) => resolve(cwd, fileName)),
|
|
36
|
+
references: (parsed.projectReferences ?? []).map((reference) => resolve(cwd, ts.resolveProjectReferencePath(reference))).sort(comparePaths)
|
|
37
|
+
};
|
|
38
|
+
parsedConfigByPath.set(configKey, parsedConfig);
|
|
39
|
+
return parsedConfig;
|
|
40
|
+
}
|
|
41
|
+
function collectConfigsTopologically(configPath) {
|
|
42
|
+
const orderedConfigs = [];
|
|
43
|
+
const seen = /* @__PURE__ */ new Set();
|
|
44
|
+
const visiting = /* @__PURE__ */ new Set();
|
|
45
|
+
function visit(currentConfigPath) {
|
|
46
|
+
const configKey = pathKey(currentConfigPath, caseSensitiveFS);
|
|
47
|
+
if (seen.has(configKey) || visiting.has(configKey)) return;
|
|
48
|
+
visiting.add(configKey);
|
|
49
|
+
for (const reference of getParsedConfig(currentConfigPath)?.references ?? []) visit(reference);
|
|
50
|
+
visiting.delete(configKey);
|
|
51
|
+
seen.add(configKey);
|
|
52
|
+
orderedConfigs.push(currentConfigPath);
|
|
53
|
+
}
|
|
54
|
+
visit(configPath);
|
|
55
|
+
return orderedConfigs;
|
|
56
|
+
}
|
|
57
|
+
const fileInfos = filePaths.map((original) => {
|
|
58
|
+
const absolute = resolve(cwd, original);
|
|
59
|
+
const rootConfig = findConfigFile(dirname(absolute));
|
|
60
|
+
return {
|
|
61
|
+
absolute,
|
|
62
|
+
original,
|
|
63
|
+
rootConfig,
|
|
64
|
+
rootConfigKey: rootConfig == null ? void 0 : pathKey(rootConfig, caseSensitiveFS)
|
|
65
|
+
};
|
|
66
|
+
});
|
|
67
|
+
const rootConfigs = Array.from(new Set(fileInfos.map(({ rootConfig }) => rootConfig).filter((rootConfig) => rootConfig != null))).sort(comparePaths);
|
|
68
|
+
const fileInfoByPath = new Map(fileInfos.map((fileInfo) => [pathKey(fileInfo.absolute, caseSensitiveFS), fileInfo]));
|
|
69
|
+
const configRanks = /* @__PURE__ */ new Map();
|
|
70
|
+
for (const rootConfig of rootConfigs) {
|
|
71
|
+
const rootConfigKey = pathKey(rootConfig, caseSensitiveFS);
|
|
72
|
+
for (const config of collectConfigsTopologically(rootConfig)) {
|
|
73
|
+
const configKey = pathKey(config, caseSensitiveFS);
|
|
74
|
+
if (!configRanks.has(configKey)) configRanks.set(configKey, configRanks.size);
|
|
75
|
+
for (const fileName of getParsedConfig(config)?.fileNames ?? []) {
|
|
76
|
+
const fileInfo = fileInfoByPath.get(pathKey(fileName, caseSensitiveFS));
|
|
77
|
+
if (fileInfo?.rootConfigKey !== rootConfigKey) continue;
|
|
78
|
+
const fileKey = pathKey(fileInfo.absolute, caseSensitiveFS);
|
|
79
|
+
if (!configByFile.has(fileKey)) configByFile.set(fileKey, config);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return fileInfos.toSorted((a, b) => {
|
|
84
|
+
const configA = configByFile.get(pathKey(a.absolute, caseSensitiveFS)) ?? a.rootConfig;
|
|
85
|
+
const configB = configByFile.get(pathKey(b.absolute, caseSensitiveFS)) ?? b.rootConfig;
|
|
86
|
+
return (configA == null ? Number.MAX_SAFE_INTEGER : configRanks.get(pathKey(configA, caseSensitiveFS)) ?? Number.MAX_SAFE_INTEGER) - (configB == null ? Number.MAX_SAFE_INTEGER : configRanks.get(pathKey(configB, caseSensitiveFS)) ?? Number.MAX_SAFE_INTEGER) || comparePaths(a.absolute, b.absolute);
|
|
87
|
+
}).map(({ original }) => original);
|
|
88
|
+
}
|
|
89
|
+
//#endregion
|
|
90
|
+
export { orderTypeScriptFilePaths };
|
|
91
|
+
|
|
92
|
+
//# sourceMappingURL=orderTypeScriptFilePaths.js.map
|
package/lib/package.js
CHANGED
package/lib/types/ast.d.ts
CHANGED
|
@@ -2055,7 +2055,7 @@ interface Token<Kind extends ts.SyntaxKind, Parent extends ts.Node> extends ts.N
|
|
|
2055
2055
|
readonly kind: Kind;
|
|
2056
2056
|
readonly parent: Parent;
|
|
2057
2057
|
}
|
|
2058
|
-
type AnyNode = AnyKeyword | ArrayBindingPattern | ArrayLiteralExpression | ArrayTypeNode | ArrowFunction | AsExpression | AwaitExpression | BigIntKeyword | BigIntLiteral | BinaryExpression | BindingElement | Block | BooleanKeyword | BreakStatement | CallExpression | CallSignatureDeclaration | CaseBlock | CaseClause | CatchClause | ClassDeclaration | ClassExpression | ClassStaticBlockDeclaration | CommaListExpression | ComputedPropertyName | ConditionalExpression | ConditionalTypeNode | ConstructorDeclaration | ConstructorTypeNode | ConstructSignatureDeclaration | ContinueStatement | DebuggerStatement | Decorator | DefaultClause | DeleteExpression | DoStatement | ElementAccessExpression | EmptyStatement | EnumDeclaration | EnumMember | ExportAssignment | ExportDeclaration | ExportSpecifier | ExpressionStatement | ExpressionWithTypeArguments | ExternalModuleReference | FalseLiteral | ForInStatement | ForOfStatement | ForStatement | FunctionDeclaration | FunctionExpression | FunctionTypeNode | GetAccessorDeclaration | HeritageClause | Identifier | IfStatement | ImportAttribute | ImportAttributes | ImportClause | ImportDeclaration | ImportEqualsDeclaration | ImportExpression | ImportSpecifier | ImportTypeNode | IndexedAccessTypeNode | IndexSignatureDeclaration | InferTypeNode | InterfaceDeclaration | IntersectionTypeNode | IntrinsicKeyword | JSDocAllType | JSDocFunctionType | JSDocLink | JSDocLinkCode | JSDocLinkPlain | JSDocMemberName | JSDocNamepathType | JSDocNamespaceDeclaration | JSDocNonNullableType | JSDocNullableType | JSDocOptionalType | JSDocParameterTag | JSDocPropertyTag | JSDocReturnTag | JSDocSignature | JSDocTemplateTag | JSDocText | JSDocTypeExpression | JSDocTypeLiteral | JSDocUnknownType | JSDocVariadicType | JsxAttribute | JsxAttributes | JsxClosingElement | JsxClosingFragment | JsxElement | JsxExpression | JsxFragment | JsxNamespacedName | JsxOpeningElement | JsxOpeningFragment | JsxSelfClosingElement | JsxSpreadAttribute | JsxTagNamePropertyAccess | JsxText | LabeledStatement | LiteralTypeNode | MappedTypeNode | MetaProperty | MethodDeclaration | MethodSignature | MissingDeclaration | ModuleBlock | ModuleDeclaration | NamedExports | NamedImports | NamedTupleMember | NamespaceDeclaration | NamespaceExport | NamespaceExportDeclaration | NamespaceImport | NeverKeyword | NewExpression | NonNullExpression | NoSubstitutionTemplateLiteral | NotEmittedStatement | NotEmittedTypeElement | NullLiteral | NumberKeyword | NumericLiteral | ObjectBindingPattern | ObjectKeyword | ObjectLiteralExpression | OmittedExpression | OptionalTypeNode | ParameterDeclaration | ParenthesizedExpression | ParenthesizedTypeNode | PartiallyEmittedExpression | PostfixUnaryExpression | PrefixUnaryExpression | PrivateIdentifier | PropertyAccessExpression | PropertyAssignment | PropertyDeclaration | PropertySignature | QualifiedName | RegularExpressionLiteral | RestTypeNode | ReturnStatement | SatisfiesExpression | SemicolonClassElement | SetAccessorDeclaration | ShorthandPropertyAssignment | SourceFile | SpreadAssignment | SpreadElement | StringKeyword | StringLiteral | SuperExpression | SwitchStatement | SymbolKeyword | SyntheticExpression | TaggedTemplateExpression | TemplateExpression | TemplateHead | TemplateLiteralTypeNode | TemplateLiteralTypeSpan | TemplateMiddle | TemplateSpan | TemplateTail | ThisExpression | ThisTypeNode | ThrowStatement | TrueLiteral | TryStatement | TupleTypeNode | TypeAliasDeclaration | TypeAssertion | TypeLiteralNode | TypeOfExpression | TypeOperatorNode | TypeParameterDeclaration | TypePredicateNode | TypeQueryNode | TypeReferenceNode | UndefinedKeyword | UnionTypeNode | UnknownKeyword | VariableDeclaration | VariableDeclarationList | VariableStatement | VoidExpression | VoidKeyword | WhileStatement | WithStatement | YieldExpression;
|
|
2058
|
+
type AnyNode = AnyKeyword | ArrayBindingPattern | ArrayLiteralExpression | ArrayTypeNode | ArrowFunction | AsExpression | AwaitExpression | BigIntKeyword | BigIntLiteral | BinaryExpression | BindingElement | Block | BooleanKeyword | BreakStatement | CallExpression | CallSignatureDeclaration | CaseBlock | CaseClause | CatchClause | ClassDeclaration | ClassExpression | ClassStaticBlockDeclaration | CommaListExpression | ComputedPropertyName | ConditionalExpression | ConditionalTypeNode | ConstructorDeclaration | ConstructorTypeNode | ConstructSignatureDeclaration | ContinueStatement | DebuggerStatement | Decorator | DefaultClause | DeleteExpression | DoStatement | ElementAccessExpression | EmptyStatement | EnumDeclaration | EnumMember | ExportAssignment | ExportDeclaration | ExportSpecifier | ExpressionStatement | ExpressionWithTypeArguments | ExternalModuleReference | FalseLiteral | ForInStatement | ForOfStatement | ForStatement | FunctionDeclaration | FunctionExpression | FunctionTypeNode | GetAccessorDeclaration | HeritageClause | Identifier | IfStatement | ImportAttribute | ImportAttributes | ImportClause | ImportDeclaration | ImportEqualsDeclaration | ImportExpression | ImportSpecifier | ImportTypeNode | IndexedAccessTypeNode | IndexSignatureDeclaration | InferTypeNode | InterfaceDeclaration | IntersectionTypeNode | IntrinsicKeyword | JSDocAllType | JSDocFunctionType | JSDocLink | JSDocLinkCode | JSDocLinkPlain | JSDocMemberName | JSDocNamepathType | JSDocNamespaceDeclaration | JSDocNonNullableType | JSDocNullableType | JSDocOptionalType | JSDocParameterTag | JSDocPropertyTag | JSDocReturnTag | JSDocSignature | JSDocTemplateTag | JSDocText | JSDocTypeExpression | JSDocTypeLiteral | JSDocUnknownType | JSDocVariadicType | JsxAttribute | JsxAttributes | JsxClosingElement | JsxClosingFragment | JsxElement | JsxExpression | JsxFragment | JsxNamespacedName | JsxOpeningElement | JsxOpeningFragment | JsxSelfClosingElement | JsxSpreadAttribute | JsxTagNamePropertyAccess | JsxText | LabeledStatement | LiteralTypeNode | MappedTypeNode | MetaProperty | MethodDeclaration | MethodSignature | MissingDeclaration | ModuleBlock | ModuleDeclaration | NamedExports | NamedImports | NamedTupleMember | NamespaceDeclaration | NamespaceExport | NamespaceExportDeclaration | NamespaceImport | NeverKeyword | NewExpression | NonNullExpression | NoSubstitutionTemplateLiteral | NotEmittedStatement | NotEmittedTypeElement | NullLiteral | NullNode | NumberKeyword | NumericLiteral | ObjectBindingPattern | ObjectKeyword | ObjectLiteralExpression | OmittedExpression | OptionalTypeNode | ParameterDeclaration | ParenthesizedExpression | ParenthesizedTypeNode | PartiallyEmittedExpression | PostfixUnaryExpression | PrefixUnaryExpression | PrivateIdentifier | PropertyAccessExpression | PropertyAssignment | PropertyDeclaration | PropertySignature | QualifiedName | RegularExpressionLiteral | RestTypeNode | ReturnStatement | SatisfiesExpression | SemicolonClassElement | SetAccessorDeclaration | ShorthandPropertyAssignment | SourceFile | SpreadAssignment | SpreadElement | StringKeyword | StringLiteral | SuperExpression | SwitchStatement | SymbolKeyword | SyntheticExpression | TaggedTemplateExpression | TemplateExpression | TemplateHead | TemplateLiteralTypeNode | TemplateLiteralTypeSpan | TemplateMiddle | TemplateSpan | TemplateTail | ThisExpression | ThisTypeNode | ThrowStatement | TrueLiteral | TryStatement | TupleTypeNode | TypeAliasDeclaration | TypeAssertion | TypeLiteralNode | TypeOfExpression | TypeOperatorNode | TypeParameterDeclaration | TypePredicateNode | TypeQueryNode | TypeReferenceNode | UndefinedKeyword | UnionTypeNode | UnknownKeyword | VariableDeclaration | VariableDeclarationList | VariableStatement | VoidExpression | VoidKeyword | WhileStatement | WithStatement | YieldExpression;
|
|
2059
2059
|
interface NullNode extends ts.Node {
|
|
2060
2060
|
readonly kind: ts.SyntaxKind.NullKeyword;
|
|
2061
2061
|
readonly parent: NullNode;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flint.fyi/typescript-language",
|
|
3
|
-
"version": "0.18.
|
|
3
|
+
"version": "0.18.2",
|
|
4
4
|
"description": "[Experimental] TypeScript language for Flint.",
|
|
5
5
|
"homepage": "https://flint.fyi",
|
|
6
6
|
"repository": {
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
},
|
|
11
11
|
"license": "MIT",
|
|
12
12
|
"author": {
|
|
13
|
-
"name": "
|
|
14
|
-
"
|
|
13
|
+
"name": "Flint Team",
|
|
14
|
+
"url": "https://flint.fyi/team"
|
|
15
15
|
},
|
|
16
16
|
"sideEffects": true,
|
|
17
17
|
"type": "module",
|
|
@@ -24,10 +24,11 @@
|
|
|
24
24
|
],
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@typescript-eslint/project-service": "^8.53.0",
|
|
27
|
-
"debug-for-file": "^0.
|
|
27
|
+
"debug-for-file": "^0.4.0",
|
|
28
|
+
"pathe": "^2.0.3",
|
|
28
29
|
"ts-api-utils": "^2.4.0",
|
|
29
30
|
"typescript": "^5.9.0 || ^6.0.0",
|
|
30
|
-
"@flint.fyi/core": "^0.
|
|
31
|
+
"@flint.fyi/core": "^0.22.0",
|
|
31
32
|
"@flint.fyi/utils": "^0.14.1"
|
|
32
33
|
},
|
|
33
34
|
"devDependencies": {
|