feat(csv-loader): resolve @table references in type declarations

Update type generation to transform @table references into capitalized
type names when using custom schema strings. This ensures that
generated TypeScript types correctly reference other CSV modules.
This commit is contained in:
2026-04-22 18:15:55 +08:00
parent e0317946d5
commit eef3dbfac8
2 changed files with 42 additions and 3 deletions
+19 -3
View File
@@ -2,6 +2,21 @@ import * as path from "path";
import { schemaToTypeString } from "../index.js";
import type { PropertyConfig, TypeDeclaration } from "./types.js";
function resolveReferencesInSchemaString(
schemaString: string,
resourceNames: Map<string, string>,
): string {
return schemaString.replace(
/@([a-zA-Z0-9\-_]+)(\[\])?/g,
(_match, tableName, arraySuffix) => {
const typeName =
resourceNames.get(tableName) ||
tableName.charAt(0).toUpperCase() + tableName.slice(1);
return arraySuffix ? `${typeName}[]` : typeName;
},
);
}
/**
* Generate TypeScript interface for the CSV data
*/
@@ -51,7 +66,7 @@ export function generateTypeDefinition(
? typeDeclarations
.map(
(decl) =>
`export type ${decl.name} = ${decl.schemaString ?? schemaToTypeString(decl.schema, resourceNames)};`,
`export type ${decl.name} = ${decl.schemaString ? resolveReferencesInSchemaString(decl.schemaString, resourceNames) : schemaToTypeString(decl.schema, resourceNames)};`,
)
.join("\n") + "\n\n"
: "";
@@ -60,8 +75,9 @@ export function generateTypeDefinition(
.map((config) => {
const typeStr = config.declaredTypeName
? config.declaredTypeName
: (config.schemaString ??
schemaToTypeString(config.schema, resourceNames));
: config.schemaString
? resolveReferencesInSchemaString(config.schemaString, resourceNames)
: schemaToTypeString(config.schema, resourceNames);
return ` readonly ${config.name}: ${typeStr};`;
})
.join("\n");