corsa-oxlint 0.3.0 → 0.3.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/dist/context.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  import { ContextWithParserOptions, ResolvedProjectConfig, TypeAwareParserOptions } from "./types.js";
2
2
 
3
3
  //#region src/bindings/nodejs/typescript_oxlint/ts/context.d.ts
4
- declare function defaultTsgoExecutable(rootDir: string, platform?: NodeJS.Platform): string;
4
+ declare function defaultCorsaExecutable(rootDir: string, platform?: NodeJS.Platform): string;
5
+ declare const defaultTsgoExecutable: typeof defaultCorsaExecutable;
5
6
  declare function resolveProjectConfig(context: ContextWithParserOptions): ResolvedProjectConfig;
6
7
  /**
7
8
  * Resolves the type-aware parser options visible to a rule.
@@ -14,11 +15,11 @@ declare function resolveProjectConfig(context: ContextWithParserOptions): Resolv
14
15
  * @example
15
16
  * ```ts
16
17
  * const parserOptions = resolveTypeAwareParserOptions(context);
17
- * parserOptions.tsgo?.mode;
18
+ * parserOptions.corsa?.mode;
18
19
  * ```
19
20
  */
20
21
  declare function resolveTypeAwareParserOptions(context: ContextWithParserOptions): TypeAwareParserOptions;
21
22
  declare function mergeTypeAwareParserOptions(base: TypeAwareParserOptions | undefined, override: TypeAwareParserOptions | undefined): TypeAwareParserOptions;
22
23
  //#endregion
23
- export { defaultTsgoExecutable, mergeTypeAwareParserOptions, resolveProjectConfig, resolveTypeAwareParserOptions };
24
+ export { defaultCorsaExecutable, defaultTsgoExecutable, mergeTypeAwareParserOptions, resolveProjectConfig, resolveTypeAwareParserOptions };
24
25
  //# sourceMappingURL=context.d.ts.map
package/dist/context.js CHANGED
@@ -13,9 +13,10 @@ const DEFAULT_TS_CONFIG = { compilerOptions: {
13
13
  target: "es2022",
14
14
  strict: true
15
15
  } };
