@flint.fyi/typescript-language 0.18.0 → 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.
@@ -1,4 +1,4 @@
1
- import type { LinterHost } from "@flint.fyi/core";
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(path.resolve(host.getCurrentDirectory(), directoryPath)) === "directory";
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(path.resolve(host.getCurrentDirectory(), filePath)) === "file";
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(path.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
+ 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(path.resolve(host.getCurrentDirectory(), filePath));
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(path.resolve(host.getCurrentDirectory(), directoryPath), (filePathAbsolute) => {
62
+ const watcher = host.watchDirectorySync(resolve(host.getCurrentDirectory(), directoryPath), (filePathAbsolute) => {
62
63
  callback(filePathAbsolute);
63
- }, { recursive });
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(path.resolve(host.getCurrentDirectory(), filePath), (event) => {
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
  } };
@@ -1,5 +1,6 @@
1
1
  import { normalizeRange } from "../normalizeRange.js";
2
2
  import { DirectivesCollector } from "@flint.fyi/core";
3
+ import ts from "typescript";
3
4
  import { nullThrows } from "@flint.fyi/utils";
4
5
  import * as tsutils from "ts-api-utils";
5
6
  //#region src/directives/parseDirectivesFromTypeScriptFile.ts
@@ -9,13 +10,14 @@ function extractDirectivesFromTypeScriptFile(sourceFile) {
9
10
  const commentText = fullText.slice(sourceRange.pos, sourceRange.end);
10
11
  const match = /^\/\/\s*flint-(\S+)(?:\s+(.+))?/.exec(commentText);
11
12
  if (!match) return;
12
- const range = normalizeRange({
13
+ let range = normalizeRange({
13
14
  begin: sourceRange.pos,
14
15
  end: sourceRange.end
15
16
  }, sourceFile);
16
17
  const matches = match.slice(1);
17
18
  const type = nullThrows(matches[0], "First match is expected to be present by the regex match");
18
19
  const selection = matches[1] ?? "";
20
+ if (type === "disable-next-line") range = extendRangeToNextCodeLine(sourceFile, range);
19
21
  directives.push({
20
22
  range,
21
23
  selection,
@@ -29,6 +31,35 @@ function parseDirectivesFromTypeScriptFile(sourceFile) {
29
31
  for (const { range, selection, type } of extractDirectivesFromTypeScriptFile(sourceFile)) collector.add(range, selection, type);
30
32
  return collector.collect();
31
33
  }
34
+ function computeNextCodeLine(sourceFile, directiveLine) {
35
+ const lineStarts = sourceFile.getLineStarts();
36
+ const nextLineStart = lineStarts[directiveLine + 1];
37
+ if (nextLineStart === void 0) return;
38
+ const scanner = ts.createScanner(sourceFile.languageVersion, true, sourceFile.languageVariant, sourceFile.text, void 0, nextLineStart);
39
+ if (scanner.scan() === ts.SyntaxKind.EndOfFileToken) return;
40
+ const tokenPos = scanner.getTokenStart();
41
+ const codeLine = sourceFile.getLineAndCharacterOfPosition(tokenPos).line;
42
+ for (let line = directiveLine + 1; line < codeLine; line++) {
43
+ const start = lineStarts[line];
44
+ const end = lineStarts[line + 1] ?? sourceFile.text.length;
45
+ if (sourceFile.text.slice(start, end).trim() === "") return;
46
+ }
47
+ return codeLine;
48
+ }
49
+ function extendRangeToNextCodeLine(sourceFile, range) {
50
+ const codeLine = computeNextCodeLine(sourceFile, range.begin.line);
51
+ if (codeLine === void 0 || codeLine <= range.end.line + 1) return range;
52
+ const endPosition = nullThrows(sourceFile.getLineStarts()[codeLine], "Code line start is expected to be present by the computed code line") - 1;
53
+ const { character, line } = sourceFile.getLineAndCharacterOfPosition(endPosition);
54
+ return {
55
+ ...range,
56
+ end: {
57
+ column: character,
58
+ line,
59
+ raw: endPosition
60
+ }
61
+ };
62
+ }
32
63
  //#endregion
33
64
  export { extractDirectivesFromTypeScriptFile, parseDirectivesFromTypeScriptFile };
34
65
 
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,3 @@
1
+ import type { LinterHost } from "@flint.fyi/core";
2
+ export declare function orderTypeScriptFilePaths(filePaths: readonly string[], host: LinterHost): string[];
3
+ //# sourceMappingURL=orderTypeScriptFilePaths.d.ts.map
@@ -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
@@ -1,6 +1,6 @@
1
1
  //#region package.json
2
2
  var name = "@flint.fyi/typescript-language";
3
- var version = "0.18.0";
3
+ var version = "0.18.2";
4
4
  //#endregion
5
5
  export { name, version };
6
6
 
@@ -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.0",
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": "JoshuaKGoldberg",
14
- "email": "npm@joshuakgoldberg.com"
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.3.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.21.0",
31
+ "@flint.fyi/core": "^0.22.0",
31
32
  "@flint.fyi/utils": "^0.14.1"
32
33
  },
33
34
  "devDependencies": {