From 7179913d6dfd618bbd37372346268c35f4b1f539 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Mon, 29 Jul 2024 18:42:05 +0200 Subject: [PATCH] 0.1.6 (#7) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Julien Valverdé Reviewed-on: https://git.valverde.cloud/Thilawyn/thilalib/pulls/7 --- .gitea/workflows/publish.yaml | 2 +- bun.lockb | Bin 154881 -> 164302 bytes package.json | 44 ++++++++------ src/Schema/Class.ts | 17 ++++++ src/Schema/Jsonifiable.ts | 13 +++++ src/Schema/Kind.ts | 8 +++ src/Schema/MobX/ObservableClass.ts | 26 +++++++++ src/Schema/MobX/index.ts | 1 + src/Schema/MutableClass.ts | 54 ++++++++++++++++++ src/Schema/MutableTaggedClass.ts | 37 ++++++++++++ src/Schema/Tag.ts | 8 +++ src/Schema/TaggedClass.ts | 17 ++++++ src/Schema/index.ts | 8 +++ src/Schema/util.ts | 6 ++ src/{ => Types}/StaticType.ts | 0 src/Types/index.ts | 1 + src/effect/schema/Jsonifiable.ts | 39 ------------- src/effect/schema/Kind.ts | 9 --- src/effect/schema/Tag.ts | 9 --- src/effect/schema/class/Class.ts | 17 ------ src/effect/schema/class/MobXObservable.ts | 27 --------- src/effect/schema/class/MutableClass.ts | 54 ------------------ src/effect/schema/class/MutableTaggedClass.ts | 37 ------------ src/effect/schema/class/TaggedClass.ts | 17 ------ src/effect/schema/class/index.ts | 7 --- src/effect/schema/class/util.ts | 7 --- src/effect/schema/index.ts | 3 - src/index.ts | 3 +- src/{effect/schema => }/tests.ts | 6 +- tsup.config.ts | 5 +- 30 files changed, 232 insertions(+), 250 deletions(-) create mode 100644 src/Schema/Class.ts create mode 100644 src/Schema/Jsonifiable.ts create mode 100644 src/Schema/Kind.ts create mode 100644 src/Schema/MobX/ObservableClass.ts create mode 100644 src/Schema/MobX/index.ts create mode 100644 src/Schema/MutableClass.ts create mode 100644 src/Schema/MutableTaggedClass.ts create mode 100644 src/Schema/Tag.ts create mode 100644 src/Schema/TaggedClass.ts create mode 100644 src/Schema/index.ts create mode 100644 src/Schema/util.ts rename src/{ => Types}/StaticType.ts (100%) create mode 100644 src/Types/index.ts delete mode 100644 src/effect/schema/Jsonifiable.ts delete mode 100644 src/effect/schema/Kind.ts delete mode 100644 src/effect/schema/Tag.ts delete mode 100644 src/effect/schema/class/Class.ts delete mode 100644 src/effect/schema/class/MobXObservable.ts delete mode 100644 src/effect/schema/class/MutableClass.ts delete mode 100644 src/effect/schema/class/MutableTaggedClass.ts delete mode 100644 src/effect/schema/class/TaggedClass.ts delete mode 100644 src/effect/schema/class/index.ts delete mode 100644 src/effect/schema/class/util.ts delete mode 100644 src/effect/schema/index.ts rename src/{effect/schema => }/tests.ts (86%) diff --git a/.gitea/workflows/publish.yaml b/.gitea/workflows/publish.yaml index a666946..6b885ef 100644 --- a/.gitea/workflows/publish.yaml +++ b/.gitea/workflows/publish.yaml @@ -23,6 +23,6 @@ jobs: run: npm run build - name: Publish run: | - npm config set @thilawyn:registry https://git.jvalver.de/api/packages/thilawyn/npm/ + npm config set @thilawyn:registry https://git.valverde.cloud/api/packages/thilawyn/npm/ npm config set -- //git.jvalver.de/api/packages/thilawyn/npm/:_authToken "${{ vars.NODE_AUTH_TOKEN }}" npm publish diff --git a/bun.lockb b/bun.lockb index 520463aa76f04621c5efd1d2e1ad9c49f964c3cb..dc82173e1f713f06e362e76e77376ab14e12b2f9 100755 GIT binary patch delta 40953 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

vDCh{mW7eG79Wh(i&khI4&T)vS$$N)x>Ltm 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 diff --git a/package.json b/package.json index 65f6d22..50c1715 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@thilawyn/thilalib", - "version": "0.1.5", + "version": "0.1.6", "type": "module", "files": [ "./dist" @@ -17,24 +17,34 @@ "default": "./dist/index.cjs" } }, - "./effect/schema": { + "./Types": { "import": { - "types": "./dist/effect/schema/index.d.ts", - "default": "./dist/effect/schema/index.js" + "types": "./dist/Types/index.d.ts", + "default": "./dist/Types/index.js" }, "require": { - "types": "./dist/effect/schema/index.d.cts", - "default": "./dist/effect/schema/index.cjs" + "types": "./dist/Types/index.d.cts", + "default": "./dist/Types/index.cjs" } }, - "./effect/schema/class": { + "./Schema": { "import": { - "types": "./dist/effect/schema/class/index.d.ts", - "default": "./dist/effect/schema/class/index.js" + "types": "./dist/Schema/index.d.ts", + "default": "./dist/Schema/index.js" }, "require": { - "types": "./dist/effect/schema/class/index.d.cts", - "default": "./dist/effect/schema/class/index.cjs" + "types": "./dist/Schema/index.d.cts", + "default": "./dist/Schema/index.cjs" + } + }, + "./Schema/MobX": { + "import": { + "types": "./dist/Schema/MobX/index.d.ts", + "default": "./dist/Schema/MobX/index.js" + }, + "require": { + "types": "./dist/Schema/MobX/index.d.cts", + "default": "./dist/Schema/MobX/index.cjs" } } }, @@ -46,16 +56,16 @@ "clean:node": "rm -rf node_modules" }, "dependencies": { - "remeda": "^2.2.2", - "type-fest": "^4.21.0" + "remeda": "^2.6.0", + "type-fest": "^4.23.0" }, "devDependencies": { - "bun-types": "^1.1.17", + "bun-types": "^1.1.21", "npm-check-updates": "^16.14.20", "npm-sort": "^0.0.4", - "tsup": "^8.1.0", - "tsx": "^4.16.0", - "typescript": "^5.5.3" + "tsup": "^8.2.3", + "tsx": "^4.16.2", + "typescript": "^5.5.4" }, "optionalDependencies": { "@effect/schema": "*", diff --git a/src/Schema/Class.ts b/src/Schema/Class.ts new file mode 100644 index 0000000..eb3eb78 --- /dev/null +++ b/src/Schema/Class.ts @@ -0,0 +1,17 @@ +import { Schema } from "@effect/schema" +import type { HasFields } from "./util" + + +export const Class = Schema.Class as (identifier: string) => + ( + fieldsOr: Fields | HasFields, + annotations?: Schema.Annotations.Schema, + ) => Schema.Class< + Self, + Fields, + Schema.Struct.Encoded, + Schema.Struct.Context, + Schema.Struct.Constructor, + {}, + {} + > diff --git a/src/Schema/Jsonifiable.ts b/src/Schema/Jsonifiable.ts new file mode 100644 index 0000000..3a006cd --- /dev/null +++ b/src/Schema/Jsonifiable.ts @@ -0,0 +1,13 @@ +import { Schema } from "@effect/schema" +import type { Jsonifiable as TJsonifiable } from "type-fest" + + +export const Jsonifiable = < + JsonifiableA, + JsonifiableI extends TJsonifiable, + JsonifiableR, +>( + jsonifiable: Schema.Schema +) => + (schema: Schema.Schema) => + jsonifiable.pipe(Schema.compose(schema)) diff --git a/src/Schema/Kind.ts b/src/Schema/Kind.ts new file mode 100644 index 0000000..5f4b88b --- /dev/null +++ b/src/Schema/Kind.ts @@ -0,0 +1,8 @@ +import { Schema } from "@effect/schema" + + +export const Kind = (kind: Kind) => + Schema.withConstructorDefault( + Schema.propertySignature(Schema.Literal(kind)), + () => kind, + ) diff --git a/src/Schema/MobX/ObservableClass.ts b/src/Schema/MobX/ObservableClass.ts new file mode 100644 index 0000000..3be882a --- /dev/null +++ b/src/Schema/MobX/ObservableClass.ts @@ -0,0 +1,26 @@ +import { Schema } from "@effect/schema" +import { makeObservable, observable, type CreateObservableOptions } from "mobx" +import { mapValues } from "remeda" + + +interface ObservableClassSelf { + new(...args: any[]): Schema.Struct.Type + readonly fields: { readonly [K in keyof Schema.Struct.Fields]: Schema.Struct.Fields[K] } +} + +export const ObservableClass = ( + self: Self, + options?: Omit, +) => + class Observable extends self { + declare ["constructor"]: typeof Observable + + constructor(...args: any[]) { + super(...args) + + makeObservable(this, + mapValues(this.constructor.fields, () => observable), + options, + ) + } + } as Self diff --git a/src/Schema/MobX/index.ts b/src/Schema/MobX/index.ts new file mode 100644 index 0000000..ceef0ba --- /dev/null +++ b/src/Schema/MobX/index.ts @@ -0,0 +1 @@ +export * from "./ObservableClass" diff --git a/src/Schema/MutableClass.ts b/src/Schema/MutableClass.ts new file mode 100644 index 0000000..72715ee --- /dev/null +++ b/src/Schema/MutableClass.ts @@ -0,0 +1,54 @@ +import { Schema } from "@effect/schema" +import type { Mutable } from "effect/Types" +import type { StaticType } from "../Types" +import type { HasFields } from "./util" + + +export interface IMutableClass< + Self, + Fields extends Schema.Struct.Fields, + I, R, C, + Inherited, + Proto, +> +extends Omit< + StaticType>, + "extend" +> +{ + new( + ...args: ConstructorParameters> + ): Omit< + InstanceType>, + keyof Fields + > & + Mutable> + + extend(identifier: string): ( + fields: newFields | HasFields, + annotations?: Schema.Annotations.Schema, + ) => IMutableClass< + Extended, + Fields & newFields, + I & Schema.Struct.Encoded, + R | Schema.Struct.Context, + C & Schema.Struct.Constructor, + Self, + Proto + > +} + + +export const MutableClass = Schema.Class as (identifier: string) => + ( + fieldsOr: Fields | HasFields, + annotations?: Schema.Annotations.Schema, + ) => IMutableClass< + Self, + Fields, + Schema.Struct.Encoded, + Schema.Struct.Context, + Schema.Struct.Constructor, + {}, + {} + > diff --git a/src/Schema/MutableTaggedClass.ts b/src/Schema/MutableTaggedClass.ts new file mode 100644 index 0000000..16fc4f7 --- /dev/null +++ b/src/Schema/MutableTaggedClass.ts @@ -0,0 +1,37 @@ +import { Schema } from "@effect/schema" +import type { IMutableClass } from "./MutableClass" +import type { HasFields } from "./util" + + +export interface IMutableTaggedClass< + Self, + Tag, + Fields extends Schema.Struct.Fields, +> +extends IMutableClass< + Self, + Fields, + Schema.Struct.Encoded, + Schema.Struct.Context, + Schema.Struct.Constructor>, + {}, + {} +> +{ + readonly _tag: Tag +} + + +export const MutableTaggedClass = Schema.TaggedClass as (identifier?: string) => + < + Tag extends string, + Fields extends Schema.Struct.Fields, + >( + tag: Tag, + fieldsOr: Fields | HasFields, + annotations?: Schema.Annotations.Schema, + ) => IMutableTaggedClass< + Self, + Tag, + { readonly _tag: Schema.PropertySignature<":", Tag, never, ":", Tag, true, never> } & Fields + > diff --git a/src/Schema/Tag.ts b/src/Schema/Tag.ts new file mode 100644 index 0000000..2181b7a --- /dev/null +++ b/src/Schema/Tag.ts @@ -0,0 +1,8 @@ +import { Schema } from "@effect/schema" + + +export const Tag = (tag: Tag) => + Schema.withConstructorDefault( + Schema.propertySignature(Schema.Literal(tag)), + () => tag, + ) diff --git a/src/Schema/TaggedClass.ts b/src/Schema/TaggedClass.ts new file mode 100644 index 0000000..29f38da --- /dev/null +++ b/src/Schema/TaggedClass.ts @@ -0,0 +1,17 @@ +import { Schema } from "@effect/schema" +import type { HasFields } from "./util" + + +export const TaggedClass = Schema.TaggedClass as (identifier?: string) => + < + Tag extends string, + Fields extends Schema.Struct.Fields, + >( + tag: Tag, + fieldsOr: Fields | HasFields, + annotations?: Schema.Annotations.Schema, + ) => Schema.TaggedClass< + Self, + Tag, + { readonly _tag: Schema.PropertySignature<":", Tag, never, ":", Tag, true, never> } & Fields + > diff --git a/src/Schema/index.ts b/src/Schema/index.ts new file mode 100644 index 0000000..e3fa60a --- /dev/null +++ b/src/Schema/index.ts @@ -0,0 +1,8 @@ +export * from "./Class" +export * from "./Jsonifiable" +export * from "./Kind" +export * as MobX from "./MobX" +export * from "./MutableClass" +export * from "./MutableTaggedClass" +export * from "./Tag" +export * from "./TaggedClass" diff --git a/src/Schema/util.ts b/src/Schema/util.ts new file mode 100644 index 0000000..bace57e --- /dev/null +++ b/src/Schema/util.ts @@ -0,0 +1,6 @@ +import { Schema } from "@effect/schema" + + +export type HasFields = + | { readonly fields: Fields } + | { readonly from: HasFields } diff --git a/src/StaticType.ts b/src/Types/StaticType.ts similarity index 100% rename from src/StaticType.ts rename to src/Types/StaticType.ts diff --git a/src/Types/index.ts b/src/Types/index.ts new file mode 100644 index 0000000..fc3cf1c --- /dev/null +++ b/src/Types/index.ts @@ -0,0 +1 @@ +export * from "./StaticType" diff --git a/src/effect/schema/Jsonifiable.ts b/src/effect/schema/Jsonifiable.ts deleted file mode 100644 index e426a20..0000000 --- a/src/effect/schema/Jsonifiable.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Schema as S } from "@effect/schema" -import type * as TF from "type-fest" - - -// export function Jsonifiable< -// A, I, R, -// JsonifiableA extends I, JsonifiableI extends TF.Jsonifiable, JsonifiableR, -// >( -// schema: S.Schema, -// jsonifiable: S.Schema, -// ) { -// return jsonifiable.pipe(S.compose(schema)) -// } - -// export function Jsonifiable( -// schema: S.Schema -// ) { -// return < -// JsonifiableA extends I, -// JsonifiableI extends TF.Jsonifiable, -// JsonifiableR, -// >( -// jsonifiable: S.Schema -// ) => -// jsonifiable.pipe(S.compose(schema)) -// } - -export function Jsonifiable< - JsonifiableA, - JsonifiableI extends TF.Jsonifiable, - JsonifiableR, ->( - jsonifiable: S.Schema -) { - return ( - schema: S.Schema - ) => - jsonifiable.pipe(S.compose(schema)) -} diff --git a/src/effect/schema/Kind.ts b/src/effect/schema/Kind.ts deleted file mode 100644 index 3f6748a..0000000 --- a/src/effect/schema/Kind.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Schema as S } from "@effect/schema" - - -export function Kind(kind: Kind) { - return S.withConstructorDefault( - S.propertySignature(S.Literal(kind)), - () => kind, - ) -} diff --git a/src/effect/schema/Tag.ts b/src/effect/schema/Tag.ts deleted file mode 100644 index 9570122..0000000 --- a/src/effect/schema/Tag.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Schema as S } from "@effect/schema" - - -export function Tag(tag: Tag) { - return S.withConstructorDefault( - S.propertySignature(S.Literal(tag)), - () => tag, - ) -} diff --git a/src/effect/schema/class/Class.ts b/src/effect/schema/class/Class.ts deleted file mode 100644 index e93331e..0000000 --- a/src/effect/schema/class/Class.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Schema as S } from "@effect/schema" -import type { HasFields } from "./util" - - -export const Class = S.Class as (identifier: string) => - ( - fieldsOr: Fields | HasFields, - annotations?: S.Annotations.Schema, - ) => S.Class< - Self, - Fields, - S.Struct.Encoded, - S.Struct.Context, - S.Struct.Constructor, - {}, - {} - > diff --git a/src/effect/schema/class/MobXObservable.ts b/src/effect/schema/class/MobXObservable.ts deleted file mode 100644 index f967df0..0000000 --- a/src/effect/schema/class/MobXObservable.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Schema as S } from "@effect/schema" -import { makeObservable, observable, type CreateObservableOptions } from "mobx" -import { mapValues } from "remeda" - - -interface MobXObservableA { - new(...args: any[]): S.Struct.Type - readonly fields: { readonly [K in keyof S.Struct.Fields]: S.Struct.Fields[K] } -} - -export function MobXObservable( - self: A, - options?: Omit, -) { - return class MobXObservable extends self { - declare ["constructor"]: typeof MobXObservable - - constructor(...args: any[]) { - super(...args) - - makeObservable(this, - mapValues(this.constructor.fields, () => observable), - options, - ) - } - } as A -} diff --git a/src/effect/schema/class/MutableClass.ts b/src/effect/schema/class/MutableClass.ts deleted file mode 100644 index beccf6f..0000000 --- a/src/effect/schema/class/MutableClass.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { Schema as S } from "@effect/schema" -import type { Mutable } from "effect/Types" -import type { StaticType } from "../../../StaticType" -import type { HasFields } from "./util" - - -export interface IMutableClass< - Self, - Fields extends S.Struct.Fields, - I, R, C, - Inherited, - Proto, -> -extends Omit< - StaticType>, - "extend" -> -{ - new( - ...args: ConstructorParameters> - ): Omit< - InstanceType>, - keyof Fields - > & - Mutable> - - extend(identifier: string): ( - fields: newFields | HasFields, - annotations?: S.Annotations.Schema, - ) => IMutableClass< - Extended, - Fields & newFields, - I & S.Struct.Encoded, - R | S.Struct.Context, - C & S.Struct.Constructor, - Self, - Proto - > -} - - -export const MutableClass = S.Class as (identifier: string) => - ( - fieldsOr: Fields | HasFields, - annotations?: S.Annotations.Schema, - ) => IMutableClass< - Self, - Fields, - S.Struct.Encoded, - S.Struct.Context, - S.Struct.Constructor, - {}, - {} - > diff --git a/src/effect/schema/class/MutableTaggedClass.ts b/src/effect/schema/class/MutableTaggedClass.ts deleted file mode 100644 index abc2f1c..0000000 --- a/src/effect/schema/class/MutableTaggedClass.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Schema as S } from "@effect/schema" -import type { IMutableClass } from "./MutableClass" -import type { HasFields } from "./util" - - -export interface IMutableTaggedClass< - Self, - Tag, - Fields extends S.Struct.Fields, -> -extends IMutableClass< - Self, - Fields, - S.Struct.Encoded, - S.Struct.Context, - S.Struct.Constructor>, - {}, - {} -> -{ - readonly _tag: Tag -} - - -export const MutableTaggedClass = S.TaggedClass as (identifier?: string) => - < - Tag extends string, - Fields extends S.Struct.Fields, - >( - tag: Tag, - fieldsOr: Fields | HasFields, - annotations?: S.Annotations.Schema, - ) => IMutableTaggedClass< - Self, - Tag, - { readonly _tag: S.PropertySignature<":", Tag, never, ":", Tag, true, never> } & Fields - > diff --git a/src/effect/schema/class/TaggedClass.ts b/src/effect/schema/class/TaggedClass.ts deleted file mode 100644 index 9e08eb2..0000000 --- a/src/effect/schema/class/TaggedClass.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Schema as S } from "@effect/schema" -import type { HasFields } from "./util" - - -export const TaggedClass = S.TaggedClass as (identifier?: string) => - < - Tag extends string, - Fields extends S.Struct.Fields, - >( - tag: Tag, - fieldsOr: Fields | HasFields, - annotations?: S.Annotations.Schema, - ) => S.TaggedClass< - Self, - Tag, - { readonly _tag: S.PropertySignature<":", Tag, never, ":", Tag, true, never> } & Fields - > diff --git a/src/effect/schema/class/index.ts b/src/effect/schema/class/index.ts deleted file mode 100644 index 3bc9960..0000000 --- a/src/effect/schema/class/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export { Class } from "./Class" -export { MobXObservable } from "./MobXObservable" -export { MutableClass } from "./MutableClass" -export type { IMutableClass } from "./MutableClass" -export { MutableTaggedClass } from "./MutableTaggedClass" -export type { IMutableTaggedClass } from "./MutableTaggedClass" -export { TaggedClass } from "./TaggedClass" diff --git a/src/effect/schema/class/util.ts b/src/effect/schema/class/util.ts deleted file mode 100644 index 8b089cf..0000000 --- a/src/effect/schema/class/util.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Schema as S } from "@effect/schema" - - -export type HasFields = ( - | { readonly fields: Fields } - | { readonly from: HasFields } -) diff --git a/src/effect/schema/index.ts b/src/effect/schema/index.ts deleted file mode 100644 index e4b52a0..0000000 --- a/src/effect/schema/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { Jsonifiable } from "./Jsonifiable" -export { Kind } from "./Kind" -export { Tag } from "./Tag" diff --git a/src/index.ts b/src/index.ts index 70ad017..05f2af0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1 +1,2 @@ -export type { StaticType } from "./StaticType" +export * as Schema from "./Schema" +export * as Types from "./Types" diff --git a/src/effect/schema/tests.ts b/src/tests.ts similarity index 86% rename from src/effect/schema/tests.ts rename to src/tests.ts index 0e9f692..b61ccba 100644 --- a/src/effect/schema/tests.ts +++ b/src/tests.ts @@ -1,14 +1,14 @@ import { Schema as S } from "@effect/schema" import { reaction, runInAction } from "mobx" -import { Jsonifiable } from "./Jsonifiable" -import { MobXObservable, MutableTaggedClass } from "./class" +import { Jsonifiable, MutableTaggedClass } from "./Schema" +import { ObservableClass } from "./Schema/MobX" class User extends MutableTaggedClass()("User", { id: S.BigIntFromSelf, role: S.Union(S.Literal("BasicUser"), S.Literal("Admin")), }).pipe( - MobXObservable + ObservableClass ) {} const JsonifiableUser = User.pipe( diff --git a/tsup.config.ts b/tsup.config.ts index 5f0ff92..e8f8d60 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -4,8 +4,9 @@ import { defineConfig } from "tsup" export default defineConfig({ entry: [ "./src/index.ts", - "./src/effect/schema/index.ts", - "./src/effect/schema/class/index.ts", + "./src/Types/index.ts", + "./src/Schema/index.ts", + "./src/Schema/MobX/index.ts", ], format: ["esm", "cjs"], skipNodeModulesBundle: true,