@effect/schema
Advanced tools
Comparing version 0.17.5 to 0.18.0
@@ -32,3 +32,3 @@ "use strict"; | ||
exports.ArbitraryHookId = ArbitraryHookId; | ||
const to = schema => go(AST.getTo(schema.ast)); | ||
const to = schema => go(AST.to(schema.ast)); | ||
/** | ||
@@ -39,3 +39,3 @@ * @category arbitrary | ||
exports.to = to; | ||
const from = schema => go(AST.getFrom(schema.ast)); | ||
const from = schema => go(AST.from(schema.ast)); | ||
exports.from = from; | ||
@@ -42,0 +42,0 @@ const record = (fc, key, value) => fc.array(fc.tuple(key, value), { |
@@ -988,11 +988,7 @@ /** | ||
*/ | ||
export declare const getTo: (ast: AST) => AST; | ||
export declare const to: (ast: AST) => AST; | ||
/** | ||
* @since 1.0.0 | ||
*/ | ||
export declare const getFrom: (ast: AST) => AST; | ||
/** | ||
* @since 1.0.0 | ||
*/ | ||
export declare const reverse: (ast: AST) => AST; | ||
export declare const from: (ast: AST) => AST; | ||
//# sourceMappingURL=AST.d.ts.map |
77
AST.js
@@ -6,3 +6,3 @@ "use strict"; | ||
}); | ||
exports.voidKeyword = exports.unknownKeyword = exports.undefinedKeyword = exports.symbolKeyword = exports.stringKeyword = exports.setAnnotation = exports.reverse = exports.required = exports.pick = exports.partial = exports.omit = exports.objectKeyword = exports.numberKeyword = exports.neverKeyword = exports.mergeAnnotations = exports.keyof = exports.isVoidKeyword = exports.isUnknownKeyword = exports.isUniqueSymbol = exports.isUnion = exports.isUndefinedKeyword = exports.isTypeLiteral = exports.isTuple = exports.isTransform = exports.isTemplateLiteral = exports.isSymbolKeyword = exports.isStringKeyword = exports.isRefinement = exports.isParameter = exports.isObjectKeyword = exports.isNumberKeyword = exports.isNeverKeyword = exports.isLiteral = exports.isLazy = exports.isEnums = exports.isDeclaration = exports.isBooleanKeyword = exports.isBigIntKeyword = exports.isAnyKeyword = exports.getWeight = exports.getTo = exports.getPropertySignatures = exports.getFrom = exports.getCompiler = exports.getCardinality = exports.getAnnotation = exports.createUniqueSymbol = exports.createUnion = exports.createTypeLiteral = exports.createTuple = exports.createTransformByPropertySignatureTransformations = exports.createTransform = exports.createTemplateLiteral = exports.createRefinement = exports.createRecord = exports.createPropertySignatureTransformation = exports.createPropertySignature = exports.createLiteral = exports.createLazy = exports.createIndexSignature = exports.createEnums = exports.createElement = exports.createDeclaration = exports.booleanKeyword = exports.bigIntKeyword = exports.appendRestElement = exports.appendElement = exports.anyKeyword = exports._createTransform = exports.TypeAnnotationId = exports.TitleAnnotationId = exports.MessageAnnotationId = exports.JSONSchemaAnnotationId = exports.IdentifierAnnotationId = exports.ExamplesAnnotationId = exports.DocumentationAnnotationId = exports.DescriptionAnnotationId = exports.BrandAnnotationId = void 0; | ||
exports.voidKeyword = exports.unknownKeyword = exports.undefinedKeyword = exports.to = exports.symbolKeyword = exports.stringKeyword = exports.setAnnotation = exports.required = exports.pick = exports.partial = exports.omit = exports.objectKeyword = exports.numberKeyword = exports.neverKeyword = exports.mergeAnnotations = exports.keyof = exports.isVoidKeyword = exports.isUnknownKeyword = exports.isUniqueSymbol = exports.isUnion = exports.isUndefinedKeyword = exports.isTypeLiteral = exports.isTuple = exports.isTransform = exports.isTemplateLiteral = exports.isSymbolKeyword = exports.isStringKeyword = exports.isRefinement = exports.isParameter = exports.isObjectKeyword = exports.isNumberKeyword = exports.isNeverKeyword = exports.isLiteral = exports.isLazy = exports.isEnums = exports.isDeclaration = exports.isBooleanKeyword = exports.isBigIntKeyword = exports.isAnyKeyword = exports.getWeight = exports.getPropertySignatures = exports.getCompiler = exports.getCardinality = exports.getAnnotation = exports.from = exports.createUniqueSymbol = exports.createUnion = exports.createTypeLiteral = exports.createTuple = exports.createTransformByPropertySignatureTransformations = exports.createTransform = exports.createTemplateLiteral = exports.createRefinement = exports.createRecord = exports.createPropertySignatureTransformation = exports.createPropertySignature = exports.createLiteral = exports.createLazy = exports.createIndexSignature = exports.createEnums = exports.createElement = exports.createDeclaration = exports.booleanKeyword = exports.bigIntKeyword = exports.appendRestElement = exports.appendElement = exports.anyKeyword = exports._createTransform = exports.TypeAnnotationId = exports.TitleAnnotationId = exports.MessageAnnotationId = exports.JSONSchemaAnnotationId = exports.IdentifierAnnotationId = exports.ExamplesAnnotationId = exports.DocumentationAnnotationId = exports.DescriptionAnnotationId = exports.BrandAnnotationId = void 0; | ||
var _Function = /*#__PURE__*/require("@effect/data/Function"); | ||
@@ -790,27 +790,18 @@ var Number = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/data/Number")); | ||
exports.getCompiler = getCompiler; | ||
const getTo = ast => { | ||
const to = ast => { | ||
switch (ast._tag) { | ||
case "Declaration": | ||
return createDeclaration(ast.typeParameters.map(getTo), getTo(ast.type), ast.decode, ast.annotations); | ||
return createDeclaration(ast.typeParameters.map(to), to(ast.type), ast.decode, ast.annotations); | ||
case "Tuple": | ||
return createTuple(ast.elements.map(e => ({ | ||
...e, | ||
type: getTo(e.type) | ||
})), O.map(ast.rest, RA.mapNonEmpty(getTo)), ast.isReadonly, ast.annotations); | ||
return createTuple(ast.elements.map(e => createElement(to(e.type), e.isOptional)), O.map(ast.rest, RA.mapNonEmpty(to)), ast.isReadonly, ast.annotations); | ||
case "TypeLiteral": | ||
return createTypeLiteral(ast.propertySignatures.map(p => ({ | ||
...p, | ||
type: getTo(p.type) | ||
})), ast.indexSignatures.map(is => ({ | ||
...is, | ||
type: getTo(is.type) | ||
})), ast.annotations); | ||
return createTypeLiteral(ast.propertySignatures.map(p => createPropertySignature(p.name, to(p.type), p.isOptional, p.isReadonly, p.annotations)), ast.indexSignatures.map(is => createIndexSignature(is.parameter, to(is.type), is.isReadonly)), ast.annotations); | ||
case "Union": | ||
return createUnion(ast.types.map(getTo), ast.annotations); | ||
return createUnion(ast.types.map(to), ast.annotations); | ||
case "Lazy": | ||
return createLazy(() => getTo(ast.f()), ast.annotations); | ||
return createLazy(() => to(ast.f()), ast.annotations); | ||
case "Refinement": | ||
return createRefinement(getTo(ast.from), ast.decode, false, ast.annotations); | ||
return createRefinement(to(ast.from), ast.decode, false, ast.annotations); | ||
case "Transform": | ||
return getTo(ast.to); | ||
return to(ast.to); | ||
} | ||
@@ -822,55 +813,23 @@ return ast; | ||
*/ | ||
exports.getTo = getTo; | ||
const getFrom = ast => { | ||
exports.to = to; | ||
const from = ast => { | ||
switch (ast._tag) { | ||
case "Declaration": | ||
return createDeclaration(ast.typeParameters.map(getFrom), getFrom(ast.type), ast.decode, ast.annotations); | ||
return createDeclaration(ast.typeParameters.map(from), from(ast.type), ast.decode, ast.annotations); | ||
case "Tuple": | ||
return createTuple(ast.elements.map(e => ({ | ||
...e, | ||
type: getFrom(e.type) | ||
})), O.map(ast.rest, RA.mapNonEmpty(getFrom)), ast.isReadonly); | ||
return createTuple(ast.elements.map(e => createElement(from(e.type), e.isOptional)), O.map(ast.rest, RA.mapNonEmpty(from)), ast.isReadonly); | ||
case "TypeLiteral": | ||
return createTypeLiteral(ast.propertySignatures.map(p => ({ | ||
...p, | ||
type: getFrom(p.type) | ||
})), ast.indexSignatures.map(is => ({ | ||
...is, | ||
type: getFrom(is.type) | ||
}))); | ||
return createTypeLiteral(ast.propertySignatures.map(p => createPropertySignature(p.name, from(p.type), p.isOptional, p.isReadonly)), ast.indexSignatures.map(is => createIndexSignature(is.parameter, from(is.type), is.isReadonly))); | ||
case "Union": | ||
return createUnion(ast.types.map(getFrom)); | ||
return createUnion(ast.types.map(from)); | ||
case "Lazy": | ||
return createLazy(() => getFrom(ast.f())); | ||
return createLazy(() => from(ast.f())); | ||
case "Refinement": | ||
case "Transform": | ||
return getFrom(ast.from); | ||
return from(ast.from); | ||
} | ||
return ast; | ||
}; | ||
/** | ||
* @since 1.0.0 | ||
*/ | ||
exports.getFrom = getFrom; | ||
const reverse = ast => { | ||
switch (ast._tag) { | ||
case "Declaration": | ||
return createDeclaration(ast.typeParameters.map(reverse), ast.type, ast.decode, ast.annotations); | ||
case "Tuple": | ||
return createTuple(ast.elements.map(e => createElement(reverse(e.type), e.isOptional)), O.map(ast.rest, RA.mapNonEmpty(reverse)), ast.isReadonly); | ||
case "TypeLiteral": | ||
return createTypeLiteral(ast.propertySignatures.map(ps => createPropertySignature(ps.name, reverse(ps.type), ps.isOptional, ps.isReadonly, ps.annotations)), ast.indexSignatures.map(is => createIndexSignature(is.parameter, reverse(is.type), is.isReadonly))); | ||
case "Union": | ||
return createUnion(ast.types.map(reverse)); | ||
case "Lazy": | ||
return createLazy(() => reverse(ast.f())); | ||
case "Refinement": | ||
return createRefinement(ast.from, ast.decode, !ast.isReversed, ast.annotations); | ||
case "Transform": | ||
return _createTransform(reverse(ast.to), reverse(ast.from), ast.encode, ast.decode, ast.propertySignatureTransformations.map(t => createPropertySignatureTransformation(t.to, t.from, t.encode, t.decode))); | ||
} | ||
return ast; | ||
}; | ||
/** @internal */ | ||
exports.reverse = reverse; | ||
exports.from = from; | ||
const getCardinality = ast => { | ||
@@ -877,0 +836,0 @@ switch (ast._tag) { |
{ | ||
"name": "@effect/schema", | ||
"version": "0.17.5", | ||
"version": "0.18.0", | ||
"license": "MIT", | ||
@@ -5,0 +5,0 @@ "repository": { |
@@ -6,3 +6,3 @@ "use strict"; | ||
}); | ||
exports.validateResult = exports.validatePromise = exports.validateOption = exports.validateEither = exports.validateEffect = exports.validate = exports.parseResult = exports.parsePromise = exports.parseOption = exports.parseEither = exports.parseEffect = exports.parse = exports.is = exports.encodeResult = exports.encodePromise = exports.encodeOption = exports.encodeEither = exports.encodeEffect = exports.encode = exports.decodeResult = exports.decodePromise = exports.decodeOption = exports.decodeEither = exports.decodeEffect = exports.decode = exports.asserts = exports._getSearchTree = exports._getLiterals = void 0; | ||
exports.validateResult = exports.validatePromise = exports.validateOption = exports.validateEither = exports.validateEffect = exports.validate = exports.reverse = exports.parseResult = exports.parsePromise = exports.parseOption = exports.parseEither = exports.parseEffect = exports.parse = exports.is = exports.encodeResult = exports.encodePromise = exports.encodeOption = exports.encodeEither = exports.encodeEffect = exports.encode = exports.decodeResult = exports.decodePromise = exports.decodeOption = exports.decodeEither = exports.decodeEffect = exports.decode = exports.asserts = exports._getSearchTree = exports._getLiterals = void 0; | ||
var _Debug = /*#__PURE__*/require("@effect/data/Debug"); | ||
@@ -135,3 +135,3 @@ var E = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/data/Either")); | ||
exports.decodeEffect = decodeEffect; | ||
const validate = schema => get(AST.getTo(schema.ast)); | ||
const validate = schema => get(AST.to(schema.ast)); | ||
/** | ||
@@ -142,3 +142,3 @@ * @category validation | ||
exports.validate = validate; | ||
const validateOption = schema => getOption(AST.getTo(schema.ast)); | ||
const validateOption = schema => getOption(AST.to(schema.ast)); | ||
/** | ||
@@ -149,3 +149,3 @@ * @category validation | ||
exports.validateOption = validateOption; | ||
const validateEither = schema => getEither(AST.getTo(schema.ast)); | ||
const validateEither = schema => getEither(AST.to(schema.ast)); | ||
/** | ||
@@ -156,3 +156,3 @@ * @category validation | ||
exports.validateEither = validateEither; | ||
const validateResult = schema => go(AST.getTo(schema.ast)); | ||
const validateResult = schema => go(AST.to(schema.ast)); | ||
/** | ||
@@ -163,3 +163,3 @@ * @category validation | ||
exports.validateResult = validateResult; | ||
const validatePromise = schema => getPromise(AST.getTo(schema.ast)); | ||
const validatePromise = schema => getPromise(AST.to(schema.ast)); | ||
/** | ||
@@ -170,3 +170,3 @@ * @category validation | ||
exports.validatePromise = validatePromise; | ||
const validateEffect = schema => getEffect(AST.getTo(schema.ast)); | ||
const validateEffect = schema => getEffect(AST.to(schema.ast)); | ||
/** | ||
@@ -197,3 +197,3 @@ * @category validation | ||
exports.asserts = asserts; | ||
const encode = schema => get(AST.reverse(schema.ast)); | ||
const encode = schema => get(reverse(schema.ast)); | ||
/** | ||
@@ -204,3 +204,3 @@ * @category encoding | ||
exports.encode = encode; | ||
const encodeOption = schema => getOption(AST.reverse(schema.ast)); | ||
const encodeOption = schema => getOption(reverse(schema.ast)); | ||
/** | ||
@@ -211,3 +211,3 @@ * @category encoding | ||
exports.encodeOption = encodeOption; | ||
const encodeEither = schema => getEither(AST.reverse(schema.ast)); | ||
const encodeEither = schema => getEither(reverse(schema.ast)); | ||
/** | ||
@@ -218,3 +218,3 @@ * @category encoding | ||
exports.encodeEither = encodeEither; | ||
const encodeResult = schema => go(AST.reverse(schema.ast)); | ||
const encodeResult = schema => go(reverse(schema.ast)); | ||
/** | ||
@@ -225,3 +225,3 @@ * @category encoding | ||
exports.encodeResult = encodeResult; | ||
const encodePromise = schema => getPromise(AST.reverse(schema.ast)); | ||
const encodePromise = schema => getPromise(reverse(schema.ast)); | ||
/** | ||
@@ -232,3 +232,3 @@ * @category encoding | ||
exports.encodePromise = encodePromise; | ||
const encodeEffect = schema => getEffect(AST.reverse(schema.ast)); | ||
const encodeEffect = schema => getEffect(reverse(schema.ast)); | ||
exports.encodeEffect = encodeEffect; | ||
@@ -240,4 +240,4 @@ const go = /*#__PURE__*/(0, _Debug.untracedMethod)(() => (ast, isBoundary = true) => { | ||
if (ast.isReversed) { | ||
const from = go(AST.getTo(ast), isBoundary); | ||
const to = go(AST.reverse(dropRightRefinement(ast.from)), false); | ||
const from = go(AST.to(ast), isBoundary); | ||
const to = go(reverse(dropRightRefinement(ast.from)), false); | ||
return (i, options) => handleForbidden(PR.flatMap(from(i, options), a => to(a, options)), options); | ||
@@ -820,3 +820,3 @@ } else { | ||
const propertySignature = ast.propertySignatures[i]; | ||
const type = AST.getFrom(propertySignature.type); | ||
const type = AST.from(propertySignature.type); | ||
if (AST.isLiteral(type) && !propertySignature.isOptional) { | ||
@@ -917,2 +917,23 @@ out.push([propertySignature.name, type]); | ||
} | ||
/** @internal */ | ||
const reverse = ast => { | ||
switch (ast._tag) { | ||
case "Declaration": | ||
return AST.createDeclaration(ast.typeParameters.map(reverse), ast.type, ast.decode, ast.annotations); | ||
case "Tuple": | ||
return AST.createTuple(ast.elements.map(e => AST.createElement(reverse(e.type), e.isOptional)), O.map(ast.rest, RA.mapNonEmpty(reverse)), ast.isReadonly); | ||
case "TypeLiteral": | ||
return AST.createTypeLiteral(ast.propertySignatures.map(ps => AST.createPropertySignature(ps.name, reverse(ps.type), ps.isOptional, ps.isReadonly, ps.annotations)), ast.indexSignatures.map(is => AST.createIndexSignature(is.parameter, reverse(is.type), is.isReadonly))); | ||
case "Union": | ||
return AST.createUnion(ast.types.map(reverse)); | ||
case "Lazy": | ||
return AST.createLazy(() => reverse(ast.f())); | ||
case "Refinement": | ||
return AST.createRefinement(ast.from, ast.decode, !ast.isReversed, ast.annotations); | ||
case "Transform": | ||
return AST._createTransform(reverse(ast.to), reverse(ast.from), ast.encode, ast.decode, ast.propertySignatureTransformations.map(t => AST.createPropertySignatureTransformation(t.to, t.from, t.encode, t.decode))); | ||
} | ||
return ast; | ||
}; | ||
exports.reverse = reverse; | ||
//# sourceMappingURL=Parser.js.map |
@@ -36,3 +36,3 @@ "use strict"; | ||
exports.to = to; | ||
const from = schema => compile(AST.getFrom(schema.ast)); | ||
const from = schema => compile(AST.from(schema.ast)); | ||
exports.from = from; | ||
@@ -39,0 +39,0 @@ const getHook = /*#__PURE__*/AST.getAnnotation(PrettyHookId); |
@@ -45,6 +45,2 @@ /** | ||
export declare const to: <I, A>(schema: Schema<I, A>) => Schema<A, A>; | ||
/** | ||
* @since 1.0.0 | ||
*/ | ||
export declare const reverse: <I, A>(schema: Schema<I, A>) => Schema<A, I>; | ||
export { | ||
@@ -322,27 +318,2 @@ /** | ||
/** | ||
* Returns an object containing all property signatures of a given schema. | ||
* | ||
* ``` | ||
* Schema<A> -> { [K in keyof A]: Schema<A[K]> } | ||
* ``` | ||
* | ||
* @param schema - The schema to extract property signatures from. | ||
* | ||
* @example | ||
* import * as S from "@effect/schema/Schema" | ||
* | ||
* const Person = S.struct({ | ||
* name: S.string, | ||
* age: S.number | ||
* }) | ||
* | ||
* const shape = S.getPropertySignatures(Person) | ||
* | ||
* assert.deepStrictEqual(shape.name, S.string) | ||
* assert.deepStrictEqual(shape.age, S.number) | ||
* | ||
* @since 1.0.0 | ||
*/ | ||
export declare const getPropertySignatures: <I extends { [K in keyof A]: any; }, A>(schema: Schema<I, A>) => { [K_1 in keyof A]: Schema<I[K_1], A[K_1]>; }; | ||
/** | ||
* @category model | ||
@@ -349,0 +320,0 @@ * @since 1.0.0 |
@@ -89,3 +89,3 @@ "use strict"; | ||
exports.filter = filter; | ||
exports.int = exports.instanceOf = exports.includes = exports.identifier = exports.greaterThanOrEqualToBigint = exports.greaterThanOrEqualTo = exports.greaterThanBigint = exports.greaterThan = exports.getPropertySignatures = exports.fromBrand = exports.from = exports.finite = void 0; | ||
exports.int = exports.instanceOf = exports.includes = exports.identifier = exports.greaterThanOrEqualToBigint = exports.greaterThanOrEqualTo = exports.greaterThanBigint = exports.greaterThan = exports.fromBrand = exports.from = exports.finite = void 0; | ||
Object.defineProperty(exports, "is", { | ||
@@ -97,4 +97,4 @@ enumerable: true, | ||
}); | ||
exports.length = exports.lazy = exports.keyof = exports.json = exports.itemsCount = void 0; | ||
exports.optionalElement = exports.optional = exports.optionFromSelf = exports.optionFromNullable = exports.option = exports.omit = exports.object = exports.numberFromString = exports.number = exports.nullable = exports.null = exports.not = exports.nonPositiveBigint = exports.nonPositive = exports.nonNegativeBigint = exports.nonNegative = exports.nonNaN = exports.nonEmptyArray = exports.nonEmpty = exports.never = exports.negativeBigint = exports.negative = exports.multipleOf = exports.minLength = exports.minItems = exports.message = exports.maxLength = exports.maxItems = exports.make = exports.literal = exports.lessThanOrEqualToBigint = exports.lessThanOrEqualTo = exports.lessThanBigint = exports.lessThan = void 0; | ||
exports.lessThan = exports.length = exports.lazy = exports.keyof = exports.json = exports.itemsCount = void 0; | ||
exports.optionalElement = exports.optional = exports.optionFromSelf = exports.optionFromNullable = exports.option = exports.omit = exports.object = exports.numberFromString = exports.number = exports.nullable = exports.null = exports.not = exports.nonPositiveBigint = exports.nonPositive = exports.nonNegativeBigint = exports.nonNegative = exports.nonNaN = exports.nonEmptyArray = exports.nonEmpty = exports.never = exports.negativeBigint = exports.negative = exports.multipleOf = exports.minLength = exports.minItems = exports.message = exports.maxLength = exports.maxItems = exports.make = exports.literal = exports.lessThanOrEqualToBigint = exports.lessThanOrEqualTo = exports.lessThanBigint = void 0; | ||
Object.defineProperty(exports, "parse", { | ||
@@ -136,3 +136,3 @@ enumerable: true, | ||
}); | ||
exports.validDate = exports.unknown = exports.uniqueSymbol = exports.union = exports.undefined = exports.tuple = exports.trimmed = exports.trim = exports.transformResult = exports.transform = exports.to = exports.title = exports.templateLiteral = exports.symbol = exports.struct = exports.string = exports.startsWith = exports.reverse = exports.rest = exports.required = exports.record = exports.readonlySetFromSelf = exports.readonlySet = exports.readonlyMapFromSelf = exports.readonlyMap = exports.propertySignature = exports.positiveBigint = exports.positive = exports.pick = exports.pattern = exports.partial = void 0; | ||
exports.validDate = exports.unknown = exports.uniqueSymbol = exports.union = exports.undefined = exports.tuple = exports.trimmed = exports.trim = exports.transformResult = exports.transform = exports.to = exports.title = exports.templateLiteral = exports.symbol = exports.struct = exports.string = exports.startsWith = exports.rest = exports.required = exports.record = exports.readonlySetFromSelf = exports.readonlySet = exports.readonlyMapFromSelf = exports.readonlyMap = exports.propertySignature = exports.positiveBigint = exports.positive = exports.pick = exports.pattern = exports.partial = void 0; | ||
Object.defineProperty(exports, "validate", { | ||
@@ -201,3 +201,3 @@ enumerable: true, | ||
*/ | ||
const from = schema => make(AST.getFrom(schema.ast)); | ||
const from = schema => make(AST.from(schema.ast)); | ||
/** | ||
@@ -207,10 +207,5 @@ * @since 1.0.0 | ||
exports.from = from; | ||
const to = schema => make(AST.getTo(schema.ast)); | ||
/** | ||
* @since 1.0.0 | ||
*/ | ||
const to = schema => make(AST.to(schema.ast)); | ||
/* c8 ignore start */ | ||
exports.to = to; | ||
const reverse = schema => make(AST.reverse(schema.ast)); | ||
/* c8 ignore start */ | ||
exports.reverse = reverse; | ||
/* c8 ignore end */ | ||
@@ -437,3 +432,3 @@ // --------------------------------------------- | ||
fromPropertySignatures.push(AST.createPropertySignature(key, field._from, true, true)); | ||
toPropertySignatures.push(AST.createPropertySignature(key, AST.getTo(field._from), true, true, field._annotations)); | ||
toPropertySignatures.push(AST.createPropertySignature(key, AST.to(field._from), true, true, field._annotations)); | ||
break; | ||
@@ -444,3 +439,3 @@ } | ||
fromPropertySignatures.push(AST.createPropertySignature(key, field._from, true, true)); | ||
toPropertySignatures.push(AST.createPropertySignature(key, AST.getTo(field._from), false, true, field._annotations)); | ||
toPropertySignatures.push(AST.createPropertySignature(key, AST.to(field._from), false, true, field._annotations)); | ||
propertySignatureTransformations.push(AST.createPropertySignatureTransformation(key, key, O.orElse(() => O.some(optional.value())), _Function.identity)); | ||
@@ -452,3 +447,3 @@ break; | ||
fromPropertySignatures.push(AST.createPropertySignature(key, field._from, true, true)); | ||
toPropertySignatures.push(AST.createPropertySignature(key, optionFromSelf(make(AST.getTo(field._from))).ast, false, true, field._annotations)); | ||
toPropertySignatures.push(AST.createPropertySignature(key, optionFromSelf(make(AST.to(field._from))).ast, false, true, field._annotations)); | ||
propertySignatureTransformations.push(AST.createPropertySignatureTransformation(key, key, O.some, O.flatten)); | ||
@@ -461,3 +456,3 @@ break; | ||
fromPropertySignatures.push(AST.createPropertySignature(key, field._from, false, true)); | ||
toPropertySignatures.push(AST.createPropertySignature(key, AST.getTo(field._from), false, true, field._annotations)); | ||
toPropertySignatures.push(AST.createPropertySignature(key, AST.to(field._from), false, true, field._annotations)); | ||
} | ||
@@ -467,3 +462,3 @@ } else { | ||
fromPropertySignatures.push(AST.createPropertySignature(key, field.ast, false, true)); | ||
toPropertySignatures.push(AST.createPropertySignature(key, AST.getTo(field.ast), false, true)); | ||
toPropertySignatures.push(AST.createPropertySignature(key, AST.to(field.ast), false, true)); | ||
} | ||
@@ -502,36 +497,2 @@ } | ||
/** | ||
* Returns an object containing all property signatures of a given schema. | ||
* | ||
* ``` | ||
* Schema<A> -> { [K in keyof A]: Schema<A[K]> } | ||
* ``` | ||
* | ||
* @param schema - The schema to extract property signatures from. | ||
* | ||
* @example | ||
* import * as S from "@effect/schema/Schema" | ||
* | ||
* const Person = S.struct({ | ||
* name: S.string, | ||
* age: S.number | ||
* }) | ||
* | ||
* const shape = S.getPropertySignatures(Person) | ||
* | ||
* assert.deepStrictEqual(shape.name, S.string) | ||
* assert.deepStrictEqual(shape.age, S.number) | ||
* | ||
* @since 1.0.0 | ||
*/ | ||
exports.omit = omit; | ||
const getPropertySignatures = schema => { | ||
const out = {}; | ||
const propertySignatures = AST.getPropertySignatures(schema.ast); | ||
for (let i = 0; i < propertySignatures.length; i++) { | ||
const propertySignature = propertySignatures[i]; | ||
out[propertySignature.name] = make(propertySignature.type); | ||
} | ||
return out; | ||
}; | ||
/** | ||
* Returns a nominal branded schema by applying a brand to a given schema. | ||
@@ -556,3 +517,3 @@ * | ||
*/ | ||
exports.getPropertySignatures = getPropertySignatures; | ||
exports.omit = omit; | ||
const brand = (brand, options) => self => { | ||
@@ -559,0 +520,0 @@ const annotations = toAnnotations(options); |
@@ -36,3 +36,3 @@ /** | ||
schema: S.Schema<I, A> | ||
): (fc: typeof FastCheck) => FastCheck.Arbitrary<A> => go(AST.getTo(schema.ast)) | ||
): (fc: typeof FastCheck) => FastCheck.Arbitrary<A> => go(AST.to(schema.ast)) | ||
@@ -45,3 +45,3 @@ /** | ||
schema: S.Schema<I, A> | ||
): (fc: typeof FastCheck) => FastCheck.Arbitrary<I> => go(AST.getFrom(schema.ast)) | ||
): (fc: typeof FastCheck) => FastCheck.Arbitrary<I> => go(AST.from(schema.ast)) | ||
@@ -48,0 +48,0 @@ const record = <K extends PropertyKey, V>( |
@@ -1279,8 +1279,8 @@ /** | ||
*/ | ||
export const getTo = (ast: AST): AST => { | ||
export const to = (ast: AST): AST => { | ||
switch (ast._tag) { | ||
case "Declaration": | ||
return createDeclaration( | ||
ast.typeParameters.map(getTo), | ||
getTo(ast.type), | ||
ast.typeParameters.map(to), | ||
to(ast.type), | ||
ast.decode, | ||
@@ -1291,4 +1291,4 @@ ast.annotations | ||
return createTuple( | ||
ast.elements.map((e) => ({ ...e, type: getTo(e.type) })), | ||
O.map(ast.rest, RA.mapNonEmpty(getTo)), | ||
ast.elements.map((e) => createElement(to(e.type), e.isOptional)), | ||
O.map(ast.rest, RA.mapNonEmpty(to)), | ||
ast.isReadonly, | ||
@@ -1299,14 +1299,18 @@ ast.annotations | ||
return createTypeLiteral( | ||
ast.propertySignatures.map((p) => ({ ...p, type: getTo(p.type) })), | ||
ast.indexSignatures.map((is) => ({ ...is, type: getTo(is.type) })), | ||
ast.propertySignatures.map((p) => | ||
createPropertySignature(p.name, to(p.type), p.isOptional, p.isReadonly, p.annotations) | ||
), | ||
ast.indexSignatures.map((is) => | ||
createIndexSignature(is.parameter, to(is.type), is.isReadonly) | ||
), | ||
ast.annotations | ||
) | ||
case "Union": | ||
return createUnion(ast.types.map(getTo), ast.annotations) | ||
return createUnion(ast.types.map(to), ast.annotations) | ||
case "Lazy": | ||
return createLazy(() => getTo(ast.f()), ast.annotations) | ||
return createLazy(() => to(ast.f()), ast.annotations) | ||
case "Refinement": | ||
return createRefinement(getTo(ast.from), ast.decode, false, ast.annotations) | ||
return createRefinement(to(ast.from), ast.decode, false, ast.annotations) | ||
case "Transform": | ||
return getTo(ast.to) | ||
return to(ast.to) | ||
} | ||
@@ -1319,8 +1323,8 @@ return ast | ||
*/ | ||
export const getFrom = (ast: AST): AST => { | ||
export const from = (ast: AST): AST => { | ||
switch (ast._tag) { | ||
case "Declaration": | ||
return createDeclaration( | ||
ast.typeParameters.map(getFrom), | ||
getFrom(ast.type), | ||
ast.typeParameters.map(from), | ||
from(ast.type), | ||
ast.decode, | ||
@@ -1331,4 +1335,4 @@ ast.annotations | ||
return createTuple( | ||
ast.elements.map((e) => ({ ...e, type: getFrom(e.type) })), | ||
O.map(ast.rest, RA.mapNonEmpty(getFrom)), | ||
ast.elements.map((e) => createElement(from(e.type), e.isOptional)), | ||
O.map(ast.rest, RA.mapNonEmpty(from)), | ||
ast.isReadonly | ||
@@ -1338,65 +1342,16 @@ ) | ||
return createTypeLiteral( | ||
ast.propertySignatures.map((p) => ({ ...p, type: getFrom(p.type) })), | ||
ast.indexSignatures.map((is) => ({ ...is, type: getFrom(is.type) })) | ||
) | ||
case "Union": | ||
return createUnion(ast.types.map(getFrom)) | ||
case "Lazy": | ||
return createLazy(() => getFrom(ast.f())) | ||
case "Refinement": | ||
case "Transform": | ||
return getFrom(ast.from) | ||
} | ||
return ast | ||
} | ||
/** | ||
* @since 1.0.0 | ||
*/ | ||
export const reverse = (ast: AST): AST => { | ||
switch (ast._tag) { | ||
case "Declaration": | ||
return createDeclaration( | ||
ast.typeParameters.map(reverse), | ||
ast.type, | ||
ast.decode, | ||
ast.annotations | ||
) | ||
case "Tuple": | ||
return createTuple( | ||
ast.elements.map((e) => createElement(reverse(e.type), e.isOptional)), | ||
O.map(ast.rest, RA.mapNonEmpty(reverse)), | ||
ast.isReadonly | ||
) | ||
case "TypeLiteral": | ||
return createTypeLiteral( | ||
ast.propertySignatures.map((ps) => | ||
createPropertySignature( | ||
ps.name, | ||
reverse(ps.type), | ||
ps.isOptional, | ||
ps.isReadonly, | ||
ps.annotations | ||
) | ||
ast.propertySignatures.map((p) => | ||
createPropertySignature(p.name, from(p.type), p.isOptional, p.isReadonly) | ||
), | ||
ast.indexSignatures.map((is) => | ||
createIndexSignature(is.parameter, reverse(is.type), is.isReadonly) | ||
createIndexSignature(is.parameter, from(is.type), is.isReadonly) | ||
) | ||
) | ||
case "Union": | ||
return createUnion(ast.types.map(reverse)) | ||
return createUnion(ast.types.map(from)) | ||
case "Lazy": | ||
return createLazy(() => reverse(ast.f())) | ||
return createLazy(() => from(ast.f())) | ||
case "Refinement": | ||
return createRefinement(ast.from, ast.decode, !ast.isReversed, ast.annotations) | ||
case "Transform": | ||
return _createTransform( | ||
reverse(ast.to), | ||
reverse(ast.from), | ||
ast.encode, | ||
ast.decode, | ||
ast.propertySignatureTransformations.map((t) => | ||
createPropertySignatureTransformation(t.to, t.from, t.encode, t.decode) | ||
) | ||
) | ||
return from(ast.from) | ||
} | ||
@@ -1403,0 +1358,0 @@ return ast |
@@ -159,3 +159,3 @@ /** | ||
schema: Schema<_, A> | ||
): (a: unknown, options?: ParseOptions) => A => get(AST.getTo(schema.ast)) | ||
): (a: unknown, options?: ParseOptions) => A => get(AST.to(schema.ast)) | ||
@@ -168,3 +168,3 @@ /** | ||
schema: Schema<_, A> | ||
): (a: unknown, options?: ParseOptions) => Option<A> => getOption(AST.getTo(schema.ast)) | ||
): (a: unknown, options?: ParseOptions) => Option<A> => getOption(AST.to(schema.ast)) | ||
@@ -178,3 +178,3 @@ /** | ||
): (a: unknown, options?: ParseOptions) => E.Either<PR.ParseError, A> => | ||
getEither(AST.getTo(schema.ast)) | ||
getEither(AST.to(schema.ast)) | ||
@@ -187,3 +187,3 @@ /** | ||
schema: Schema<_, A> | ||
): (a: unknown, options?: ParseOptions) => PR.ParseResult<A> => go(AST.getTo(schema.ast)) | ||
): (a: unknown, options?: ParseOptions) => PR.ParseResult<A> => go(AST.to(schema.ast)) | ||
@@ -196,3 +196,3 @@ /** | ||
schema: Schema<_, A> | ||
): (i: unknown, options?: ParseOptions) => Promise<A> => getPromise(AST.getTo(schema.ast)) | ||
): (i: unknown, options?: ParseOptions) => Promise<A> => getPromise(AST.to(schema.ast)) | ||
@@ -206,3 +206,3 @@ /** | ||
): (a: unknown, options?: ParseOptions) => Effect.Effect<never, PR.ParseError, A> => | ||
getEffect(AST.getTo(schema.ast)) | ||
getEffect(AST.to(schema.ast)) | ||
@@ -242,3 +242,3 @@ /** | ||
export const encode = <I, A>(schema: Schema<I, A>): (a: A, options?: ParseOptions) => I => | ||
get(AST.reverse(schema.ast)) | ||
get(reverse(schema.ast)) | ||
@@ -251,3 +251,3 @@ /** | ||
schema: Schema<I, A> | ||
): (input: A, options?: ParseOptions) => Option<I> => getOption(AST.reverse(schema.ast)) | ||
): (input: A, options?: ParseOptions) => Option<I> => getOption(reverse(schema.ast)) | ||
@@ -260,4 +260,3 @@ /** | ||
schema: Schema<I, A> | ||
): (a: A, options?: ParseOptions) => E.Either<PR.ParseError, I> => | ||
getEither(AST.reverse(schema.ast)) | ||
): (a: A, options?: ParseOptions) => E.Either<PR.ParseError, I> => getEither(reverse(schema.ast)) | ||
@@ -270,3 +269,3 @@ /** | ||
schema: Schema<I, A> | ||
): (a: A, options?: ParseOptions) => PR.ParseResult<I> => go(AST.reverse(schema.ast)) | ||
): (a: A, options?: ParseOptions) => PR.ParseResult<I> => go(reverse(schema.ast)) | ||
@@ -279,3 +278,3 @@ /** | ||
schema: Schema<I, A> | ||
): (a: A, options?: ParseOptions) => Promise<I> => getPromise(AST.reverse(schema.ast)) | ||
): (a: A, options?: ParseOptions) => Promise<I> => getPromise(reverse(schema.ast)) | ||
@@ -289,3 +288,3 @@ /** | ||
): (a: A, options?: ParseOptions) => Effect.Effect<never, PR.ParseError, I> => | ||
getEffect(AST.reverse(schema.ast)) | ||
getEffect(reverse(schema.ast)) | ||
@@ -305,4 +304,4 @@ interface ParseEffectOptions extends ParseOptions { | ||
if (ast.isReversed) { | ||
const from = go(AST.getTo(ast), isBoundary) | ||
const to = go(AST.reverse(dropRightRefinement(ast.from)), false) | ||
const from = go(AST.to(ast), isBoundary) | ||
const to = go(reverse(dropRightRefinement(ast.from)), false) | ||
return (i, options) => | ||
@@ -958,3 +957,3 @@ handleForbidden(PR.flatMap(from(i, options), (a) => to(a, options)), options) | ||
const propertySignature = ast.propertySignatures[i] | ||
const type = AST.getFrom(propertySignature.type) | ||
const type = AST.from(propertySignature.type) | ||
if (AST.isLiteral(type) && !propertySignature.isOptional) { | ||
@@ -1079,1 +1078,52 @@ out.push([propertySignature.name, type]) | ||
} | ||
/** @internal */ | ||
export const reverse = (ast: AST.AST): AST.AST => { | ||
switch (ast._tag) { | ||
case "Declaration": | ||
return AST.createDeclaration( | ||
ast.typeParameters.map(reverse), | ||
ast.type, | ||
ast.decode, | ||
ast.annotations | ||
) | ||
case "Tuple": | ||
return AST.createTuple( | ||
ast.elements.map((e) => AST.createElement(reverse(e.type), e.isOptional)), | ||
O.map(ast.rest, RA.mapNonEmpty(reverse)), | ||
ast.isReadonly | ||
) | ||
case "TypeLiteral": | ||
return AST.createTypeLiteral( | ||
ast.propertySignatures.map((ps) => | ||
AST.createPropertySignature( | ||
ps.name, | ||
reverse(ps.type), | ||
ps.isOptional, | ||
ps.isReadonly, | ||
ps.annotations | ||
) | ||
), | ||
ast.indexSignatures.map((is) => | ||
AST.createIndexSignature(is.parameter, reverse(is.type), is.isReadonly) | ||
) | ||
) | ||
case "Union": | ||
return AST.createUnion(ast.types.map(reverse)) | ||
case "Lazy": | ||
return AST.createLazy(() => reverse(ast.f())) | ||
case "Refinement": | ||
return AST.createRefinement(ast.from, ast.decode, !ast.isReversed, ast.annotations) | ||
case "Transform": | ||
return AST._createTransform( | ||
reverse(ast.to), | ||
reverse(ast.from), | ||
ast.encode, | ||
ast.decode, | ||
ast.propertySignatureTransformations.map((t) => | ||
AST.createPropertySignatureTransformation(t.to, t.from, t.encode, t.decode) | ||
) | ||
) | ||
} | ||
return ast | ||
} |
@@ -37,4 +37,3 @@ /** | ||
*/ | ||
export const from = <I, A>(schema: Schema<I, A>): (i: I) => string => | ||
compile(AST.getFrom(schema.ast)) | ||
export const from = <I, A>(schema: Schema<I, A>): (i: I) => string => compile(AST.from(schema.ast)) | ||
@@ -41,0 +40,0 @@ const getHook = AST.getAnnotation<(...args: ReadonlyArray<Pretty<any>>) => Pretty<any>>( |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
912978
17401