build: update dist files for loader export
This commit is contained in:
parent
b7e65ebc1d
commit
16d88d6108
|
|
@ -14,6 +14,41 @@ interface CsvLoaderOptions {
|
|||
/** Write .d.ts files to disk (useful for dev server) */
|
||||
writeToDisk?: boolean;
|
||||
}
|
||||
interface CsvParseResult {
|
||||
/** Parsed CSV data as array of objects */
|
||||
data: Record<string, unknown>[];
|
||||
/** Generated TypeScript type definition string (if emitTypes is true) */
|
||||
typeDefinition?: string;
|
||||
/** Property configurations for the CSV columns */
|
||||
propertyConfigs: PropertyConfig[];
|
||||
}
|
||||
interface PropertyConfig {
|
||||
name: string;
|
||||
schema: any;
|
||||
validator: (value: unknown) => boolean;
|
||||
parser: (valueString: string) => unknown;
|
||||
}
|
||||
/**
|
||||
* Parse CSV content string into structured data with schema validation.
|
||||
* This is a standalone function that doesn't depend on webpack/rspack LoaderContext.
|
||||
*
|
||||
* @param content - CSV content string (must have at least headers + schema row + 1 data row)
|
||||
* @param options - Parsing options
|
||||
* @returns CsvParseResult containing parsed data and optional type definitions
|
||||
*/
|
||||
declare function parseCsv(content: string, options?: CsvLoaderOptions): CsvParseResult;
|
||||
/**
|
||||
* Generate JavaScript module code from CSV content.
|
||||
* Returns a string that can be used as a module export.
|
||||
*
|
||||
* @param content - CSV content string
|
||||
* @param options - Parsing options
|
||||
* @returns JavaScript module code string
|
||||
*/
|
||||
declare function csvToModule(content: string, options?: CsvLoaderOptions): {
|
||||
js: string;
|
||||
dts?: string;
|
||||
};
|
||||
declare function csvLoader(this: LoaderContext<CsvLoaderOptions>, content: string): string | Buffer;
|
||||
|
||||
export { type CsvLoaderOptions, csvLoader as default };
|
||||
export { type CsvLoaderOptions, type CsvParseResult, csvToModule, csvLoader as default, parseCsv };
|
||||
|
|
|
|||
|
|
@ -14,6 +14,41 @@ interface CsvLoaderOptions {
|
|||
/** Write .d.ts files to disk (useful for dev server) */
|
||||
writeToDisk?: boolean;
|
||||
}
|
||||
interface CsvParseResult {
|
||||
/** Parsed CSV data as array of objects */
|
||||
data: Record<string, unknown>[];
|
||||
/** Generated TypeScript type definition string (if emitTypes is true) */
|
||||
typeDefinition?: string;
|
||||
/** Property configurations for the CSV columns */
|
||||
propertyConfigs: PropertyConfig[];
|
||||
}
|
||||
interface PropertyConfig {
|
||||
name: string;
|
||||
schema: any;
|
||||
validator: (value: unknown) => boolean;
|
||||
parser: (valueString: string) => unknown;
|
||||
}
|
||||
/**
|
||||
* Parse CSV content string into structured data with schema validation.
|
||||
* This is a standalone function that doesn't depend on webpack/rspack LoaderContext.
|
||||
*
|
||||
* @param content - CSV content string (must have at least headers + schema row + 1 data row)
|
||||
* @param options - Parsing options
|
||||
* @returns CsvParseResult containing parsed data and optional type definitions
|
||||
*/
|
||||
declare function parseCsv(content: string, options?: CsvLoaderOptions): CsvParseResult;
|
||||
/**
|
||||
* Generate JavaScript module code from CSV content.
|
||||
* Returns a string that can be used as a module export.
|
||||
*
|
||||
* @param content - CSV content string
|
||||
* @param options - Parsing options
|
||||
* @returns JavaScript module code string
|
||||
*/
|
||||
declare function csvToModule(content: string, options?: CsvLoaderOptions): {
|
||||
js: string;
|
||||
dts?: string;
|
||||
};
|
||||
declare function csvLoader(this: LoaderContext<CsvLoaderOptions>, content: string): string | Buffer;
|
||||
|
||||
export { type CsvLoaderOptions, csvLoader as default };
|
||||
export { type CsvLoaderOptions, type CsvParseResult, csvToModule, csvLoader as default, parseCsv };
|
||||
|
|
|
|||
|
|
@ -30,7 +30,9 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|||
// src/csv-loader/loader.ts
|
||||
var loader_exports = {};
|
||||
__export(loader_exports, {
|
||||
default: () => csvLoader
|
||||
csvToModule: () => csvToModule,
|
||||
default: () => csvLoader,
|
||||
parseCsv: () => parseCsv
|
||||
});
|
||||
module.exports = __toCommonJS(loader_exports);
|
||||
var import_sync = require("csv-parse/sync");
|
||||
|
|
@ -435,17 +437,14 @@ declare const data: Table;
|
|||
export default data;
|
||||
`;
|
||||
}
|
||||
function csvLoader(content) {
|
||||
const options = this.getOptions();
|
||||
const delimiter = options?.delimiter ?? ",";
|
||||
const quote = options?.quote ?? '"';
|
||||
const escape = options?.escape ?? "\\";
|
||||
const bom = options?.bom ?? true;
|
||||
const comment = options?.comment === false ? void 0 : options?.comment ?? "#";
|
||||
const trim = options?.trim ?? true;
|
||||
const emitTypes = options?.emitTypes ?? true;
|
||||
const typesOutputDir = options?.typesOutputDir ?? "";
|
||||
const writeToDisk = options?.writeToDisk ?? false;
|
||||
function parseCsv(content, options = {}) {
|
||||
const delimiter = options.delimiter ?? ",";
|
||||
const quote = options.quote ?? '"';
|
||||
const escape = options.escape ?? "\\";
|
||||
const bom = options.bom ?? true;
|
||||
const comment = options.comment === false ? void 0 : options.comment ?? "#";
|
||||
const trim = options.trim ?? true;
|
||||
const emitTypes = options.emitTypes ?? true;
|
||||
const records = (0, import_sync.parse)(content, {
|
||||
delimiter,
|
||||
quote,
|
||||
|
|
@ -499,8 +498,31 @@ function csvLoader(content) {
|
|||
});
|
||||
return obj;
|
||||
});
|
||||
const json = JSON.stringify(objects, null, 2);
|
||||
const result = {
|
||||
data: objects,
|
||||
propertyConfigs
|
||||
};
|
||||
if (emitTypes) {
|
||||
result.typeDefinition = generateTypeDefinition("", propertyConfigs);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
function csvToModule(content, options = {}) {
|
||||
const result = parseCsv(content, options);
|
||||
const json = JSON.stringify(result.data, null, 2);
|
||||
const js = `export default ${json};`;
|
||||
return {
|
||||
js,
|
||||
dts: result.typeDefinition
|
||||
};
|
||||
}
|
||||
function csvLoader(content) {
|
||||
const options = this.getOptions();
|
||||
const emitTypes = options?.emitTypes ?? true;
|
||||
const typesOutputDir = options?.typesOutputDir ?? "";
|
||||
const writeToDisk = options?.writeToDisk ?? false;
|
||||
const result = parseCsv(content, options);
|
||||
if (emitTypes && result.typeDefinition) {
|
||||
const context = this.context || "";
|
||||
let relativePath = this.resourcePath.replace(context, "");
|
||||
if (relativePath.startsWith("\\") || relativePath.startsWith("/")) {
|
||||
|
|
@ -509,14 +531,18 @@ function csvLoader(content) {
|
|||
relativePath = relativePath.replace(/\\/g, "/");
|
||||
const dtsFileName = `${relativePath}.d.ts`;
|
||||
const outputPath = typesOutputDir ? path.join(typesOutputDir, dtsFileName) : dtsFileName;
|
||||
const dtsContent = generateTypeDefinition(this.resourcePath, propertyConfigs);
|
||||
if (writeToDisk) {
|
||||
const absolutePath = path.join(this.context || process.cwd(), typesOutputDir || "", dtsFileName);
|
||||
fs.mkdirSync(path.dirname(absolutePath), { recursive: true });
|
||||
fs.writeFileSync(absolutePath, dtsContent);
|
||||
fs.writeFileSync(absolutePath, result.typeDefinition);
|
||||
} else {
|
||||
this.emitFile?.(outputPath, dtsContent);
|
||||
this.emitFile?.(outputPath, result.typeDefinition);
|
||||
}
|
||||
}
|
||||
return `export default ${json};`;
|
||||
return `export default ${JSON.stringify(result.data, null, 2)};`;
|
||||
}
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
csvToModule,
|
||||
parseCsv
|
||||
});
|
||||
|
|
|
|||
|
|
@ -401,17 +401,14 @@ declare const data: Table;
|
|||
export default data;
|
||||
`;
|
||||
}
|
||||
function csvLoader(content) {
|
||||
const options = this.getOptions();
|
||||
const delimiter = options?.delimiter ?? ",";
|
||||
const quote = options?.quote ?? '"';
|
||||
const escape = options?.escape ?? "\\";
|
||||
const bom = options?.bom ?? true;
|
||||
const comment = options?.comment === false ? void 0 : options?.comment ?? "#";
|
||||
const trim = options?.trim ?? true;
|
||||
const emitTypes = options?.emitTypes ?? true;
|
||||
const typesOutputDir = options?.typesOutputDir ?? "";
|
||||
const writeToDisk = options?.writeToDisk ?? false;
|
||||
function parseCsv(content, options = {}) {
|
||||
const delimiter = options.delimiter ?? ",";
|
||||
const quote = options.quote ?? '"';
|
||||
const escape = options.escape ?? "\\";
|
||||
const bom = options.bom ?? true;
|
||||
const comment = options.comment === false ? void 0 : options.comment ?? "#";
|
||||
const trim = options.trim ?? true;
|
||||
const emitTypes = options.emitTypes ?? true;
|
||||
const records = parse(content, {
|
||||
delimiter,
|
||||
quote,
|
||||
|
|
@ -465,8 +462,31 @@ function csvLoader(content) {
|
|||
});
|
||||
return obj;
|
||||
});
|
||||
const json = JSON.stringify(objects, null, 2);
|
||||
const result = {
|
||||
data: objects,
|
||||
propertyConfigs
|
||||
};
|
||||
if (emitTypes) {
|
||||
result.typeDefinition = generateTypeDefinition("", propertyConfigs);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
function csvToModule(content, options = {}) {
|
||||
const result = parseCsv(content, options);
|
||||
const json = JSON.stringify(result.data, null, 2);
|
||||
const js = `export default ${json};`;
|
||||
return {
|
||||
js,
|
||||
dts: result.typeDefinition
|
||||
};
|
||||
}
|
||||
function csvLoader(content) {
|
||||
const options = this.getOptions();
|
||||
const emitTypes = options?.emitTypes ?? true;
|
||||
const typesOutputDir = options?.typesOutputDir ?? "";
|
||||
const writeToDisk = options?.writeToDisk ?? false;
|
||||
const result = parseCsv(content, options);
|
||||
if (emitTypes && result.typeDefinition) {
|
||||
const context = this.context || "";
|
||||
let relativePath = this.resourcePath.replace(context, "");
|
||||
if (relativePath.startsWith("\\") || relativePath.startsWith("/")) {
|
||||
|
|
@ -475,17 +495,18 @@ function csvLoader(content) {
|
|||
relativePath = relativePath.replace(/\\/g, "/");
|
||||
const dtsFileName = `${relativePath}.d.ts`;
|
||||
const outputPath = typesOutputDir ? path.join(typesOutputDir, dtsFileName) : dtsFileName;
|
||||
const dtsContent = generateTypeDefinition(this.resourcePath, propertyConfigs);
|
||||
if (writeToDisk) {
|
||||
const absolutePath = path.join(this.context || process.cwd(), typesOutputDir || "", dtsFileName);
|
||||
fs.mkdirSync(path.dirname(absolutePath), { recursive: true });
|
||||
fs.writeFileSync(absolutePath, dtsContent);
|
||||
fs.writeFileSync(absolutePath, result.typeDefinition);
|
||||
} else {
|
||||
this.emitFile?.(outputPath, dtsContent);
|
||||
this.emitFile?.(outputPath, result.typeDefinition);
|
||||
}
|
||||
}
|
||||
return `export default ${json};`;
|
||||
return `export default ${JSON.stringify(result.data, null, 2)};`;
|
||||
}
|
||||
export {
|
||||
csvLoader as default
|
||||
csvToModule,
|
||||
csvLoader as default,
|
||||
parseCsv
|
||||
};
|
||||
|
|
|
|||
|
|
@ -12,8 +12,9 @@
|
|||
"declarationMap": true,
|
||||
"sourceMap": true,
|
||||
"outDir": "./dist",
|
||||
"rootDir": "./src"
|
||||
"rootDir": "./src",
|
||||
"types": ["node"]
|
||||
},
|
||||
"include": ["src/**/*"],
|
||||
"exclude": ["node_modules", "dist", "src/csv-loader"]
|
||||
"exclude": ["node_modules", "dist"]
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue