helper for type shorthands, for csv parsing
Go to file
hypercross e0317946d5 feat(csv-loader): expand custom type references in schemas
Allow custom type names to be expanded before parsing the schema
string. This enables using declared types within complex structures
like tuples or arrays. The original schema string is preserved for
type generation to ensure the output uses the named type rather than
the expanded inline definition.
2026-04-22 17:58:36 +08:00
src feat(csv-loader): expand custom type references in schemas 2026-04-22 17:58:36 +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