16
- function defaultTsgoExecutable(rootDir, platform = process.platform) {
16
+ function defaultCorsaExecutable(rootDir, platform = process.platform) {
17
17
  return resolve(rootDir, platform === "win32" ? ".cache/tsgo.exe" : ".cache/tsgo");
18
18
  }
19
+ const defaultTsgoExecutable = defaultCorsaExecutable;
19
20
  function resolveProjectConfig(context) {
20
21
  const filename = resolve(context.filename);
21
22
  const parserOptions = resolveTypeAwareParserOptions(context);
@@ -41,18 +42,19 @@ function resolveProjectConfig(context) {
41
42
  * @example
42
43
  * ```ts
43
44
  * const parserOptions = resolveTypeAwareParserOptions(context);
44
- * parserOptions.tsgo?.mode;
45
+ * parserOptions.corsa?.mode;
45
46
  * ```
46
47
  */
47
48
  function resolveTypeAwareParserOptions(context) {
48
49
  return mergeTypeAwareParserOptions(resolveSettingsParserOptions(context.settings?.typescriptOxlint), mergeTypeAwareParserOptions(context.parserOptions, context.languageOptions?.parserOptions));
49
50
  }
50
51
  function resolveRuntimeOptions(rootDir, parserOptions) {
52
+ const runtime = parserOptions.corsa ?? parserOptions.tsgo;
51
53
  return {
52
- executable: resolve(parserOptions.tsgo?.executable ?? process.env.TSGO_EXECUTABLE ?? defaultTsgoExecutable(rootDir)),
53
- cwd: resolve(parserOptions.tsgo?.cwd ?? rootDir),
54
- mode: parserOptions.tsgo?.mode ?? "msgpack",
55
- cacheLifetimeMs: parserOptions.tsgo?.cacheLifetimeMs ?? DEFAULT_CACHE_LIFETIME_MS
54
+ executable: resolve(runtime?.executable ?? process.env.CORSA_EXECUTABLE ?? process.env.TSGO_EXECUTABLE ?? defaultCorsaExecutable(rootDir)),
55
+ cwd: resolve(runtime?.cwd ?? rootDir),
56
+ mode: runtime?.mode ?? "msgpack",
57
+ cacheLifetimeMs: runtime?.cacheLifetimeMs ?? DEFAULT_CACHE_LIFETIME_MS
56
58
  };
57
59
  }
58
60
  function resolveExplicitProject(rootDir, parserOptions) {
@@ -103,18 +105,31 @@ function resolveSettingsParserOptions(settings) {
103
105
  return mergeTypeAwareParserOptions(inline, parserOptions);
104
106
  }
105
107
  function mergeTypeAwareParserOptions(base, override) {
106
- if (!base) return override ?? {};
107
- if (!override) return base;
108
+ if (!base) return normalizeTypeAwareParserOptions(override ?? {});
109
+ if (!override) return normalizeTypeAwareParserOptions(base);
110
+ const runtime = {
111
+ ...base.corsa ?? base.tsgo,
112
+ ...override.corsa ?? override.tsgo
113
+ };
108
114
  return {
109
115
  ...base,
110
116
  ...override,
111
117
  project: override.project ?? base.project,
112
118
  projectService: mergeProjectService(base.projectService, override.projectService),
113
119
  tsconfigRootDir: override.tsconfigRootDir ?? base.tsconfigRootDir,
114
- tsgo: {
115
- ...base.tsgo,
116
- ...override.tsgo
117
- }
120
+ ...Object.keys(runtime).length > 0 ? {
121
+ corsa: runtime,
122
+ tsgo: runtime
123
+ } : {}
124
+ };
125
+ }
126
+ function normalizeTypeAwareParserOptions(options) {
127
+ const runtime = options.corsa ?? options.tsgo;
128
+ if (!runtime) return options;
129
+ return {
130
+ ...options,
131
+ corsa: runtime,
132
+ tsgo: runtime
118
133
  };
119
134
  }
120
135
  function mergeProjectService(base, override) {
@@ -129,6 +144,6 @@ function mergeProjectService(base, override) {
129
144
  };
130
145
  }
131
146
  //#endregion
132
- export { defaultTsgoExecutable, mergeTypeAwareParserOptions, resolveProjectConfig, resolveTypeAwareParserOptions };
147
+ export { defaultCorsaExecutable, defaultTsgoExecutable, mergeTypeAwareParserOptions, resolveProjectConfig, resolveTypeAwareParserOptions };
133
148
 
134
149
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":[],"sources":["../ts/context.ts"],"sourcesContent":["import { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\n\nimport type {\n ContextWithParserOptions,\n ProjectServiceOptions,\n ResolvedProjectConfig,\n ResolvedRuntimeOptions,\n TypeAwareParserOptions,\n TypescriptOxlintSettings,\n} from \"./types\";\n\nconst DEFAULT_CACHE_LIFETIME_MS = 250;\nconst DEFAULT_PROJECT_PATTERNS = [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"];\nconst DEFAULT_TS_CONFIG = {\n compilerOptions: {\n module: \"esnext\",\n target: \"es2022\",\n strict: true,\n },\n};\n\nexport function defaultTsgoExecutable(rootDir: string, platform = process.platform): string {\n return resolve(rootDir, platform === \"win32\" ? \".cache/tsgo.exe\" : \".cache/tsgo\");\n}\n\nexport function resolveProjectConfig(context: ContextWithParserOptions): ResolvedProjectConfig {\n const filename = resolve(context.filename);\n const parserOptions = resolveTypeAwareParserOptions(context);\n const rootDir = resolve(parserOptions.tsconfigRootDir ?? context.cwd);\n const runtime = resolveRuntimeOptions(rootDir, parserOptions);\n const configPath =\n resolveExplicitProject(rootDir, parserOptions) ??\n discoverTsconfig(filename, rootDir) ??\n resolveDefaultProject(rootDir, filename, parserOptions.projectService);\n if (!configPath) {\n throw new Error(`corsa-oxlint could not resolve a tsconfig for ${filename}`);\n }\n return { filename, rootDir, configPath, runtime };\n}\n\n/**\n * Resolves the type-aware parser options visible to a rule.\n *\n * Oxlint exposes a fixed `context.languageOptions.parserOptions` object at\n * runtime, so `corsa-oxlint` stores its richer configuration under\n * `settings.typescriptOxlint` and rehydrates the rule-facing parser options\n * shape from there.\n *\n * @example\n * ```ts\n * const parserOptions = resolveTypeAwareParserOptions(context);\n * parserOptions.tsgo?.mode;\n * ```\n */\nexport function resolveTypeAwareParserOptions(\n context: ContextWithParserOptions,\n): TypeAwareParserOptions {\n return mergeTypeAwareParserOptions(\n resolveSettingsParserOptions(context.settings?.typescriptOxlint),\n mergeTypeAwareParserOptions(context.parserOptions, context.languageOptions?.parserOptions),\n );\n}\n\nfunction resolveRuntimeOptions(\n rootDir: string,\n parserOptions: TypeAwareParserOptions,\n): ResolvedRuntimeOptions {\n return {\n executable: resolve(\n parserOptions.tsgo?.executable ??\n process.env.TSGO_EXECUTABLE ??\n defaultTsgoExecutable(rootDir),\n ),\n cwd: resolve(parserOptions.tsgo?.cwd ?? rootDir),\n mode: parserOptions.tsgo?.mode ?? \"msgpack\",\n cacheLifetimeMs: parserOptions.tsgo?.cacheLifetimeMs ?? DEFAULT_CACHE_LIFETIME_MS,\n };\n}\n\nfunction resolveExplicitProject(\n rootDir: string,\n parserOptions: TypeAwareParserOptions,\n): string | undefined {\n const projects = asArray(parserOptions.project).map((project) => {\n return resolve(rootDir, project);\n });\n return projects.find(existsSync);\n}\n\nfunction discoverTsconfig(filename: string, rootDir: string): string | undefined {\n let current = dirname(filename);\n const boundary = resolve(rootDir);\n while (current.startsWith(boundary)) {\n const candidate = resolve(current, \"tsconfig.json\");\n if (existsSync(candidate)) {\n return candidate;\n }\n const parent = dirname(current);\n if (parent === current) {\n break;\n }\n current = parent;\n }\n return undefined;\n}\n\nfunction resolveDefaultProject(\n rootDir: string,\n filename: string,\n projectService: boolean | ProjectServiceOptions | undefined,\n): string | undefined {\n if (!projectService) {\n return undefined;\n }\n if (projectService !== true && projectService.defaultProject) {\n return resolve(rootDir, projectService.defaultProject);\n }\n if (!matchesDefaultProject(filename, projectService as true | ProjectServiceOptions)) {\n return undefined;\n }\n const id = Buffer.from(filename).toString(\"hex\").slice(0, 24);\n const cacheDir = resolve(rootDir, \".cache/typescript_oxlint/default\");\n const configPath = resolve(cacheDir, `${id}.tsconfig.json`);\n if (!existsSync(configPath)) {\n mkdirSync(cacheDir, { recursive: true });\n writeFileSync(\n configPath,\n JSON.stringify(\n {\n ...DEFAULT_TS_CONFIG,\n files: [filename],\n },\n null,\n 2,\n ),\n );\n }\n return configPath;\n}\n\nfunction matchesDefaultProject(\n filename: string,\n projectService: true | ProjectServiceOptions,\n): boolean {\n const patterns =\n (projectService === true ? undefined : projectService.allowDefaultProject) ??\n DEFAULT_PROJECT_PATTERNS;\n return patterns.some((pattern: string) => globMatch(filename, pattern));\n}\n\nfunction globMatch(value: string, pattern: string): boolean {\n const escaped = pattern.replaceAll(\".\", \"\\\\.\").replaceAll(\"*\", \".*\");\n return new RegExp(`${escaped}$`).test(value);\n}\n\nfunction asArray(value: string | string[] | undefined): string[] {\n return value ? (Array.isArray(value) ? value : [value]) : [];\n}\n\nfunction resolveSettingsParserOptions(\n settings: TypescriptOxlintSettings | undefined,\n): TypeAwareParserOptions {\n if (!settings) {\n return {};\n }\n const { parserOptions, ...inline } = settings;\n return mergeTypeAwareParserOptions(inline, parserOptions);\n}\n\nexport function mergeTypeAwareParserOptions(\n base: TypeAwareParserOptions | undefined,\n override: TypeAwareParserOptions | undefined,\n): TypeAwareParserOptions {\n if (!base) {\n return override ?? {};\n }\n if (!override) {\n return base;\n }\n return {\n ...base,\n ...override,\n project: override.project ?? base.project,\n projectService: mergeProjectService(base.projectService, override.projectService),\n tsconfigRootDir: override.tsconfigRootDir ?? base.tsconfigRootDir,\n tsgo: {\n ...base.tsgo,\n ...override.tsgo,\n },\n };\n}\n\nfunction mergeProjectService(\n base: boolean | ProjectServiceOptions | undefined,\n override: boolean | ProjectServiceOptions | undefined,\n): boolean | ProjectServiceOptions | undefined {\n if (override === undefined) {\n return base;\n }\n if (typeof override === \"boolean\") {\n return override;\n }\n if (base === undefined || typeof base === \"boolean\") {\n return override;\n }\n return {\n ...base,\n ...override,\n allowDefaultProject: override.allowDefaultProject ?? base.allowDefaultProject,\n defaultProject: override.defaultProject ?? base.defaultProject,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"context.js","names":[],"sources":["../ts/context.ts"],"sourcesContent":["import { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\n\nimport type {\n ContextWithParserOptions,\n ProjectServiceOptions,\n ResolvedProjectConfig,\n ResolvedRuntimeOptions,\n TypeAwareParserOptions,\n TypescriptOxlintSettings,\n} from \"./types\";\n\nconst DEFAULT_CACHE_LIFETIME_MS = 250;\nconst DEFAULT_PROJECT_PATTERNS = [\"*.ts\", \"*.tsx\", \"*.js\", \"*.jsx\"];\nconst DEFAULT_TS_CONFIG = {\n compilerOptions: {\n module: \"esnext\",\n target: \"es2022\",\n strict: true,\n },\n};\n\nexport function defaultCorsaExecutable(rootDir: string, platform = process.platform): string {\n return resolve(rootDir, platform === \"win32\" ? \".cache/tsgo.exe\" : \".cache/tsgo\");\n}\n\nexport const defaultTsgoExecutable = defaultCorsaExecutable;\n\nexport function resolveProjectConfig(context: ContextWithParserOptions): ResolvedProjectConfig {\n const filename = resolve(context.filename);\n const parserOptions = resolveTypeAwareParserOptions(context);\n const rootDir = resolve(parserOptions.tsconfigRootDir ?? context.cwd);\n const runtime = resolveRuntimeOptions(rootDir, parserOptions);\n const configPath =\n resolveExplicitProject(rootDir, parserOptions) ??\n discoverTsconfig(filename, rootDir) ??\n resolveDefaultProject(rootDir, filename, parserOptions.projectService);\n if (!configPath) {\n throw new Error(`corsa-oxlint could not resolve a tsconfig for ${filename}`);\n }\n return { filename, rootDir, configPath, runtime };\n}\n\n/**\n * Resolves the type-aware parser options visible to a rule.\n *\n * Oxlint exposes a fixed `context.languageOptions.parserOptions` object at\n * runtime, so `corsa-oxlint` stores its richer configuration under\n * `settings.typescriptOxlint` and rehydrates the rule-facing parser options\n * shape from there.\n *\n * @example\n * ```ts\n * const parserOptions = resolveTypeAwareParserOptions(context);\n * parserOptions.corsa?.mode;\n * ```\n */\nexport function resolveTypeAwareParserOptions(\n context: ContextWithParserOptions,\n): TypeAwareParserOptions {\n return mergeTypeAwareParserOptions(\n resolveSettingsParserOptions(context.settings?.typescriptOxlint),\n mergeTypeAwareParserOptions(context.parserOptions, context.languageOptions?.parserOptions),\n );\n}\n\nfunction resolveRuntimeOptions(\n rootDir: string,\n parserOptions: TypeAwareParserOptions,\n): ResolvedRuntimeOptions {\n const runtime = parserOptions.corsa ?? parserOptions.tsgo;\n return {\n executable: resolve(\n runtime?.executable ??\n process.env.CORSA_EXECUTABLE ??\n process.env.TSGO_EXECUTABLE ??\n defaultCorsaExecutable(rootDir),\n ),\n cwd: resolve(runtime?.cwd ?? rootDir),\n mode: runtime?.mode ?? \"msgpack\",\n cacheLifetimeMs: runtime?.cacheLifetimeMs ?? DEFAULT_CACHE_LIFETIME_MS,\n };\n}\n\nfunction resolveExplicitProject(\n rootDir: string,\n parserOptions: TypeAwareParserOptions,\n): string | undefined {\n const projects = asArray(parserOptions.project).map((project) => {\n return resolve(rootDir, project);\n });\n return projects.find(existsSync);\n}\n\nfunction discoverTsconfig(filename: string, rootDir: string): string | undefined {\n let current = dirname(filename);\n const boundary = resolve(rootDir);\n while (current.startsWith(boundary)) {\n const candidate = resolve(current, \"tsconfig.json\");\n if (existsSync(candidate)) {\n return candidate;\n }\n const parent = dirname(current);\n if (parent === current) {\n break;\n }\n current = parent;\n }\n return undefined;\n}\n\nfunction resolveDefaultProject(\n rootDir: string,\n filename: string,\n projectService: boolean | ProjectServiceOptions | undefined,\n): string | undefined {\n if (!projectService) {\n return undefined;\n }\n if (projectService !== true && projectService.defaultProject) {\n return resolve(rootDir, projectService.defaultProject);\n }\n if (!matchesDefaultProject(filename, projectService as true | ProjectServiceOptions)) {\n return undefined;\n }\n const id = Buffer.from(filename).toString(\"hex\").slice(0, 24);\n const cacheDir = resolve(rootDir, \".cache/typescript_oxlint/default\");\n const configPath = resolve(cacheDir, `${id}.tsconfig.json`);\n if (!existsSync(configPath)) {\n mkdirSync(cacheDir, { recursive: true });\n writeFileSync(\n configPath,\n JSON.stringify(\n {\n ...DEFAULT_TS_CONFIG,\n files: [filename],\n },\n null,\n 2,\n ),\n );\n }\n return configPath;\n}\n\nfunction matchesDefaultProject(\n filename: string,\n projectService: true | ProjectServiceOptions,\n): boolean {\n const patterns =\n (projectService === true ? undefined : projectService.allowDefaultProject) ??\n DEFAULT_PROJECT_PATTERNS;\n return patterns.some((pattern: string) => globMatch(filename, pattern));\n}\n\nfunction globMatch(value: string, pattern: string): boolean {\n const escaped = pattern.replaceAll(\".\", \"\\\\.\").replaceAll(\"*\", \".*\");\n return new RegExp(`${escaped}$`).test(value);\n}\n\nfunction asArray(value: string | string[] | undefined): string[] {\n return value ? (Array.isArray(value) ? value : [value]) : [];\n}\n\nfunction resolveSettingsParserOptions(\n settings: TypescriptOxlintSettings | undefined,\n): TypeAwareParserOptions {\n if (!settings) {\n return {};\n }\n const { parserOptions, ...inline } = settings;\n return mergeTypeAwareParserOptions(inline, parserOptions);\n}\n\nexport function mergeTypeAwareParserOptions(\n base: TypeAwareParserOptions | undefined,\n override: TypeAwareParserOptions | undefined,\n): TypeAwareParserOptions {\n if (!base) {\n return normalizeTypeAwareParserOptions(override ?? {});\n }\n if (!override) {\n return normalizeTypeAwareParserOptions(base);\n }\n const runtime = {\n ...(base.corsa ?? base.tsgo),\n ...(override.corsa ?? override.tsgo),\n };\n return {\n ...base,\n ...override,\n project: override.project ?? base.project,\n projectService: mergeProjectService(base.projectService, override.projectService),\n tsconfigRootDir: override.tsconfigRootDir ?? base.tsconfigRootDir,\n ...(Object.keys(runtime).length > 0 ? { corsa: runtime, tsgo: runtime } : {}),\n };\n}\n\nfunction normalizeTypeAwareParserOptions(options: TypeAwareParserOptions): TypeAwareParserOptions {\n const runtime = options.corsa ?? options.tsgo;\n if (!runtime) {\n return options;\n }\n return {\n ...options,\n corsa: runtime,\n tsgo: runtime,\n };\n}\n\nfunction mergeProjectService(\n base: boolean | ProjectServiceOptions | undefined,\n override: boolean | ProjectServiceOptions | undefined,\n): boolean | ProjectServiceOptions | undefined {\n if (override === undefined) {\n return base;\n }\n if (typeof override === \"boolean\") {\n return override;\n }\n if (base === undefined || typeof base === \"boolean\") {\n return override;\n }\n return {\n ...base,\n ...override,\n allowDefaultProject: override.allowDefaultProject ?? base.allowDefaultProject,\n defaultProject: override.defaultProject ?? base.defaultProject,\n };\n}\n"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { ast_utils_d_exports } from "./ast_utils.js";
2
- import { ContextWithParserOptions, ParserServices, ParserServicesWithTypeInformation, ProjectServiceOptions, TsgoNode, TsgoProgramShape, TsgoSignature, TsgoSymbol, TsgoType, TsgoTypeCheckerShape, TypeAwareParserOptions } from "./types.js";
2
+ import { ContextWithParserOptions, CorsaNode, CorsaProgramShape, CorsaRuntimeOptions, CorsaSignature, CorsaSymbol, CorsaType, CorsaTypeCheckerShape, ParserServices, ParserServicesWithTypeInformation, ProjectServiceOptions, TsgoNode, TsgoProgramShape, TsgoSignature, TsgoSymbol, TsgoType, TsgoTypeCheckerShape, TypeAwareParserOptions } from "./types.js";
3
3
  import { AST_NODE_TYPES, AST_TOKEN_TYPES, TSESTree } from "./compat.js";
4
4
  import { json_schema_d_exports } from "./json_schema.js";
5
5
  import { oxlintCompat, oxlint_compat_d_exports } from "./oxlint_compat.js";
@@ -9,4 +9,4 @@ import { OxlintUtils, RuleCreator } from "./oxlint_utils.js";
9
9
  import { compatPlugin, definePlugin, defineRule } from "./plugin.js";
10
10
  import { RuleTester } from "./rule_tester.js";
11
11
  import { index_d_exports } from "./rules/index.js";
12
- export { ast_utils_d_exports as ASTUtils, AST_NODE_TYPES, AST_TOKEN_TYPES, type ContextWithParserOptions, json_schema_d_exports as JSONSchema, oxlint_compat_d_exports as OxlintCompat, OxlintUtils, type ParserServices, type ParserServicesWithTypeInformation, type ProjectServiceOptions, RuleCreator, RuleTester, TSESTree, type TsgoNode, type TsgoProgramShape, type TsgoSignature, type TsgoSymbol, type TsgoType, type TsgoTypeCheckerShape, type TypeAwareParserOptions, utils_d_exports as Utils, compatPlugin, definePlugin, defineRule, getParserServices, oxlintCompat, index_d_exports as rules };
12
+ export { ast_utils_d_exports as ASTUtils, AST_NODE_TYPES, AST_TOKEN_TYPES, type ContextWithParserOptions, type CorsaNode, type CorsaProgramShape, type CorsaRuntimeOptions, type CorsaSignature, type CorsaSymbol, type CorsaType, type CorsaTypeCheckerShape, json_schema_d_exports as JSONSchema, oxlint_compat_d_exports as OxlintCompat, OxlintUtils, type ParserServices, type ParserServicesWithTypeInformation, type ProjectServiceOptions, RuleCreator, RuleTester, TSESTree, type TsgoNode, type TsgoProgramShape, type TsgoSignature, type TsgoSymbol, type TsgoType, type TsgoTypeCheckerShape, type TypeAwareParserOptions, utils_d_exports as Utils, compatPlugin, definePlugin, defineRule, getParserServices, oxlintCompat, index_d_exports as rules };
package/dist/types.d.ts CHANGED
@@ -2,7 +2,7 @@ import { ApiMode, ConfigResponse, ProjectResponse, TypeResponse } from "@corsa-b
2
2
  import { Context, Node, SourceCode } from "@oxlint/plugins";
3
3
 
4
4
  //#region src/bindings/nodejs/typescript_oxlint/ts/types.d.ts
5
- interface TsgoRuntimeOptions {
5
+ interface CorsaRuntimeOptions {
6
6
  executable?: string;
7
7
  cwd?: string;
8
8
  mode?: ApiMode;
@@ -12,6 +12,7 @@ interface TsgoRuntimeOptions {
12
12
  allowUnstableUpstreamCalls?: boolean;
13
13
  cacheLifetimeMs?: number;
14
14
  }
15
+ type TsgoRuntimeOptions = CorsaRuntimeOptions;
15
16
  interface ProjectServiceOptions {
16
17
  allowDefaultProject?: string[];
17
18
  defaultProject?: string;
@@ -20,6 +21,7 @@ interface TypeAwareParserOptions {
20
21
  project?: string | string[];
21
22
  projectService?: boolean | ProjectServiceOptions;
22
23
  tsconfigRootDir?: string;
24
+ corsa?: CorsaRuntimeOptions;
23
25
  tsgo?: TsgoRuntimeOptions;
24
26
  }
25
27
  interface TypescriptOxlintSettings extends TypeAwareParserOptions {
@@ -131,6 +133,14 @@ interface SessionProjectState {
131
133
  readonly project: ProjectResponse;
132
134
  readonly snapshot: string;
133
135
  }
136
+ type CorsaNode = TsgoNode;
137
+ type CorsaProgramShape = TsgoProgramShape;
138
+ type CorsaRuntimeShape = CorsaRuntimeOptions;
139
+ type CorsaSignature = TsgoSignature;
140
+ type CorsaSymbol = TsgoSymbol;
141
+ type CorsaType = TsgoType;
142
+ type CorsaTypeCheckerShape = TsgoTypeCheckerShape;
143
+ type CorsaTypePredicate = TsgoTypePredicate;
134
144
  //#endregion
135
- export { ContextWithParserOptions, ParserServices, ParserServicesWithTypeInformation, type ProjectResponse, ProjectServiceOptions, ResolvedProjectConfig, ResolvedRuntimeOptions, SessionProjectState, TsgoNode, TsgoProgramShape, TsgoRuntimeOptions, TsgoSignature, TsgoSymbol, TsgoType, TsgoTypeCheckerShape, TsgoTypePredicate, TypeAwareParserOptions, TypescriptOxlintSettings };
145
+ export { ContextWithParserOptions, CorsaNode, CorsaProgramShape, CorsaRuntimeOptions, CorsaRuntimeShape, CorsaSignature, CorsaSymbol, CorsaType, CorsaTypeCheckerShape, CorsaTypePredicate, ParserServices, ParserServicesWithTypeInformation, type ProjectResponse, ProjectServiceOptions, ResolvedProjectConfig, ResolvedRuntimeOptions, SessionProjectState, TsgoNode, TsgoProgramShape, TsgoRuntimeOptions, TsgoSignature, TsgoSymbol, TsgoType, TsgoTypeCheckerShape, TsgoTypePredicate, TypeAwareParserOptions, TypescriptOxlintSettings };
136
146
  //# sourceMappingURL=types.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "corsa-oxlint",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "Type-aware Oxlint helpers powered by corsa and typescript-go",
5
5
  "homepage": "https://github.com/ubugeeei/corsa-bind/tree/main/src/bindings/nodejs/typescript_oxlint",
6
6
  "bugs": {
@@ -61,7 +61,7 @@
61
61
  "dependencies": {
62
62
  "@oxlint/plugins": "1.57.0",
63
63
  "oxlint": "1.57.0",
64
- "@corsa-bind/napi": "0.3.0"
64
+ "@corsa-bind/napi": "0.3.2"
65
65
  },
66
66
  "engines": {
67
67
  "node": ">=22"