From f36b7c03f81f109024ba0410f5168aba86b2eb63 Mon Sep 17 00:00:00 2001 From: ChronicStone <55083156+ChronicStone@users.noreply.github.com> Date: Mon, 4 Dec 2023 22:30:59 +0100 Subject: [PATCH] feat: infer sheet context based on provided schema & selected columns --- example.xlsx | Bin 151378 -> 141554 bytes src/index.ts | 8 +++++--- src/types.ts | 36 ++++++++++++++++++++++++++++++++---- test/index.test.ts | 16 +++++++++------- 4 files changed, 46 insertions(+), 14 deletions(-) diff --git a/example.xlsx b/example.xlsx index fb97455468955160111823c9ee936546c46696a7..30ce030a6b8e5c1a8ef4d88ccb1d7111d27e039d 100644 GIT binary patch literal 141554 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
%skT8d$x6{f-krC2tLIyqG} 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 diff --git a/src/index.ts b/src/index.ts index ac3c852..3d9701c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,7 +3,7 @@ import xlsx, { type IColumn, type IJsonSheet, getWorksheetColumnWidths } from 'j import type { CellStyle } from 'xlsx-js-style' import XLSX from 'xlsx-js-style' import { deepmerge } from 'deepmerge-ts' -import type { CellValue, Column, ColumnGroup, ExcelSchema, GenericObject, NestedPaths, Not, Sheet, TransformersMap, ValueTransformer } from './types' +import type { CellValue, Column, ColumnGroup, ExcelSchema, GenericObject, NestedPaths, Not, SchemaColumnKeys, Sheet, TransformersMap, ValueTransformer } from './types' import { formatKey, getPropertyFromPath, getSheetCellKey } from './utils' export class ExcelSchemaBuilder< @@ -85,7 +85,7 @@ export class ExcelSchemaBuilder< } export class ExcelBuilder { - private sheets: Array>> = [] + private sheets: Array, any, any>> = [] public static create(): ExcelBuilder { return new ExcelBuilder() @@ -95,9 +95,11 @@ export class ExcelBuilder { Key extends string, T extends GenericObject, Schema extends ExcelSchema, + ColKeys extends SchemaColumnKeys, + SelectCols extends { [key in ColKeys]?: boolean } = {}, >( key: Not, - sheet: Omit, 'sheetKey'>, + sheet: Omit, 'sheetKey'>, ): ExcelBuilder { if (this.sheets.some(s => s.sheetKey === key)) throw new Error(`Sheet with key '${key}' already exists.`) diff --git a/src/types.ts b/src/types.ts index 36fd970..1401305 100644 --- a/src/types.ts +++ b/src/types.ts @@ -27,6 +27,10 @@ export type TypeFromPath = : never : never +export type AllKeysMatch = { + [K in keyof T]: T[K] extends U ? true : false; +}[keyof T] extends true ? true : false + export type CellValue = string | number | boolean | null | undefined | Date export type ValueTransformer = (value: any) => CellValue @@ -109,12 +113,36 @@ export type SchemaColumnKeys< export type Sheet< T extends GenericObject, Schema extends ExcelSchema, + ColumnKeys extends SchemaColumnKeys, + SelectColsMap extends { [key in ColumnKeys]?: boolean } | never, + SelectedCols extends string = ExtractSelectedColumns, + ContextMap extends { [key: string]: any } = ExtractContextMap, + SelectedContextMap extends ExtractSelectedContext = ExtractSelectedContext, > = { sheetKey: string schema: Schema data: T[] - select?: { [K in SchemaColumnKeys]?: boolean } + select?: SelectColsMap context?: {} -} & (Schema extends ExcelSchema - ? keyof Ctx extends never ? {} : { context: Ctx } - : {}) +} & (keyof SelectedContextMap extends never ? {} : { context: SelectedContextMap }) + +export type ExtractContextMap< + Schema extends ExcelSchema, +> = Schema extends ExcelSchema ? Ctx : {} + +export type ExtractSelectedColumns< + ColKeys extends string, + SelectCols extends { [key in ColKeys]?: boolean }, +> = keyof SelectCols extends never ? ColKeys : + AllKeysMatch extends true + ? Exclude + : { + [K in ColKeys]: SelectCols[K] extends true ? K : never; + }[ColKeys] + +export type ExtractSelectedContext< + ContextMap extends { [key: string]: any }, + SelectedCols extends string, +> = { + [K in keyof ContextMap as K extends SelectedCols ? K : never]: ContextMap[K]; +} diff --git a/test/index.test.ts b/test/index.test.ts index 3c438b7..f969869 100644 --- a/test/index.test.ts +++ b/test/index.test.ts @@ -99,23 +99,25 @@ describe('should', () => { .sheet('sheet1', { data: users, schema: assessmentExport, + select: { + 'group:org': true, + }, context: { 'group:org': organizations, - }, + }) .sheet('sheet2', { data: users, schema: assessmentExport, select: { - firstName: true, - lastName: true, - email: true, - // 'group:org': true, + 'firstName': true, + 'lastName': false, + 'email': false, + 'group:org': false, }, context: { - 'group:org': organizations, - + // 'group:org': organizations, }, }) .sheet('sheet3', {