GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - codeperate/json-schema-builder

BranchesTags
Open more actions menu

Latest commit

 

History

33 Commits
33 Commits

Folders and files

NameName
Last commit message
Last commit date
src
src
 
 
.gitignore
.gitignore
 
 
.prettierrc.json
.prettierrc.json
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 
package-lock.json
package-lock.json
 
 
package.json
package.json
 
 
tsconfig.build.json
tsconfig.build.json
 
 
tsconfig.json
tsconfig.json
 
 
tsconfig.test.json
tsconfig.test.json
 
 

Repository files navigation

JSON Schema Builder

A powerful TypeScript library for building, manipulating, and transforming JSON schemas with a fluent API.

Features

  • 🛠️ Fluent API for schema manipulation
  • 🔄 Pick and omit properties from schemas
  • ⚡ Dynamic property updates
  • 🔒 Required/optional property management
  • 📦 Array schema conversion
  • 🔄 Reference removal
  • 🧬 Type-safe operations

Installation

npm install @codeperate/json-schema-builder

Quick Start

import { schemaBuilder } from '@codeperate/json-schema-builder';

// Create a schema
const schema = {
  type: 'object',
  properties: {
    name: { type: 'string' },
    age: { type: 'integer' },
    email: { type: 'string' },
    address: {
      type: 'object',
      properties: {
        street: { type: 'string' },
        city: { type: 'string' },
      },
      required: ['street', 'city'],
    },
  },
  required: ['name', 'age', 'email', 'address'],
};

// Use the builder to transform the schema
const updatedSchema = schemaBuilder(schema).pick(['name', 'email']).schema;

console.log(updatedSchema);

API Reference

Core Methods

schemaBuilder(schema: JSONSchema)

Creates a new SchemaBuilder instance.

Property Selection

  • pick(props: (keyof T)[] | RegExp, options?: { removeRequired?: boolean }): SchemaBuilder<T>

    • Select specific properties from the schema
    • Optionally remove required properties
  • omit(props: (keyof T)[] | RegExp, options?: { removeRequired?: boolean }): SchemaBuilder<T>

    • Remove specific properties from the schema
    • Optionally remove required properties

Property Management

  • optional(props: (keyof T)[]): SchemaBuilder<T>

    • Make specified properties optional
  • required(props: (keyof T)[]): SchemaBuilder<T>

    • Make specified properties required

Schema Manipulation

  • set<K extends keyof JSONSchema>(key: K, value: JSONSchema[K] | ((curVal: JSONSchema[K]) => JSONSchema[K])): SchemaBuilder<T>

    • Set a schema property directly
  • setProps<K extends keyof T, V extends JSONSchema>(key: K, value: V | ((curVal: JSONSchema) => V)): SchemaBuilder<Omit<T, K> & { [key in K]: FromSchema<V> }>

    • Set a property with type safety
  • setPropsRaw<K extends keyof T, V = any>(key: K, value: JSONSchema | ((curVal: JSONSchema) => JSONSchema)): SchemaBuilder<Omit<T, K> & { [key in K]: V }>

    • Set a property without type constraints

Utility Methods

  • clone(): SchemaBuilder<T>

    • Create a deep copy of the current schema
  • toArray(): SchemaBuilder<Array<T>>

    • Convert the schema to an array schema
  • noRef(options?: { removeRequired?: boolean }): SchemaBuilder<T>

    • Remove all references from the schema

Examples

Picking Properties

const schema = schemaBuilder(originalSchema).pick(['name', 'email']).schema;

Making Properties Optional

const schema = schemaBuilder(originalSchema).optional(['age', 'address']).schema;

Converting to Array

const arraySchema = schemaBuilder(originalSchema).toArray().schema;

Removing References

const cleanSchema = schemaBuilder(originalSchema).noRef().schema;

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

No description, website, or topics provided.

Resources

Readme
MIT license
Activity
Custom properties

Stars

0 stars

Watchers

1 watching

Forks

0 forks
Report repository

Releases

Packages

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.