Store the original schema string during CSV parsing to prevent unnecessary expansion of type name references in the generated TypeScript definitions. This ensures that declared types reference each other by name rather than inlining their full definitions. |
||
|---|---|---|
| src | ||
| .gitignore | ||
| .npmignore | ||
| AGENTS.md | ||
| README.md | ||
| csv-loader.md | ||
| package.json | ||
| tsconfig.json | ||
| tsup.config.ts | ||
README.md
inline-schema
A TypeScript library for parsing and validating inline schemas with a TypeScript-like syntax using ; instead of ,.
Installation
npm install inline-schema
Usage
Basic Example
import { defineSchema } from 'inline-schema';
// Define a schema
const stringSchema = defineSchema('string');
const numberSchema = defineSchema('number');
const booleanSchema = defineSchema('boolean');
// Parse values
const name = stringSchema.parse('hello'); // "hello"
const age = numberSchema.parse('42'); // 42
const active = booleanSchema.parse('true'); // true
// Validate parsed values
stringSchema.validator(name); // true
numberSchema.validator(name); // false
Tuples
const tupleSchema = defineSchema('[string; number; boolean]');
// With brackets
const value1 = tupleSchema.parse('[hello; 42; true]');
// ["hello", 42, true]
// Without brackets (outermost brackets are optional)
const value2 = tupleSchema.parse('hello; 42; true');
// ["hello", 42, true]
tupleSchema.validator(value1); // true
tupleSchema.validator(['a', 'b', true]); // false (second element should be number)
Arrays
// Array syntax: Type[] or [Type][]
const stringArray = defineSchema('string[]');
const numberArray = defineSchema('[number][]');
// With brackets
const names1 = stringArray.parse('[alice; bob; charlie]');
// ["alice", "bob", "charlie"]
// Without brackets (outermost brackets are optional)
const names2 = stringArray.parse('alice; bob; charlie');
// ["alice", "bob", "charlie"]
const numbers = numberArray.parse('[1; 2; 3; 4; 5]');
// [1, 2, 3, 4, 5]
Array of Tuples
const schema = defineSchema('[string; number][]');
// With outer brackets
const data1 = schema.parse('[[a; 1]; [b; 2]; [c; 3]]');
// [["a", 1], ["b", 2], ["c", 3]]
// Without outer brackets
const data2 = schema.parse('[a; 1]; [b; 2]; [c; 3]');
// [["a", 1], ["b", 2], ["c", 3]]
Escaping Special Characters
Use \ to escape special characters ;, [, ], and \ in string values:
const schema = defineSchema('string');
const value1 = schema.parse('hello\\;world'); // "hello;world"
const value2 = schema.parse('hello\\[world'); // "hello[world"
const value3 = schema.parse('hello\\\\world'); // "hello\\world"
// In tuples
const tupleSchema = defineSchema('[string; string]');
const tuple = tupleSchema.parse('hello\\;world; test');
// ["hello;world", "test"]
String Identifiers
Any identifier (including hyphens) is treated as a string schema:
const schema = defineSchema('word-smith');
const value = schema.parse('word-smith');
// "word-smith"
API
defineSchema(schemaString: string): ParsedSchema
Parses a schema string and returns an object with:
schema: The parsed schema ASTvalidator: A function to validate values against the schemaparse: A function to parse value strings
parseSchema(schemaString: string): Schema
Parses a schema string and returns the schema AST.
parseValue(schema: Schema, valueString: string): unknown
Parses a value string according to the given schema.
createValidator(schema: Schema): (value: unknown) => boolean
Creates a validation function for the given schema.
Schema Syntax
| Type | Schema | Example Value |
|---|---|---|
| String | string or identifier |
hello |
| Number | number |
42 |
| Boolean | boolean |
true or false |
| Tuple | [Type1; Type2; ...] |
[hello; 42; true] or hello; 42; true |
| Array | Type[] or [Type][] |
[1; 2; 3] or 1; 2; 3 |
| Array of Tuples | [Type1; Type2][] |
[[a; 1]; [b; 2]] or [a; 1]; [b; 2] |
Notes
- Semicolons
;are used as separators instead of commas, - Outermost brackets
[]are optional for tuple and array values - Special characters can be escaped with backslash:
\;,\[,\],\\ - Empty arrays/tuples are not allowed
CSV Loader
For loading CSV files with schema validation in rspack, see csv-loader.md.
// rspack.config.js
module.exports = {
module: {
rules: [
{
test: /\.schema\.csv$/,
use: 'inline-schema/csv-loader',
},
],
},
};
License
ISC