@kuindji/conditional-string
Advanced tools
@@ -68,4 +68,36 @@ /** | ||
| export type ConditionalStringResult<Template extends string, Data extends Record<string, unknown>> = ProcessConditionalString<Template, Data>; | ||
| export declare function conditionalString<Template extends string, Data extends Record<string, unknown>>(template: Template, data: Data): ConditionalStringResult<Template, Data>; | ||
| /** | ||
| * A typed version of conditionalString where the Data type is pre-specified | ||
| * for return type computation, but runtime data values are not constrained. | ||
| * | ||
| * This allows specifying a "static" type like `{ flag: true }` for the return type, | ||
| * while accepting runtime data like `{ flag: boolean }`. | ||
| */ | ||
| type TypedConditionalString<StaticData extends Record<string, unknown>> = <Template extends string>(template: Template, data: { | ||
| [K in keyof StaticData]: unknown; | ||
| }) => ConditionalStringResult<Template, StaticData>; | ||
| /** | ||
| * Interface for the conditionalString function with the .typed() method. | ||
| */ | ||
| interface ConditionalStringFn { | ||
| /** | ||
| * Process a template with inferred types for both Template and Data. | ||
| */ | ||
| <Template extends string, Data extends Record<string, unknown>>(template: Template, data: Data): ConditionalStringResult<Template, Data>; | ||
| /** | ||
| * Create a typed version of conditionalString with a pre-specified Data type. | ||
| * Use this when you want to explicitly type the data parameter while still | ||
| * inferring the Template type from the template string. | ||
| * | ||
| * @example | ||
| * ```ts | ||
| * type MyData = { showName: boolean; count: number }; | ||
| * const result = conditionalString.with<MyData>()(template, data); | ||
| * // Data is typed as MyData, Template is inferred | ||
| * ``` | ||
| */ | ||
| with<Data extends Record<string, unknown>>(): TypedConditionalString<Data>; | ||
| } | ||
| export declare const conditionalString: ConditionalStringFn; | ||
| export default conditionalString; | ||
| //# sourceMappingURL=conditionalString.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"conditionalString.d.ts","sourceRoot":"","sources":["../src/conditionalString.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"conditionalString.d.ts","sourceRoot":"","sources":["../src/conditionalString.ts"],"names":[],"mappings":"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"} |
@@ -20,6 +20,6 @@ /** | ||
| */ | ||
| // ============================================================================ | ||
| // Runtime implementation | ||
| // ============================================================================ | ||
| export function conditionalString(template, data) { | ||
| /** | ||
| * Core implementation of the conditional string processing. | ||
| */ | ||
| function processConditionalString(template, data) { | ||
| // Pattern matches /*if:condition*/ ... /*endif*/ | ||
@@ -47,2 +47,11 @@ // Uses negative lookahead to match innermost conditions first (no nested /*if: inside) | ||
| /** | ||
| * Creates a typed version of conditionalString with a pre-specified Data type. | ||
| */ | ||
| function createTypedConditionalString() { | ||
| return (template, data) => { | ||
| return processConditionalString(template, data); | ||
| }; | ||
| } | ||
| export const conditionalString = Object.assign(processConditionalString, { with: createTypedConditionalString }); | ||
| /** | ||
| * Get a nested value from an object using dot notation. | ||
@@ -49,0 +58,0 @@ * @example getNestedValue({ user: { isAdmin: true } }, "user.isAdmin") // true |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"conditionalString.js","sourceRoot":"","sources":["../src/conditionalString.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAyHH,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E,MAAM,UAAU,iBAAiB,CAG/B,QAAkB,EAAE,IAAU;IAC5B,iDAAiD;IACjD,uFAAuF;IACvF,0EAA0E;IAC1E,MAAM,OAAO,GACT,8DAA8D,CAAC;IAEnE,IAAI,MAAM,GAAW,QAAQ,CAAC;IAC9B,IAAI,UAAU,GAAG,IAAI,CAAC;IAEtB,gEAAgE;IAChE,OAAO,UAAU,EAAE,CAAC;QAChB,UAAU,GAAG,KAAK,CAAC;QAEnB,MAAM,GAAG,MAAM,CAAC,OAAO,CACnB,OAAO,EACP,CAAC,CAAC,EAAE,SAAiB,EAAE,OAAe,EAAE,EAAE;YACtC,UAAU,GAAG,IAAI,CAAC;YAElB,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC5C,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACvD,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAEhC,6DAA6D;YAC7D,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,CAAC,CACJ,CAAC;IACN,CAAC;IAED,OAAO,MAA4D,CAAC;AACxE,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAC,GAA4B,EAAE,IAAY;IAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,OAAO,GAAY,GAAG,CAAC;IAE3B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC5C,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,OAAO,GAAI,OAAmC,CAAC,GAAG,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,eAAe,iBAAiB,CAAC"} | ||
| {"version":3,"file":"conditionalString.js","sourceRoot":"","sources":["../src/conditionalString.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAsKH;;GAEG;AACH,SAAS,wBAAwB,CAG/B,QAAkB,EAAE,IAAU;IAC5B,iDAAiD;IACjD,uFAAuF;IACvF,0EAA0E;IAC1E,MAAM,OAAO,GACT,8DAA8D,CAAC;IAEnE,IAAI,MAAM,GAAW,QAAQ,CAAC;IAC9B,IAAI,UAAU,GAAG,IAAI,CAAC;IAEtB,gEAAgE;IAChE,OAAO,UAAU,EAAE,CAAC;QAChB,UAAU,GAAG,KAAK,CAAC;QAEnB,MAAM,GAAG,MAAM,CAAC,OAAO,CACnB,OAAO,EACP,CAAC,CAAC,EAAE,SAAiB,EAAE,OAAe,EAAE,EAAE;YACtC,UAAU,GAAG,IAAI,CAAC;YAElB,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC5C,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACvD,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAEhC,6DAA6D;YAC7D,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,CAAC,CACJ,CAAC;IACN,CAAC;IAED,OAAO,MAA4D,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,SAAS,4BAA4B;IAGjC,OAAO,CACH,QAAkB,EAClB,IAA2C,EACE,EAAE;QAC/C,OAAO,wBAAwB,CAAC,QAAQ,EAAE,IAAkB,CAAC,CAAC;IAClE,CAAC,CAAC;AACN,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAwB,MAAM,CAAC,MAAM,CAC/D,wBAAwB,EACxB,EAAE,IAAI,EAAE,4BAA4B,EAAE,CACzC,CAAC;AAEF;;;GAGG;AACH,SAAS,cAAc,CAAC,GAA4B,EAAE,IAAY;IAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,OAAO,GAAY,GAAG,CAAC;IAE3B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC5C,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,OAAO,GAAI,OAAmC,CAAC,GAAG,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,eAAe,iBAAiB,CAAC"} |
+1
-1
| { | ||
| "name": "@kuindji/conditional-string", | ||
| "version": "1.0.0", | ||
| "version": "1.0.1", | ||
| "description": "Type-safe conditional string template parser with compile-time inference", | ||
@@ -5,0 +5,0 @@ "author": "Ivan Kuindzhi", |
+66
-3
@@ -8,2 +8,3 @@ # @kuindji/conditional-string | ||
| - **Compile-time type safety**: Results are inferred at the type level based on condition values | ||
| - **Static type override**: Use `.with<Data>()` to specify static types for return type computation | ||
| - **Simple syntax**: Uses comment syntax `/*if:condition*/.../*endif*/` that works with any string | ||
@@ -169,2 +170,34 @@ - **Negation support**: Use `!` prefix for negated conditions | ||
| ### Static Type Override with `.with<Data>()` | ||
| When you need to specify a static type for return type computation while allowing runtime values to vary, use the `.with<Data>()` method: | ||
| ```typescript | ||
| import { conditionalString } from "@kuindji/conditional-string"; | ||
| // Runtime value determined dynamically | ||
| const showAdmin = Math.random() > 0.5; | ||
| const template = `User /*if:isAdmin*/[ADMIN]/*endif*/`; | ||
| // Using .with<Data>() to specify static type for return type computation | ||
| const result = conditionalString.with<{ isAdmin: true }>()( | ||
| template, | ||
| { isAdmin: showAdmin }, // Runtime value can be boolean | ||
| ); | ||
| // Return type is computed as if isAdmin is always true: "User [ADMIN]" | ||
| // But runtime result depends on actual showAdmin value | ||
| ``` | ||
| This is useful when: | ||
| - You want predictable return types regardless of runtime values | ||
| - You're building type-safe query builders where the schema is known at compile time | ||
| - You need to decouple type computation from runtime data | ||
| The `.with<Data>()` method: | ||
| - Uses `Data` for **return type computation** | ||
| - Accepts runtime data with matching keys but **unrestricted value types** | ||
| - Template type is still **inferred automatically** | ||
| ## Truthy/Falsy Values | ||
@@ -188,5 +221,5 @@ | ||
| ### `conditionalString<Template, Data>(template: Template, data: Data): ConditionalStringResult<Template, Data>` | ||
| ### `conditionalString<Template, Data>(template, data)` | ||
| Processes a string template with conditional comments. | ||
| Processes a string template with conditional comments. Both `Template` and `Data` types are inferred. | ||
@@ -198,4 +231,34 @@ **Parameters:** | ||
| **Returns:** The processed string with conditionals resolved | ||
| **Returns:** `ConditionalStringResult<Template, Data>` - The processed string with conditionals resolved | ||
| --- | ||
| ### `conditionalString.with<StaticData>()(template, data)` | ||
| Creates a typed version where `StaticData` is used for return type computation, but runtime data values are unrestricted. | ||
| **Type Parameters:** | ||
| - `StaticData`: The type used for computing the return type | ||
| **Parameters:** | ||
| - `template`: The string with conditional comments (type is inferred) | ||
| - `data`: An object with keys matching `StaticData`, but values can be any type | ||
| **Returns:** `ConditionalStringResult<Template, StaticData>` - The processed string with type computed using `StaticData` | ||
| **Example:** | ||
| ```typescript | ||
| // Static type says isAdmin is true, so return type includes "[ADMIN]" | ||
| // Runtime data can have isAdmin as any boolean | ||
| const result = conditionalString.with<{ isAdmin: true }>()( | ||
| `User /*if:isAdmin*/[ADMIN]/*endif*/`, | ||
| { isAdmin: someRuntimeBoolean }, | ||
| ); | ||
| ``` | ||
| --- | ||
| ### `ConditionalStringResult<Template, Data>` | ||
@@ -202,0 +265,0 @@ |
23398
22.73%178
29.93%267
30.88%