Git Product home page Git Product logo

effect-schema-compilers's Introduction

effect-schema-compilers

Compilers for @effect/schema. Currently in alpha; although, the api is pretty simple and probably won't change too much. For a collection of types preconfigured to work with these types see effect-types

Npm package monthly downloads

img

Current TODOs

  • Convert to monorepo to allow supporting multiple compilers without dep issues.
  • Create compiler for avro

Empty

Generate "empty" values from a Schema. Similar to zod-empty with a similar motivation.

import * as E from "effect-schema-compilers/dist/empty";

const s = E.to(S.struct({ num: S.number, str: S.string }))(); // { num: 0, str: "" }

Also supports setting the empty value for a schema. E.g.

import * as E from "effect-schema-compilers/dist/empty";
import { pipe } from "@effect/data/Function";

const s = pipe(S.number, E.empty(() => 1), E.to()) // 1

Semigroup

Generates a Semigroup from the provided Schema. The default Semigroup.last is used which simply overrides the previous value.

import * as S from "@effect/schema/Schema";
import * as _ from "effect-schema-compilers/dist/semigroup";

const schema = S.struct({ a: S.number, b: S.string });
const { combine } = _.to(schema)()
expect(combine({ a: 0, b: "0" }, { a: 1, b: "1" })).toEqual({ a: 1, b: "1" })

The semigroup for a Schema can be set using the semigroup() fn. For example,

import * as S from "@effect/schema/Schema";
import * as Semi from "@effect/typeclass/Semigroup"'
import * as _ from "effect-schema-compilers/dist/semigroup";
import { pipe } from "@effect/data/Function";

const schema = S.struct({ 
    a: pipe(S.number, _.semigroup(Semi.min(n.Order))), 
    b: pipe(S.string, _.semigroup(Semi.string)),
    c: S.boolean
});

const { combine } = _.to(schema)()
expect(combine({ a: 0, b: "0", c: true }, { a: 1, b: "1", c: false })).toEqual({ a: 0, b: "01", c: false })

Fakerjs

Generates realistic objects from a Schema using fakerjs.

import * as F from '@faker-js/faker';
import * as S from "@effect/schema/Schema"
import { pipe } from "@effect/data/Function";
import * as _ from "effect-schema-compilers/dist/faker";

const Person = S.struct({
    name: pipe(S.string, _.faker(f => f.person.fullName())),
    age: pipe(S.number, S.int(), S.greaterThanOrEqualTo(18), S.lessThanOrEqualTo(120)),
    sex: S.literal("male", "female")
});

const fakeData = _.to(Person)(F.faker) // { name: "Seth Gottlieb", age: 36, sex: "male" }

effect-schema-compilers's People

Contributors

dependabot[bot] avatar github-actions[bot] avatar jessekelly881 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

fgyweb

effect-schema-compilers's Issues

Known issues

These are the known issues that I am working on(basically, my personal todo list):

  • Issues with Semigroup compiler for TypeLiteral ast.
  • Date broken when using Fakerjs

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.