helper for type shorthands, for csv parsing
Go to file
hypercross 46504a53dd feat(csv-loader): preserve original schema strings in type generation
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.
2026-04-22 17:08:06 +08:00
src feat(csv-loader): preserve original schema strings in type generation 2026-04-22 17:08:06 +08:00
.gitignore refactor: remove dist/ from git 2026-04-02 21:03:57 +08:00
.npmignore chore: add dist files and .npmignore for npm distribution 2026-03-31 14:55:46 +08:00
AGENTS.md refactor: accessor based imports 2026-04-15 14:36:52 +08:00
README.md feat: csv-loader? 2026-03-31 13:02:29 +08:00
csv-loader.md feat: add inline-schema/csv-loader/rollup for tsup/vite 2026-04-04 16:44:03 +08:00
package.json fix: fix minor gotchas 2026-04-15 14:12:16 +08:00
tsconfig.json build: update dist files for loader export 2026-04-02 17:34:11 +08:00
tsup.config.ts refactor: reorg/remove webpack dependency 2026-04-07 11:25:02 +08:00

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 AST
  • validator: A function to validate values against the schema
  • parse: 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