@atproto/lex-schema 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +58 -0
- package/dist/core/$type.d.ts +7 -0
- package/dist/core/$type.d.ts.map +1 -1
- package/dist/core/$type.js.map +1 -1
- package/dist/core/property-key.d.ts.map +1 -0
- package/dist/core/property-key.js.map +1 -0
- package/dist/core/result.d.ts +7 -6
- package/dist/core/result.d.ts.map +1 -1
- package/dist/core/result.js +9 -8
- package/dist/core/result.js.map +1 -1
- package/dist/{validation → core}/schema.d.ts +21 -2
- package/dist/core/schema.d.ts.map +1 -0
- package/dist/{validation → core}/schema.js +25 -2
- package/dist/core/schema.js.map +1 -0
- package/dist/core/string-format.d.ts +37 -26
- package/dist/core/string-format.d.ts.map +1 -1
- package/dist/core/string-format.js +66 -59
- package/dist/core/string-format.js.map +1 -1
- package/dist/core/types.d.ts +3 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/validation-error.d.ts +19 -0
- package/dist/core/validation-error.d.ts.map +1 -0
- package/dist/{validation → core}/validation-error.js +13 -6
- package/dist/core/validation-error.js.map +1 -0
- package/dist/{validation → core}/validation-issue.d.ts +43 -0
- package/dist/core/validation-issue.d.ts.map +1 -0
- package/dist/{validation → core}/validation-issue.js +55 -2
- package/dist/core/validation-issue.js.map +1 -0
- package/dist/{validation → core}/validator.d.ts +5 -4
- package/dist/core/validator.d.ts.map +1 -0
- package/dist/{validation → core}/validator.js +16 -13
- package/dist/core/validator.js.map +1 -0
- package/dist/core.d.ts +5 -0
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +5 -0
- package/dist/core.js.map +1 -1
- package/dist/external.d.ts +21 -21
- package/dist/external.d.ts.map +1 -1
- package/dist/external.js +39 -55
- package/dist/external.js.map +1 -1
- package/dist/helpers.d.ts +41 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +13 -0
- package/dist/helpers.js.map +1 -0
- package/dist/schema/_parameters.d.ts +1 -1
- package/dist/schema/_parameters.d.ts.map +1 -1
- package/dist/schema/_parameters.js.map +1 -1
- package/dist/schema/array.d.ts +1 -1
- package/dist/schema/array.d.ts.map +1 -1
- package/dist/schema/array.js +2 -2
- package/dist/schema/array.js.map +1 -1
- package/dist/schema/blob.d.ts +2 -1
- package/dist/schema/blob.d.ts.map +1 -1
- package/dist/schema/blob.js +34 -20
- package/dist/schema/blob.js.map +1 -1
- package/dist/schema/boolean.d.ts +1 -1
- package/dist/schema/boolean.d.ts.map +1 -1
- package/dist/schema/boolean.js +2 -2
- package/dist/schema/boolean.js.map +1 -1
- package/dist/schema/bytes.d.ts +1 -1
- package/dist/schema/bytes.d.ts.map +1 -1
- package/dist/schema/bytes.js +2 -2
- package/dist/schema/bytes.js.map +1 -1
- package/dist/schema/cid.d.ts +1 -1
- package/dist/schema/cid.d.ts.map +1 -1
- package/dist/schema/cid.js +2 -2
- package/dist/schema/cid.js.map +1 -1
- package/dist/schema/custom.d.ts +1 -1
- package/dist/schema/custom.d.ts.map +1 -1
- package/dist/schema/custom.js +3 -3
- package/dist/schema/custom.js.map +1 -1
- package/dist/schema/dict.d.ts +1 -1
- package/dist/schema/dict.d.ts.map +1 -1
- package/dist/schema/dict.js +2 -2
- package/dist/schema/dict.js.map +1 -1
- package/dist/schema/discriminated-union.d.ts +1 -1
- package/dist/schema/discriminated-union.d.ts.map +1 -1
- package/dist/schema/discriminated-union.js +2 -2
- package/dist/schema/discriminated-union.js.map +1 -1
- package/dist/schema/enum.d.ts +1 -1
- package/dist/schema/enum.d.ts.map +1 -1
- package/dist/schema/enum.js +2 -2
- package/dist/schema/enum.js.map +1 -1
- package/dist/schema/integer.d.ts +1 -1
- package/dist/schema/integer.d.ts.map +1 -1
- package/dist/schema/integer.js +4 -4
- package/dist/schema/integer.js.map +1 -1
- package/dist/schema/intersection.d.ts +1 -2
- package/dist/schema/intersection.d.ts.map +1 -1
- package/dist/schema/intersection.js +2 -2
- package/dist/schema/intersection.js.map +1 -1
- package/dist/schema/literal.d.ts +1 -1
- package/dist/schema/literal.d.ts.map +1 -1
- package/dist/schema/literal.js +2 -2
- package/dist/schema/literal.js.map +1 -1
- package/dist/schema/never.d.ts +1 -1
- package/dist/schema/never.d.ts.map +1 -1
- package/dist/schema/never.js +2 -2
- package/dist/schema/never.js.map +1 -1
- package/dist/schema/null.d.ts +1 -1
- package/dist/schema/null.d.ts.map +1 -1
- package/dist/schema/null.js +2 -2
- package/dist/schema/null.js.map +1 -1
- package/dist/schema/nullable.d.ts +1 -1
- package/dist/schema/nullable.d.ts.map +1 -1
- package/dist/schema/nullable.js +2 -2
- package/dist/schema/nullable.js.map +1 -1
- package/dist/schema/object.d.ts +1 -2
- package/dist/schema/object.d.ts.map +1 -1
- package/dist/schema/object.js +2 -2
- package/dist/schema/object.js.map +1 -1
- package/dist/schema/optional.d.ts +1 -1
- package/dist/schema/optional.d.ts.map +1 -1
- package/dist/schema/optional.js +2 -2
- package/dist/schema/optional.js.map +1 -1
- package/dist/schema/params.d.ts +1 -3
- package/dist/schema/params.d.ts.map +1 -1
- package/dist/schema/params.js +2 -2
- package/dist/schema/params.js.map +1 -1
- package/dist/schema/payload.d.ts +17 -15
- package/dist/schema/payload.d.ts.map +1 -1
- package/dist/schema/payload.js +28 -0
- package/dist/schema/payload.js.map +1 -1
- package/dist/schema/procedure.d.ts +3 -6
- package/dist/schema/procedure.d.ts.map +1 -1
- package/dist/schema/procedure.js +1 -0
- package/dist/schema/procedure.js.map +1 -1
- package/dist/schema/query.d.ts +3 -5
- package/dist/schema/query.d.ts.map +1 -1
- package/dist/schema/query.js +1 -0
- package/dist/schema/query.js.map +1 -1
- package/dist/schema/record.d.ts +14 -14
- package/dist/schema/record.d.ts.map +1 -1
- package/dist/schema/record.js +2 -2
- package/dist/schema/record.js.map +1 -1
- package/dist/schema/ref.d.ts +1 -1
- package/dist/schema/ref.d.ts.map +1 -1
- package/dist/schema/ref.js +2 -2
- package/dist/schema/ref.js.map +1 -1
- package/dist/schema/refine.d.ts +18 -1
- package/dist/schema/refine.d.ts.map +1 -1
- package/dist/schema/refine.js +2 -2
- package/dist/schema/refine.js.map +1 -1
- package/dist/schema/regexp.d.ts +1 -1
- package/dist/schema/regexp.d.ts.map +1 -1
- package/dist/schema/regexp.js +2 -2
- package/dist/schema/regexp.js.map +1 -1
- package/dist/schema/string.d.ts +1 -2
- package/dist/schema/string.d.ts.map +1 -1
- package/dist/schema/string.js +1 -2
- package/dist/schema/string.js.map +1 -1
- package/dist/schema/subscription.d.ts +4 -8
- package/dist/schema/subscription.d.ts.map +1 -1
- package/dist/schema/subscription.js.map +1 -1
- package/dist/schema/token.d.ts +1 -1
- package/dist/schema/token.d.ts.map +1 -1
- package/dist/schema/token.js +2 -2
- package/dist/schema/token.js.map +1 -1
- package/dist/schema/typed-object.d.ts +8 -8
- package/dist/schema/typed-object.d.ts.map +1 -1
- package/dist/schema/typed-object.js +2 -2
- package/dist/schema/typed-object.js.map +1 -1
- package/dist/schema/typed-ref.d.ts +1 -1
- package/dist/schema/typed-ref.d.ts.map +1 -1
- package/dist/schema/typed-ref.js +2 -2
- package/dist/schema/typed-ref.js.map +1 -1
- package/dist/schema/typed-union.d.ts +2 -3
- package/dist/schema/typed-union.d.ts.map +1 -1
- package/dist/schema/typed-union.js +2 -2
- package/dist/schema/typed-union.js.map +1 -1
- package/dist/schema/union.d.ts +1 -1
- package/dist/schema/union.d.ts.map +1 -1
- package/dist/schema/union.js +3 -6
- package/dist/schema/union.js.map +1 -1
- package/dist/schema/unknown-object.d.ts +1 -2
- package/dist/schema/unknown-object.d.ts.map +1 -1
- package/dist/schema/unknown-object.js +2 -2
- package/dist/schema/unknown-object.js.map +1 -1
- package/dist/schema/unknown.d.ts +1 -1
- package/dist/schema/unknown.d.ts.map +1 -1
- package/dist/schema/unknown.js +2 -2
- package/dist/schema/unknown.js.map +1 -1
- package/dist/util/assertion-util.d.ts +8 -0
- package/dist/util/assertion-util.d.ts.map +1 -0
- package/dist/util/assertion-util.js +31 -0
- package/dist/util/assertion-util.js.map +1 -0
- package/dist/util/memoize.d.ts +3 -0
- package/dist/util/memoize.d.ts.map +1 -0
- package/dist/util/memoize.js +52 -0
- package/dist/util/memoize.js.map +1 -0
- package/package.json +6 -6
- package/src/core/$type.ts +4 -0
- package/src/core/result.ts +9 -8
- package/src/{validation → core}/schema.ts +29 -4
- package/src/core/string-format.ts +88 -68
- package/src/core/types.ts +4 -0
- package/src/{validation → core}/validation-error.ts +14 -6
- package/src/{validation → core}/validation-issue.ts +64 -2
- package/src/{validation → core}/validator.ts +17 -13
- package/src/core.ts +5 -0
- package/src/external.ts +75 -55
- package/src/helpers.test.ts +487 -0
- package/src/helpers.ts +75 -0
- package/src/schema/_parameters.test.ts +1 -0
- package/src/schema/_parameters.ts +1 -1
- package/src/schema/array.test.ts +1 -0
- package/src/schema/array.ts +1 -1
- package/src/schema/blob.test.ts +3 -4
- package/src/schema/blob.ts +32 -24
- package/src/schema/boolean.test.ts +1 -0
- package/src/schema/boolean.ts +1 -1
- package/src/schema/bytes.test.ts +1 -0
- package/src/schema/bytes.ts +1 -1
- package/src/schema/cid.test.ts +1 -0
- package/src/schema/cid.ts +1 -1
- package/src/schema/custom.test.ts +8 -7
- package/src/schema/custom.ts +2 -2
- package/src/schema/dict.test.ts +1 -0
- package/src/schema/dict.ts +1 -1
- package/src/schema/discriminated-union.test.ts +1 -0
- package/src/schema/discriminated-union.ts +1 -1
- package/src/schema/enum.test.ts +1 -0
- package/src/schema/enum.ts +1 -1
- package/src/schema/integer.test.ts +1 -0
- package/src/schema/integer.ts +3 -3
- package/src/schema/intersection.test.ts +1 -0
- package/src/schema/intersection.ts +2 -2
- package/src/schema/literal.test.ts +1 -0
- package/src/schema/literal.ts +1 -1
- package/src/schema/never.test.ts +1 -0
- package/src/schema/never.ts +1 -1
- package/src/schema/null.test.ts +1 -0
- package/src/schema/null.ts +1 -1
- package/src/schema/nullable.test.ts +1 -0
- package/src/schema/nullable.ts +1 -1
- package/src/schema/object.test.ts +1 -0
- package/src/schema/object.ts +3 -3
- package/src/schema/optional.test.ts +1 -0
- package/src/schema/optional.ts +1 -1
- package/src/schema/params.test.ts +1 -0
- package/src/schema/params.ts +3 -10
- package/src/schema/payload.test.ts +1 -0
- package/src/schema/payload.ts +67 -34
- package/src/schema/permission-set.test.ts +37 -36
- package/src/schema/permission.test.ts +1 -0
- package/src/schema/procedure.test.ts +2 -62
- package/src/schema/procedure.ts +8 -20
- package/src/schema/query.test.ts +23 -69
- package/src/schema/query.ts +7 -14
- package/src/schema/record.test.ts +1 -0
- package/src/schema/record.ts +13 -6
- package/src/schema/ref.test.ts +2 -1
- package/src/schema/ref.ts +1 -1
- package/src/schema/refine.test.ts +1 -0
- package/src/schema/refine.ts +19 -2
- package/src/schema/regexp.test.ts +1 -0
- package/src/schema/regexp.ts +1 -1
- package/src/schema/string.test.ts +1 -0
- package/src/schema/string.ts +8 -2
- package/src/schema/subscription.test.ts +31 -93
- package/src/schema/subscription.ts +11 -25
- package/src/schema/token.test.ts +1 -0
- package/src/schema/token.ts +1 -1
- package/src/schema/typed-object.test.ts +1 -0
- package/src/schema/typed-object.ts +10 -5
- package/src/schema/typed-ref.test.ts +1 -0
- package/src/schema/typed-ref.ts +1 -1
- package/src/schema/typed-union.test.ts +1 -0
- package/src/schema/typed-union.ts +4 -4
- package/src/schema/union.test.ts +1 -0
- package/src/schema/union.ts +2 -5
- package/src/schema/unknown-object.test.ts +1 -0
- package/src/schema/unknown-object.ts +1 -2
- package/src/schema/unknown.test.ts +1 -0
- package/src/schema/unknown.ts +1 -1
- package/src/util/array-agg.test.ts +1 -0
- package/src/util/assertion-util.ts +40 -0
- package/src/util/memoize.ts +57 -0
- package/tsconfig.tests.json +2 -2
- package/dist/validation/property-key.d.ts.map +0 -1
- package/dist/validation/property-key.js.map +0 -1
- package/dist/validation/schema.d.ts.map +0 -1
- package/dist/validation/schema.js.map +0 -1
- package/dist/validation/validation-error.d.ts +0 -9
- package/dist/validation/validation-error.d.ts.map +0 -1
- package/dist/validation/validation-error.js.map +0 -1
- package/dist/validation/validation-issue.d.ts.map +0 -1
- package/dist/validation/validation-issue.js.map +0 -1
- package/dist/validation/validator.d.ts.map +0 -1
- package/dist/validation/validator.js.map +0 -1
- package/dist/validation.d.ts +0 -6
- package/dist/validation.d.ts.map +0 -1
- package/dist/validation.js +0 -9
- package/dist/validation.js.map +0 -1
- package/src/validation.ts +0 -5
- /package/dist/{validation → core}/property-key.d.ts +0 -0
- /package/dist/{validation → core}/property-key.js +0 -0
- /package/src/{validation → core}/property-key.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string-format.js","sourceRoot":"","sources":["../../src/core/string-format.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"string-format.js","sourceRoot":"","sources":["../../src/core/string-format.ts"],"names":[],"mappings":";;;AAkCA,kCAIC;AAqID,gDAQC;AAnLD,gDAA0E;AAmGjE,iGAnGsB,2BAAgB,OAmGtB;AAlGzB,4CAiBwB;AACxB,iEAOkC;AAOlC,wBAAwB;AACxB,SAAgB,WAAW,CACzB,KAAQ;IAER,OAAO,6BAA6B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAClD,CAAC;AAgBD,4DAA4D;AAE/C,QAAA,wBAAwB,GACnC,gCAAuB,CAAA;AACZ,QAAA,iBAAiB,GAA0B,yBAAgB,CAAA;AAC3D,QAAA,eAAe,GAAwB,+BAAoB,CAAA;AAC3D,QAAA,oBAAoB,GAC/B,4BAAmB,CAAA;AACR,QAAA,eAAe,GAAwB,uBAAc,CAAA;AACrD,QAAA,kBAAkB,GAA2B,0BAAiB,CAAA;AAC9D,QAAA,oBAAoB,GAC/B,IAAA,wCAAoB,EAClB,2BAAgB,EAChB,uBAAuB,CACxB,CAAA;AACU,QAAA,gBAAgB,GAAyB,wBAAe,CAAA;AACxD,QAAA,qBAAqB,GAChC,6BAAoB,CAAA;AACT,QAAA,eAAe,GAAwB,uBAAc,CAAA;AACrD,QAAA,eAAe,GAC1B,IAAA,wCAAoB,EAAY,WAAW,EAAE,aAAa,CAAC,CAAA;AAEhD,QAAA,oBAAoB;AAC/B,aAAa,CAAC,IAAA,sCAAkB,EAAC,gCAAwB,CAAC,CAAA;AAC/C,QAAA,aAAa;AACxB,aAAa,CAAC,IAAA,sCAAkB,EAAC,yBAAgB,CAAC,CAAA;AACvC,QAAA,WAAW;AACtB,aAAa,CAAC,IAAA,sCAAkB,EAAC,+BAAoB,CAAC,CAAA;AAC3C,QAAA,gBAAgB;AAC3B,aAAa,CAAC,IAAA,sCAAkB,EAAC,4BAAmB,CAAC,CAAA;AAC1C,QAAA,WAAW;AACtB,aAAa,CAAC,IAAA,sCAAkB,EAAC,uBAAc,CAAC,CAAA;AACrC,QAAA,cAAc;AACzB,aAAa,CAAC,IAAA,sCAAkB,EAAC,0BAAiB,CAAC,CAAA;AACxC,QAAA,gBAAgB;AAC3B,aAAa,CAAC,IAAA,sCAAkB,EAAC,4BAAoB,CAAC,CAAA;AAC3C,QAAA,YAAY;AACvB,aAAa,CAAC,IAAA,sCAAkB,EAAC,wBAAe,CAAC,CAAA;AACtC,QAAA,iBAAiB;AAC5B,aAAa,CAAC,IAAA,sCAAkB,EAAC,6BAAoB,CAAC,CAAA;AAC3C,QAAA,WAAW;AACtB,aAAa,CAAC,IAAA,sCAAkB,EAAC,uBAAc,CAAC,CAAA;AACrC,QAAA,WAAW;AACtB,aAAa,CAAC,IAAA,sCAAkB,EAAC,uBAAe,CAAC,CAAA;AAGtC,QAAA,oBAAoB;AAC/B,aAAa,CAAC,IAAA,uCAAmB,EAAC,gCAAwB,CAAC,CAAA;AAChD,QAAA,aAAa;AACxB,aAAa,CAAC,IAAA,uCAAmB,EAAC,gCAAwB,CAAC,CAAA;AAChD,QAAA,WAAW;AACtB,aAAa,CAAC,IAAA,uCAAmB,EAAC,uBAAe,CAAC,CAAA;AACvC,QAAA,gBAAgB;AAC3B,aAAa,CAAC,IAAA,uCAAmB,EAAC,4BAAoB,CAAC,CAAA;AAC5C,QAAA,WAAW;AACtB,aAAa,CAAC,IAAA,uCAAmB,EAAC,uBAAe,CAAC,CAAA;AACvC,QAAA,cAAc;AACzB,aAAa,CAAC,IAAA,uCAAmB,EAAC,0BAAkB,CAAC,CAAA;AAC1C,QAAA,YAAY;AACvB,aAAa,CAAC,IAAA,uCAAmB,EAAC,wBAAgB,CAAC,CAAA;AACxC,QAAA,iBAAiB;AAC5B,aAAa,CAAC,IAAA,uCAAmB,EAAC,6BAAqB,CAAC,CAAA;AAC7C,QAAA,WAAW;AACtB,aAAa,CAAC,IAAA,uCAAmB,EAAC,uBAAe,CAAC,CAAA;AAEpD,wCAAwC;AAE3B,QAAA,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1C,UAAU;IACV,KAAK;IACL,QAAQ;IACR,KAAK;IACL,QAAQ;IACR,eAAe;IACf,MAAM;IACN,KAAK;IACL,UAAU;IACV,KAAK;IACL,YAAY;CACJ,CAAC,CAAA;AAuBX,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,GAAG,CAAsC;IAC5E,CAAC,eAAe,EAAE,gCAAwB,CAAC;IAC3C,CAAC,QAAQ,EAAE,yBAAiB,CAAC;IAC7B,CAAC,KAAK,EAAE,uBAAe,CAAC;IACxB,CAAC,UAAU,EAAE,4BAAoB,CAAC;IAClC,CAAC,KAAK,EAAE,uBAAe,CAAC;IACxB,CAAC,QAAQ,EAAE,0BAAkB,CAAC;IAC9B,CAAC,UAAU,EAAE,4BAAoB,CAAC;IAClC,CAAC,MAAM,EAAE,wBAAgB,CAAC;IAC1B,CAAC,YAAY,EAAE,6BAAqB,CAAC;IACrC,CAAC,KAAK,EAAE,uBAAe,CAAC;IACxB,CAAC,KAAK,EAAE,uBAAe,CAAC;CAChB,CAAC,CAAA;AAEX,wBAAwB;AACxB,SAAgB,kBAAkB,CAChC,KAAa,EACb,MAAS;IAET,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACvC,IAAI,QAAQ;QAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7B,aAAa;;QACR,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,EAAE,CAAC,CAAA;AAC1D,CAAC","sourcesContent":["import { ensureValidCidString, isLanguageString } from '@atproto/lex-data'\nimport {\n AtIdentifierString,\n AtUriString,\n DatetimeString,\n DidString,\n HandleString,\n NsidString,\n RecordKeyString,\n TidString,\n ensureValidAtIdentifier,\n ensureValidAtUri,\n ensureValidDatetime,\n ensureValidDid,\n ensureValidHandle,\n ensureValidNsid,\n ensureValidRecordKey,\n ensureValidTid,\n} from '@atproto/syntax'\nimport {\n AssertFn,\n CastFn,\n CheckFn,\n createAssertFunction,\n createCastFunction,\n createCheckFunction,\n} from '../util/assertion-util.js'\n\n// Format utilities missing from @atproto/syntax\nexport type CidString = string\nexport type LanguageString = string\nexport type UriString = `${string}:${string}`\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function isUriString<T extends string>(\n input: T,\n): input is T & UriString {\n return /^\\w+:(?:\\/\\/)?[^\\s/][^\\s]*$/.test(input)\n}\n\n// Re-export utility typed as assertion functions so that TypeScript can\n// infer the narrowed type after calling them.\n\nexport type {\n AtIdentifierString,\n AtUriString,\n DatetimeString,\n DidString,\n HandleString,\n NsidString,\n RecordKeyString,\n TidString,\n} from '@atproto/syntax'\n\n// Export utilities for formats missing from @atproto/syntax\n\nexport const assertAtIdentifierString: AssertFn<AtIdentifierString> =\n ensureValidAtIdentifier\nexport const assertAtUriString: AssertFn<AtUriString> = ensureValidAtUri\nexport const assertCidString: AssertFn<CidString> = ensureValidCidString\nexport const assertDatetimeString: AssertFn<DatetimeString> =\n ensureValidDatetime\nexport const assertDidString: AssertFn<DidString> = ensureValidDid\nexport const assertHandleString: AssertFn<HandleString> = ensureValidHandle\nexport const assertLanguageString: AssertFn<LanguageString> =\n createAssertFunction<LanguageString>(\n isLanguageString,\n 'Invalid BCP 47 string',\n )\nexport const assertNsidString: AssertFn<NsidString> = ensureValidNsid\nexport const assertRecordKeyString: AssertFn<RecordKeyString> =\n ensureValidRecordKey\nexport const assertTidString: AssertFn<TidString> = ensureValidTid\nexport const assertUriString: AssertFn<UriString> =\n createAssertFunction<UriString>(isUriString, 'Invalid URI')\n\nexport const asAtIdentifierString: CastFn<AtIdentifierString> =\n /*#__PURE__*/ createCastFunction(assertAtIdentifierString)\nexport const asAtUriString: CastFn<AtUriString> =\n /*#__PURE__*/ createCastFunction(ensureValidAtUri)\nexport const asCidString: CastFn<CidString> =\n /*#__PURE__*/ createCastFunction(ensureValidCidString)\nexport const asDatetimeString: CastFn<DatetimeString> =\n /*#__PURE__*/ createCastFunction(ensureValidDatetime)\nexport const asDidString: CastFn<DidString> =\n /*#__PURE__*/ createCastFunction(ensureValidDid)\nexport const asHandleString: CastFn<HandleString> =\n /*#__PURE__*/ createCastFunction(ensureValidHandle)\nexport const asLanguageString: CastFn<LanguageString> =\n /*#__PURE__*/ createCastFunction(assertLanguageString)\nexport const asNsidString: CastFn<NsidString> =\n /*#__PURE__*/ createCastFunction(ensureValidNsid)\nexport const asRecordKeyString: CastFn<RecordKeyString> =\n /*#__PURE__*/ createCastFunction(ensureValidRecordKey)\nexport const asTidString: CastFn<TidString> =\n /*#__PURE__*/ createCastFunction(ensureValidTid)\nexport const asUriString: CastFn<UriString> =\n /*#__PURE__*/ createCastFunction(assertUriString)\n\nexport { isLanguageString }\nexport const isAtIdentifierString: CheckFn<AtIdentifierString> =\n /*#__PURE__*/ createCheckFunction(assertAtIdentifierString)\nexport const isAtUriString: CheckFn<AtUriString> =\n /*#__PURE__*/ createCheckFunction(assertAtIdentifierString)\nexport const isCidString: CheckFn<CidString> =\n /*#__PURE__*/ createCheckFunction(assertCidString)\nexport const isDatetimeString: CheckFn<DatetimeString> =\n /*#__PURE__*/ createCheckFunction(assertDatetimeString)\nexport const isDidString: CheckFn<DidString> =\n /*#__PURE__*/ createCheckFunction(assertDidString)\nexport const isHandleString: CheckFn<HandleString> =\n /*#__PURE__*/ createCheckFunction(assertHandleString)\nexport const isNsidString: CheckFn<NsidString> =\n /*#__PURE__*/ createCheckFunction(assertNsidString)\nexport const isRecordKeyString: CheckFn<RecordKeyString> =\n /*#__PURE__*/ createCheckFunction(assertRecordKeyString)\nexport const isTidString: CheckFn<TidString> =\n /*#__PURE__*/ createCheckFunction(assertTidString)\n\n// String formatting types and utilities\n\nexport const STRING_FORMATS = Object.freeze([\n 'datetime',\n 'uri',\n 'at-uri',\n 'did',\n 'handle',\n 'at-identifier',\n 'nsid',\n 'cid',\n 'language',\n 'tid',\n 'record-key',\n] as const)\n\nexport type StringFormat = (typeof STRING_FORMATS)[number]\n\nexport type InferStringFormat<F> =\n //\n F extends 'datetime'\n ? DatetimeString\n : F extends 'uri'\n ? UriString\n : F extends 'at-uri'\n ? AtUriString\n : F extends 'did'\n ? DidString\n : F extends 'handle'\n ? HandleString\n : F extends 'at-identifier'\n ? AtIdentifierString\n : F extends 'nsid'\n ? NsidString\n : // LanguageString | CidString | TidString | RecordKeyString\n string\n\nconst formatters = /*#__PURE__*/ new Map<StringFormat, (str: string) => void>([\n ['at-identifier', assertAtIdentifierString],\n ['at-uri', assertAtUriString],\n ['cid', assertCidString],\n ['datetime', assertDatetimeString],\n ['did', assertDidString],\n ['handle', assertHandleString],\n ['language', assertLanguageString],\n ['nsid', assertNsidString],\n ['record-key', assertRecordKeyString],\n ['tid', assertTidString],\n ['uri', assertUriString],\n] as const)\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function assertStringFormat<F extends StringFormat>(\n input: string,\n format: F,\n): asserts input is InferStringFormat<F> {\n const assertFn = formatters.get(format)\n if (assertFn) assertFn(input)\n // Fool-proof\n else throw new Error(`Unknown string format: ${format}`)\n}\n"]}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -23,5 +23,8 @@ export type WithOptionalProperties<P> = Simplify<{
|
|
|
23
23
|
} & {
|
|
24
24
|
-readonly [K in keyof P as undefined extends P[K] ? K : never]?: P[K];
|
|
25
25
|
}>;
|
|
26
|
+
export type OmitKey<T, K extends keyof T> = {
|
|
27
|
+
[K2 in keyof T as K2 extends K ? never : K2]: T[K2];
|
|
28
|
+
};
|
|
26
29
|
export {};
|
|
27
30
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/core/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;AAEzD,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;AAEzE,OAAO,CAAC,MAAM,YAAY,EAAE,OAAO,MAAM,CAAA;AACzC;;;GAGG;AACH,MAAM,MAAM,UAAU,CAAC,OAAO,SAAS,MAAM,IAAI,OAAO,YAAY,GAAG;IACrE,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CACxB,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAAI,QAAQ,CAC9C;IACE,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,IAAI,SAAS,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACvE,GAAG;IACF,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,IAAI,SAAS,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CACtE,CACF,CAAA"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;AAEzD,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;AAEzE,OAAO,CAAC,MAAM,YAAY,EAAE,OAAO,MAAM,CAAA;AACzC;;;GAGG;AACH,MAAM,MAAM,UAAU,CAAC,OAAO,SAAS,MAAM,IAAI,OAAO,YAAY,GAAG;IACrE,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CACxB,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAAI,QAAQ,CAC9C;IACE,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,IAAI,SAAS,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACvE,GAAG;IACF,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,IAAI,SAAS,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CACtE,CACF,CAAA;AAED,MAAM,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI;KACzC,EAAE,IAAI,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;CACpD,CAAA"}
|
package/dist/core/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Same as {@link string} but prevents TypeScript allowing union types to\n * be widened to `string` in IDEs.\n */\nexport type UnknownString = string & NonNullable<unknown>\n\nexport type Simplify<T> = { [K in keyof T]: T[K] } & NonNullable<unknown>\n\ndeclare const __restricted: unique symbol\n/**\n * A type that represents a value that cannot be used, with a custom\n * message explaining the restriction.\n */\nexport type Restricted<Message extends string> = typeof __restricted & {\n [__restricted]: Message\n}\n\n/**\n * Converts all properties of `P` that are optional (i.e. may be `undefined`)\n * into actual optional properties on the resulting type.\n */\nexport type WithOptionalProperties<P> = Simplify<\n {\n -readonly [K in keyof P as undefined extends P[K] ? never : K]-?: P[K]\n } & {\n -readonly [K in keyof P as undefined extends P[K] ? K : never]?: P[K]\n }\n>\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Same as {@link string} but prevents TypeScript allowing union types to\n * be widened to `string` in IDEs.\n */\nexport type UnknownString = string & NonNullable<unknown>\n\nexport type Simplify<T> = { [K in keyof T]: T[K] } & NonNullable<unknown>\n\ndeclare const __restricted: unique symbol\n/**\n * A type that represents a value that cannot be used, with a custom\n * message explaining the restriction.\n */\nexport type Restricted<Message extends string> = typeof __restricted & {\n [__restricted]: Message\n}\n\n/**\n * Converts all properties of `P` that are optional (i.e. may be `undefined`)\n * into actual optional properties on the resulting type.\n */\nexport type WithOptionalProperties<P> = Simplify<\n {\n -readonly [K in keyof P as undefined extends P[K] ? never : K]-?: P[K]\n } & {\n -readonly [K in keyof P as undefined extends P[K] ? K : never]?: P[K]\n }\n>\n\nexport type OmitKey<T, K extends keyof T> = {\n [K2 in keyof T as K2 extends K ? never : K2]: T[K2]\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { LexError } from '@atproto/lex-data';
|
|
2
|
+
import { ResultFailure } from './result.js';
|
|
3
|
+
import { Issue } from './validation-issue.js';
|
|
4
|
+
export declare class ValidationError extends LexError {
|
|
5
|
+
name: string;
|
|
6
|
+
readonly issues: Issue[];
|
|
7
|
+
constructor(issues: Issue[], options?: ErrorOptions);
|
|
8
|
+
toJSON(): {
|
|
9
|
+
issues: {
|
|
10
|
+
code: string;
|
|
11
|
+
path: readonly import("./property-key.js").PropertyKey[];
|
|
12
|
+
message: string;
|
|
13
|
+
}[];
|
|
14
|
+
error: string;
|
|
15
|
+
message?: string;
|
|
16
|
+
};
|
|
17
|
+
static fromFailures(failures: ResultFailure<ValidationError>[]): ValidationError;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=validation-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-error.d.ts","sourceRoot":"","sources":["../../src/core/validation-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE5C,OAAO,EAAE,aAAa,EAAiB,MAAM,aAAa,CAAA;AAC1D,OAAO,EACL,KAAK,EAGN,MAAM,uBAAuB,CAAA;AAE9B,qBAAa,eAAgB,SAAQ,QAAQ;IAC3C,IAAI,SAAoB;IAExB,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,CAAA;gBAEZ,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY;IAMnD,MAAM;;;;;;;;;IAON,MAAM,CAAC,YAAY,CACjB,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,EAAE,GACzC,eAAe;CAQnB"}
|
|
@@ -1,30 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ValidationError = void 0;
|
|
4
|
-
const
|
|
4
|
+
const lex_data_1 = require("@atproto/lex-data");
|
|
5
5
|
const array_agg_js_1 = require("../util/array-agg.js");
|
|
6
|
+
const result_js_1 = require("./result.js");
|
|
6
7
|
const validation_issue_js_1 = require("./validation-issue.js");
|
|
7
|
-
class ValidationError extends
|
|
8
|
+
class ValidationError extends lex_data_1.LexError {
|
|
8
9
|
name = 'ValidationError';
|
|
9
10
|
issues;
|
|
10
11
|
constructor(issues, options) {
|
|
11
12
|
const issuesAgg = aggregateIssues(issues);
|
|
12
|
-
super(issuesAgg.join(', '), options);
|
|
13
|
+
super('InvalidRequest', issuesAgg.join(', '), options);
|
|
13
14
|
this.issues = issuesAgg;
|
|
14
15
|
}
|
|
16
|
+
toJSON() {
|
|
17
|
+
return {
|
|
18
|
+
...super.toJSON(),
|
|
19
|
+
issues: this.issues.map((issue) => issue.toJSON()),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
15
22
|
static fromFailures(failures) {
|
|
16
23
|
if (failures.length === 1)
|
|
17
|
-
return failures[0]
|
|
24
|
+
return (0, result_js_1.failureReason)(failures[0]);
|
|
18
25
|
const issues = failures.flatMap(extractFailureIssues);
|
|
19
26
|
return new ValidationError(issues, {
|
|
20
27
|
// Keep the original errors as the cause chain
|
|
21
|
-
cause: failures.map(
|
|
28
|
+
cause: failures.map(result_js_1.failureReason),
|
|
22
29
|
});
|
|
23
30
|
}
|
|
24
31
|
}
|
|
25
32
|
exports.ValidationError = ValidationError;
|
|
26
33
|
function extractFailureIssues(result) {
|
|
27
|
-
return result.
|
|
34
|
+
return result.reason.issues;
|
|
28
35
|
}
|
|
29
36
|
function aggregateIssues(issues) {
|
|
30
37
|
// Quick path for common cases
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-error.js","sourceRoot":"","sources":["../../src/core/validation-error.ts"],"names":[],"mappings":";;;AAAA,gDAA4C;AAC5C,uDAA+C;AAC/C,2CAA0D;AAC1D,+DAI8B;AAE9B,MAAa,eAAgB,SAAQ,mBAAQ;IAC3C,IAAI,GAAG,iBAAiB,CAAA;IAEf,MAAM,CAAS;IAExB,YAAY,MAAe,EAAE,OAAsB;QACjD,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;QACzC,KAAK,CAAC,gBAAgB,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAA;QACtD,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA;IACzB,CAAC;IAED,MAAM;QACJ,OAAO;YACL,GAAG,KAAK,CAAC,MAAM,EAAE;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;SACnD,CAAA;IACH,CAAC;IAED,MAAM,CAAC,YAAY,CACjB,QAA0C;QAE1C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAA,yBAAa,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;QAC5D,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;QACrD,OAAO,IAAI,eAAe,CAAC,MAAM,EAAE;YACjC,8CAA8C;YAC9C,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,yBAAa,CAAC;SACnC,CAAC,CAAA;IACJ,CAAC;CACF;AA5BD,0CA4BC;AAED,SAAS,oBAAoB,CAAC,MAAsC;IAClE,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAA;AAC7B,CAAC;AAED,SAAS,eAAe,CAAC,MAAe;IACtC,8BAA8B;IAC9B,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,MAAM,CAAA;IACrC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;QAAE,OAAO,MAAM,CAAA;IAE3E,OAAO;QACL,8CAA8C;QAC9C,GAAG,IAAA,uBAAQ,EACT,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,YAAY,sCAAgB,CAAC,EAC3D,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAC9C,CAAC,MAAM,EAAE,EAAE,CACT,IAAI,sCAAgB,CAClB,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EACd,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EACf,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC3D,CACJ;QACD,+CAA+C;QAC/C,GAAG,IAAA,uBAAQ,EACT,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,YAAY,uCAAiB,CAAC,EAC5D,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAC9C,CAAC,MAAM,EAAE,EAAE,CACT,IAAI,uCAAiB,CACnB,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EACd,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EACf,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CACzD,CACJ;QACD,4BAA4B;QAC5B,GAAG,MAAM,CAAC,MAAM,CACd,CAAC,KAAK,EAAE,EAAE,CACR,CAAC,CAAC,KAAK,YAAY,sCAAgB,CAAC;YACpC,CAAC,CAAC,KAAK,YAAY,uCAAiB,CAAC,CACxC;KACF,CAAA;AACH,CAAC;AAED,wBAAwB;AACxB,SAAS,oBAAoB,CAC3B,CAAyB,EACzB,CAAyB;IAEzB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAA;IACjC,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC","sourcesContent":["import { LexError } from '@atproto/lex-data'\nimport { arrayAgg } from '../util/array-agg.js'\nimport { ResultFailure, failureReason } from './result.js'\nimport {\n Issue,\n IssueInvalidType,\n IssueInvalidValue,\n} from './validation-issue.js'\n\nexport class ValidationError extends LexError {\n name = 'ValidationError'\n\n readonly issues: Issue[]\n\n constructor(issues: Issue[], options?: ErrorOptions) {\n const issuesAgg = aggregateIssues(issues)\n super('InvalidRequest', issuesAgg.join(', '), options)\n this.issues = issuesAgg\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n issues: this.issues.map((issue) => issue.toJSON()),\n }\n }\n\n static fromFailures(\n failures: ResultFailure<ValidationError>[],\n ): ValidationError {\n if (failures.length === 1) return failureReason(failures[0])\n const issues = failures.flatMap(extractFailureIssues)\n return new ValidationError(issues, {\n // Keep the original errors as the cause chain\n cause: failures.map(failureReason),\n })\n }\n}\n\nfunction extractFailureIssues(result: ResultFailure<ValidationError>) {\n return result.reason.issues\n}\n\nfunction aggregateIssues(issues: Issue[]): Issue[] {\n // Quick path for common cases\n if (issues.length <= 1) return issues\n if (issues.length === 2 && issues[0].code !== issues[1].code) return issues\n\n return [\n // Aggregate invalid_type with identical paths\n ...arrayAgg(\n issues.filter((issue) => issue instanceof IssueInvalidType),\n (a, b) => comparePropertyPaths(a.path, b.path),\n (issues) =>\n new IssueInvalidType(\n issues[0].path,\n issues[0].input,\n Array.from(new Set(issues.flatMap((iss) => iss.expected))),\n ),\n ),\n // Aggregate invalid_value with identical paths\n ...arrayAgg(\n issues.filter((issue) => issue instanceof IssueInvalidValue),\n (a, b) => comparePropertyPaths(a.path, b.path),\n (issues) =>\n new IssueInvalidValue(\n issues[0].path,\n issues[0].input,\n Array.from(new Set(issues.flatMap((iss) => iss.values))),\n ),\n ),\n // Pass through other issues\n ...issues.filter(\n (issue) =>\n !(issue instanceof IssueInvalidType) &&\n !(issue instanceof IssueInvalidValue),\n ),\n ]\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nfunction comparePropertyPaths(\n a: readonly PropertyKey[],\n b: readonly PropertyKey[],\n) {\n if (a.length !== b.length) return false\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false\n }\n return true\n}\n"]}
|
|
@@ -5,6 +5,11 @@ export declare abstract class Issue {
|
|
|
5
5
|
readonly input: unknown;
|
|
6
6
|
constructor(code: string, path: readonly PropertyKey[], input: unknown);
|
|
7
7
|
abstract toString(): string;
|
|
8
|
+
toJSON(): {
|
|
9
|
+
code: string;
|
|
10
|
+
path: readonly PropertyKey[];
|
|
11
|
+
message: string;
|
|
12
|
+
};
|
|
8
13
|
}
|
|
9
14
|
export declare class IssueCustom extends Issue {
|
|
10
15
|
readonly path: readonly PropertyKey[];
|
|
@@ -18,22 +23,46 @@ export declare class IssueInvalidFormat extends Issue {
|
|
|
18
23
|
readonly message?: string | undefined;
|
|
19
24
|
constructor(path: readonly PropertyKey[], input: unknown, format: string, message?: string | undefined);
|
|
20
25
|
toString(): string;
|
|
26
|
+
toJSON(): {
|
|
27
|
+
format: string;
|
|
28
|
+
code: string;
|
|
29
|
+
path: readonly PropertyKey[];
|
|
30
|
+
message: string;
|
|
31
|
+
};
|
|
21
32
|
get formatDescription(): string;
|
|
22
33
|
}
|
|
23
34
|
export declare class IssueInvalidType extends Issue {
|
|
24
35
|
readonly expected: readonly string[];
|
|
25
36
|
constructor(path: readonly PropertyKey[], input: unknown, expected: readonly string[]);
|
|
26
37
|
toString(): string;
|
|
38
|
+
toJSON(): {
|
|
39
|
+
expected: readonly string[];
|
|
40
|
+
code: string;
|
|
41
|
+
path: readonly PropertyKey[];
|
|
42
|
+
message: string;
|
|
43
|
+
};
|
|
27
44
|
}
|
|
28
45
|
export declare class IssueInvalidValue extends Issue {
|
|
29
46
|
readonly values: readonly unknown[];
|
|
30
47
|
constructor(path: readonly PropertyKey[], input: unknown, values: readonly unknown[]);
|
|
31
48
|
toString(): string;
|
|
49
|
+
toJSON(): {
|
|
50
|
+
values: readonly unknown[];
|
|
51
|
+
code: string;
|
|
52
|
+
path: readonly PropertyKey[];
|
|
53
|
+
message: string;
|
|
54
|
+
};
|
|
32
55
|
}
|
|
33
56
|
export declare class IssueRequiredKey extends Issue {
|
|
34
57
|
readonly key: PropertyKey;
|
|
35
58
|
constructor(path: readonly PropertyKey[], input: unknown, key: PropertyKey);
|
|
36
59
|
toString(): string;
|
|
60
|
+
toJSON(): {
|
|
61
|
+
key: PropertyKey;
|
|
62
|
+
code: string;
|
|
63
|
+
path: readonly PropertyKey[];
|
|
64
|
+
message: string;
|
|
65
|
+
};
|
|
37
66
|
}
|
|
38
67
|
export type MeasurableType = 'array' | 'string' | 'integer' | 'grapheme' | 'bytes' | 'blob';
|
|
39
68
|
export declare class IssueTooBig extends Issue {
|
|
@@ -42,6 +71,13 @@ export declare class IssueTooBig extends Issue {
|
|
|
42
71
|
readonly actual: number;
|
|
43
72
|
constructor(path: readonly PropertyKey[], input: unknown, maximum: number, type: MeasurableType, actual: number);
|
|
44
73
|
toString(): string;
|
|
74
|
+
toJSON(): {
|
|
75
|
+
type: MeasurableType;
|
|
76
|
+
maximum: number;
|
|
77
|
+
code: string;
|
|
78
|
+
path: readonly PropertyKey[];
|
|
79
|
+
message: string;
|
|
80
|
+
};
|
|
45
81
|
}
|
|
46
82
|
export declare class IssueTooSmall extends Issue {
|
|
47
83
|
readonly minimum: number;
|
|
@@ -49,5 +85,12 @@ export declare class IssueTooSmall extends Issue {
|
|
|
49
85
|
readonly actual: number;
|
|
50
86
|
constructor(path: readonly PropertyKey[], input: unknown, minimum: number, type: MeasurableType, actual: number);
|
|
51
87
|
toString(): string;
|
|
88
|
+
toJSON(): {
|
|
89
|
+
type: MeasurableType;
|
|
90
|
+
minimum: number;
|
|
91
|
+
code: string;
|
|
92
|
+
path: readonly PropertyKey[];
|
|
93
|
+
message: string;
|
|
94
|
+
};
|
|
52
95
|
}
|
|
53
96
|
//# sourceMappingURL=validation-issue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-issue.d.ts","sourceRoot":"","sources":["../../src/core/validation-issue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,8BAAsB,KAAK;IAEvB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE;IACrC,QAAQ,CAAC,KAAK,EAAE,OAAO;gBAFd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,SAAS,WAAW,EAAE,EAC5B,KAAK,EAAE,OAAO;IAGzB,QAAQ,CAAC,QAAQ,IAAI,MAAM;IAE3B,MAAM;;;;;CAOP;AAED,qBAAa,WAAY,SAAQ,KAAK;IAElC,QAAQ,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE;IACrC,QAAQ,CAAC,KAAK,EAAE,OAAO;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM;gBAFf,IAAI,EAAE,SAAS,WAAW,EAAE,EAC5B,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,MAAM;IAK1B,QAAQ;CAGT;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAIzC,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM;gBAHzB,IAAI,EAAE,SAAS,WAAW,EAAE,EAC5B,KAAK,EAAE,OAAO,EACL,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,YAAA;IAK3B,QAAQ;IAIR,MAAM;;;;;;IAON,IAAI,iBAAiB,IAAI,MAAM,CAiB9B;CACF;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IAIvC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE;gBAFpC,IAAI,EAAE,SAAS,WAAW,EAAE,EAC5B,KAAK,EAAE,OAAO,EACL,QAAQ,EAAE,SAAS,MAAM,EAAE;IAKtC,QAAQ;IAIR,MAAM;;;;;;CAMP;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAIxC,QAAQ,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE;gBAFnC,IAAI,EAAE,SAAS,WAAW,EAAE,EAC5B,KAAK,EAAE,OAAO,EACL,MAAM,EAAE,SAAS,OAAO,EAAE;IAKrC,QAAQ;IAIR,MAAM;;;;;;CAMP;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IAIvC,QAAQ,CAAC,GAAG,EAAE,WAAW;gBAFzB,IAAI,EAAE,SAAS,WAAW,EAAE,EAC5B,KAAK,EAAE,OAAO,EACL,GAAG,EAAE,WAAW;IAK3B,QAAQ;IAIR,MAAM;;;;;;CAMP;AAED,MAAM,MAAM,cAAc,GACtB,OAAO,GACP,QAAQ,GACR,SAAS,GACT,UAAU,GACV,OAAO,GACP,MAAM,CAAA;AAEV,qBAAa,WAAY,SAAQ,KAAK;IAIlC,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,IAAI,EAAE,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM;gBAJvB,IAAI,EAAE,SAAS,WAAW,EAAE,EAC5B,KAAK,EAAE,OAAO,EACL,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,MAAM;IAKzB,QAAQ;IAIR,MAAM;;;;;;;CAOP;AAED,qBAAa,aAAc,SAAQ,KAAK;IAIpC,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,IAAI,EAAE,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM;gBAJvB,IAAI,EAAE,SAAS,WAAW,EAAE,EAC5B,KAAK,EAAE,OAAO,EACL,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,MAAM;IAKzB,QAAQ;IAIR,MAAM;;;;;;;CAOP"}
|
|
@@ -11,6 +11,13 @@ class Issue {
|
|
|
11
11
|
this.path = path;
|
|
12
12
|
this.input = input;
|
|
13
13
|
}
|
|
14
|
+
toJSON() {
|
|
15
|
+
return {
|
|
16
|
+
code: this.code,
|
|
17
|
+
path: this.path,
|
|
18
|
+
message: this.toString(),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
14
21
|
}
|
|
15
22
|
exports.Issue = Issue;
|
|
16
23
|
class IssueCustom extends Issue {
|
|
@@ -39,6 +46,12 @@ class IssueInvalidFormat extends Issue {
|
|
|
39
46
|
toString() {
|
|
40
47
|
return `Invalid ${this.formatDescription} format${this.message ? ` (${this.message})` : ''}${stringifyPath(this.path)} (got ${stringifyValue(this.input)})`;
|
|
41
48
|
}
|
|
49
|
+
toJSON() {
|
|
50
|
+
return {
|
|
51
|
+
...super.toJSON(),
|
|
52
|
+
format: this.format,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
42
55
|
get formatDescription() {
|
|
43
56
|
switch (this.format) {
|
|
44
57
|
case 'at-identifier':
|
|
@@ -68,6 +81,12 @@ class IssueInvalidType extends Issue {
|
|
|
68
81
|
toString() {
|
|
69
82
|
return `Expected ${oneOf(this.expected.map(stringifyExpectedType))} value type${stringifyPath(this.path)} (got ${stringifyType(this.input)})`;
|
|
70
83
|
}
|
|
84
|
+
toJSON() {
|
|
85
|
+
return {
|
|
86
|
+
...super.toJSON(),
|
|
87
|
+
expected: this.expected,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
71
90
|
}
|
|
72
91
|
exports.IssueInvalidType = IssueInvalidType;
|
|
73
92
|
class IssueInvalidValue extends Issue {
|
|
@@ -79,6 +98,12 @@ class IssueInvalidValue extends Issue {
|
|
|
79
98
|
toString() {
|
|
80
99
|
return `Expected ${oneOf(this.values.map(stringifyValue))}${stringifyPath(this.path)} (got ${stringifyValue(this.input)})`;
|
|
81
100
|
}
|
|
101
|
+
toJSON() {
|
|
102
|
+
return {
|
|
103
|
+
...super.toJSON(),
|
|
104
|
+
values: this.values,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
82
107
|
}
|
|
83
108
|
exports.IssueInvalidValue = IssueInvalidValue;
|
|
84
109
|
class IssueRequiredKey extends Issue {
|
|
@@ -90,6 +115,12 @@ class IssueRequiredKey extends Issue {
|
|
|
90
115
|
toString() {
|
|
91
116
|
return `Missing required key "${String(this.key)}"${stringifyPath(this.path)}`;
|
|
92
117
|
}
|
|
118
|
+
toJSON() {
|
|
119
|
+
return {
|
|
120
|
+
...super.toJSON(),
|
|
121
|
+
key: this.key,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
93
124
|
}
|
|
94
125
|
exports.IssueRequiredKey = IssueRequiredKey;
|
|
95
126
|
class IssueTooBig extends Issue {
|
|
@@ -105,6 +136,13 @@ class IssueTooBig extends Issue {
|
|
|
105
136
|
toString() {
|
|
106
137
|
return `${this.type} too big (maximum ${this.maximum})${stringifyPath(this.path)} (got ${this.actual})`;
|
|
107
138
|
}
|
|
139
|
+
toJSON() {
|
|
140
|
+
return {
|
|
141
|
+
...super.toJSON(),
|
|
142
|
+
type: this.type,
|
|
143
|
+
maximum: this.maximum,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
108
146
|
}
|
|
109
147
|
exports.IssueTooBig = IssueTooBig;
|
|
110
148
|
class IssueTooSmall extends Issue {
|
|
@@ -120,6 +158,13 @@ class IssueTooSmall extends Issue {
|
|
|
120
158
|
toString() {
|
|
121
159
|
return `${this.type} too small (minimum ${this.minimum})${stringifyPath(this.path)} (got ${this.actual})`;
|
|
122
160
|
}
|
|
161
|
+
toJSON() {
|
|
162
|
+
return {
|
|
163
|
+
...super.toJSON(),
|
|
164
|
+
type: this.type,
|
|
165
|
+
minimum: this.minimum,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
123
168
|
}
|
|
124
169
|
exports.IssueTooSmall = IssueTooSmall;
|
|
125
170
|
function stringifyExpectedType(expected) {
|
|
@@ -171,10 +216,18 @@ function stringifyType(value) {
|
|
|
171
216
|
return 'set';
|
|
172
217
|
return 'object';
|
|
173
218
|
case 'number':
|
|
174
|
-
if (Number.isInteger(value))
|
|
219
|
+
if (Number.isInteger(value) && Number.isSafeInteger(value)) {
|
|
175
220
|
return 'integer';
|
|
176
|
-
|
|
221
|
+
}
|
|
222
|
+
if (Number.isNaN(value)) {
|
|
177
223
|
return 'NaN';
|
|
224
|
+
}
|
|
225
|
+
if (value === Infinity) {
|
|
226
|
+
return 'Infinity';
|
|
227
|
+
}
|
|
228
|
+
if (value === -Infinity) {
|
|
229
|
+
return '-Infinity';
|
|
230
|
+
}
|
|
178
231
|
return 'float';
|
|
179
232
|
default:
|
|
180
233
|
return typeof value;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-issue.js","sourceRoot":"","sources":["../../src/core/validation-issue.ts"],"names":[],"mappings":"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","sourcesContent":["import { asCid, isPlainObject } from '@atproto/lex-data'\nimport { PropertyKey } from './property-key.js'\n\nexport abstract class Issue {\n constructor(\n readonly code: string,\n readonly path: readonly PropertyKey[],\n readonly input: unknown,\n ) {}\n\n abstract toString(): string\n\n toJSON() {\n return {\n code: this.code,\n path: this.path,\n message: this.toString(),\n }\n }\n}\n\nexport class IssueCustom extends Issue {\n constructor(\n readonly path: readonly PropertyKey[],\n readonly input: unknown,\n readonly message: string,\n ) {\n super('custom', path, input)\n }\n\n toString() {\n return `${this.message}${stringifyPath(this.path)}`\n }\n}\n\nexport class IssueInvalidFormat extends Issue {\n constructor(\n path: readonly PropertyKey[],\n input: unknown,\n readonly format: string,\n readonly message?: string,\n ) {\n super('invalid_format', path, input)\n }\n\n toString() {\n return `Invalid ${this.formatDescription} format${this.message ? ` (${this.message})` : ''}${stringifyPath(this.path)} (got ${stringifyValue(this.input)})`\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n format: this.format,\n }\n }\n\n get formatDescription(): string {\n switch (this.format) {\n case 'at-identifier':\n return `AT identifier`\n case 'did':\n return `DID`\n case 'nsid':\n return `NSID`\n case 'cid':\n return `CID string`\n case 'tid':\n return `TID string`\n case 'record-key':\n return `record key`\n default:\n return this.format\n }\n }\n}\n\nexport class IssueInvalidType extends Issue {\n constructor(\n path: readonly PropertyKey[],\n input: unknown,\n readonly expected: readonly string[],\n ) {\n super('invalid_type', path, input)\n }\n\n toString() {\n return `Expected ${oneOf(this.expected.map(stringifyExpectedType))} value type${stringifyPath(this.path)} (got ${stringifyType(this.input)})`\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n expected: this.expected,\n }\n }\n}\n\nexport class IssueInvalidValue extends Issue {\n constructor(\n path: readonly PropertyKey[],\n input: unknown,\n readonly values: readonly unknown[],\n ) {\n super('invalid_value', path, input)\n }\n\n toString() {\n return `Expected ${oneOf(this.values.map(stringifyValue))}${stringifyPath(this.path)} (got ${stringifyValue(this.input)})`\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n values: this.values,\n }\n }\n}\n\nexport class IssueRequiredKey extends Issue {\n constructor(\n path: readonly PropertyKey[],\n input: unknown,\n readonly key: PropertyKey,\n ) {\n super('required_key', path, input)\n }\n\n toString() {\n return `Missing required key \"${String(this.key)}\"${stringifyPath(this.path)}`\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n key: this.key,\n }\n }\n}\n\nexport type MeasurableType =\n | 'array'\n | 'string'\n | 'integer'\n | 'grapheme'\n | 'bytes'\n | 'blob'\n\nexport class IssueTooBig extends Issue {\n constructor(\n path: readonly PropertyKey[],\n input: unknown,\n readonly maximum: number,\n readonly type: MeasurableType,\n readonly actual: number,\n ) {\n super('too_big', path, input)\n }\n\n toString() {\n return `${this.type} too big (maximum ${this.maximum})${stringifyPath(this.path)} (got ${this.actual})`\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n type: this.type,\n maximum: this.maximum,\n }\n }\n}\n\nexport class IssueTooSmall extends Issue {\n constructor(\n path: readonly PropertyKey[],\n input: unknown,\n readonly minimum: number,\n readonly type: MeasurableType,\n readonly actual: number,\n ) {\n super('too_small', path, input)\n }\n\n toString() {\n return `${this.type} too small (minimum ${this.minimum})${stringifyPath(this.path)} (got ${this.actual})`\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n type: this.type,\n minimum: this.minimum,\n }\n }\n}\n\nfunction stringifyExpectedType(expected: string): string {\n if (expected === '$typed') {\n return 'an object or record which includes a \"$type\" property'\n }\n return expected\n}\n\nfunction stringifyPath(path: readonly PropertyKey[]) {\n return ` at ${buildJsonPath(path)}`\n}\n\nfunction buildJsonPath(path: readonly PropertyKey[]): string {\n return `$${path.map(toJsonPathSegment).join('')}`\n}\n\nfunction toJsonPathSegment(segment: PropertyKey): string {\n if (typeof segment === 'number') {\n return `[${segment}]`\n } else if (/^[a-zA-Z_$][a-zA-Z0-9_]*$/.test(segment as string)) {\n return `.${segment}`\n } else {\n return `[${JSON.stringify(segment)}]`\n }\n}\n\nfunction oneOf(arr: readonly string[]): string {\n if (arr.length === 0) return ''\n if (arr.length === 1) return arr[0]\n return `one of ${arr.slice(0, -1).join(', ')} or ${arr.at(-1)}`\n}\n\nfunction stringifyType(value: unknown): string {\n switch (typeof value) {\n case 'object':\n if (value === null) return 'null'\n if (Array.isArray(value)) return 'array'\n if (asCid(value)) return 'cid'\n if (value instanceof Date) return 'date'\n if (value instanceof RegExp) return 'regexp'\n if (value instanceof Map) return 'map'\n if (value instanceof Set) return 'set'\n return 'object'\n case 'number':\n if (Number.isInteger(value) && Number.isSafeInteger(value)) {\n return 'integer'\n }\n if (Number.isNaN(value)) {\n return 'NaN'\n }\n if (value === Infinity) {\n return 'Infinity'\n }\n if (value === -Infinity) {\n return '-Infinity'\n }\n return 'float'\n default:\n return typeof value\n }\n}\n\nfunction stringifyValue(value: unknown): string {\n switch (typeof value) {\n case 'bigint':\n return `${value}n`\n case 'number':\n case 'string':\n case 'boolean':\n return JSON.stringify(value)\n case 'object':\n if (Array.isArray(value)) {\n return `[${stringifyArray(value, stringifyValue)}]`\n }\n if (isPlainObject(value)) {\n return `{${stringifyArray(Object.entries(value), stringifyObjectEntry)}}`\n }\n // fallthrough\n default:\n return stringifyType(value)\n }\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nfunction stringifyObjectEntry([key, _value]: [PropertyKey, unknown]): string {\n return `${JSON.stringify(key)}: ...`\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nfunction stringifyArray<T>(\n arr: readonly T[],\n fn: (item: T) => string,\n n = 2,\n): string {\n return arr.slice(0, n).map(fn).join(', ') + (arr.length > n ? ', ...' : '')\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ResultFailure, ResultSuccess } from '../core.js';
|
|
2
1
|
import { PropertyKey } from './property-key.js';
|
|
2
|
+
import { ResultFailure, ResultSuccess } from './result.js';
|
|
3
3
|
import { ValidationError } from './validation-error.js';
|
|
4
4
|
import { Issue, MeasurableType } from './validation-issue.js';
|
|
5
5
|
export type ValidationSuccess<Value = any> = ResultSuccess<Value>;
|
|
@@ -10,7 +10,7 @@ export type ValidationOptions = {
|
|
|
10
10
|
/** @default true */
|
|
11
11
|
allowTransform?: boolean;
|
|
12
12
|
};
|
|
13
|
-
export type Infer<T extends Validator> = T['
|
|
13
|
+
export type Infer<T extends Validator> = T['__lex']['output'];
|
|
14
14
|
export interface Validator<Output = any> {
|
|
15
15
|
/**
|
|
16
16
|
* This property is used for type inference purposes and does not actually
|
|
@@ -18,7 +18,7 @@ export interface Validator<Output = any> {
|
|
|
18
18
|
*
|
|
19
19
|
* @deprecated **INTERNAL API, DO NOT USE**.
|
|
20
20
|
*/
|
|
21
|
-
readonly ['
|
|
21
|
+
readonly ['__lex']: {
|
|
22
22
|
output: Output;
|
|
23
23
|
};
|
|
24
24
|
/**
|
|
@@ -70,7 +70,8 @@ export declare class ValidatorContext {
|
|
|
70
70
|
validateChild<I extends object, K extends PropertyKey & keyof I, V extends Validator>(input: I, key: K, validator: V): ValidationResult<Infer<V>>;
|
|
71
71
|
addIssue(issue: Issue): void;
|
|
72
72
|
success<V>(value: V): ValidationResult<V>;
|
|
73
|
-
failure(
|
|
73
|
+
failure(reason: ValidationError): ValidationFailure;
|
|
74
|
+
issue(issue: Issue): ValidationFailure;
|
|
74
75
|
issueInvalidValue(input: unknown, values: readonly unknown[]): ValidationFailure;
|
|
75
76
|
issueInvalidType(input: unknown, expected: string): ValidationFailure;
|
|
76
77
|
issueRequiredKey(input: object, key: PropertyKey): ValidationFailure;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/core/validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ValidatorContext = void 0;
|
|
4
|
-
const
|
|
4
|
+
const result_js_1 = require("./result.js");
|
|
5
5
|
const validation_error_js_1 = require("./validation-error.js");
|
|
6
6
|
const validation_issue_js_1 = require("./validation-issue.js");
|
|
7
7
|
class ValidatorContext {
|
|
@@ -58,7 +58,7 @@ class ValidatorContext {
|
|
|
58
58
|
if (this.issues.length > 0) {
|
|
59
59
|
// Validator returned a success but issues were added via the context.
|
|
60
60
|
// This means the overall validation failed.
|
|
61
|
-
return (0,
|
|
61
|
+
return (0, result_js_1.failure)(new validation_error_js_1.ValidationError(Array.from(this.issues)));
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
return result;
|
|
@@ -77,38 +77,41 @@ class ValidatorContext {
|
|
|
77
77
|
this.issues.push(issue);
|
|
78
78
|
}
|
|
79
79
|
success(value) {
|
|
80
|
-
return (0,
|
|
80
|
+
return (0, result_js_1.success)(value);
|
|
81
81
|
}
|
|
82
|
-
failure(
|
|
83
|
-
return (0,
|
|
82
|
+
failure(reason) {
|
|
83
|
+
return (0, result_js_1.failure)(reason);
|
|
84
|
+
}
|
|
85
|
+
issue(issue) {
|
|
86
|
+
return this.failure(new validation_error_js_1.ValidationError([...this.issues, issue]));
|
|
84
87
|
}
|
|
85
88
|
issueInvalidValue(input, values) {
|
|
86
|
-
return this.
|
|
89
|
+
return this.issue(new validation_issue_js_1.IssueInvalidValue(this.path, input, values));
|
|
87
90
|
}
|
|
88
91
|
issueInvalidType(input, expected) {
|
|
89
|
-
return this.
|
|
92
|
+
return this.issue(new validation_issue_js_1.IssueInvalidType(this.path, input, [expected]));
|
|
90
93
|
}
|
|
91
94
|
issueRequiredKey(input, key) {
|
|
92
|
-
return this.
|
|
95
|
+
return this.issue(new validation_issue_js_1.IssueRequiredKey(this.path, input, key));
|
|
93
96
|
}
|
|
94
97
|
issueInvalidFormat(input, format, msg) {
|
|
95
|
-
return this.
|
|
98
|
+
return this.issue(new validation_issue_js_1.IssueInvalidFormat(this.path, input, format, msg));
|
|
96
99
|
}
|
|
97
100
|
issueTooBig(input, type, max, actual) {
|
|
98
|
-
return this.
|
|
101
|
+
return this.issue(new validation_issue_js_1.IssueTooBig(this.path, input, max, type, actual));
|
|
99
102
|
}
|
|
100
103
|
issueTooSmall(input, type, min, actual) {
|
|
101
|
-
return this.
|
|
104
|
+
return this.issue(new validation_issue_js_1.IssueTooSmall(this.path, input, min, type, actual));
|
|
102
105
|
}
|
|
103
106
|
issueInvalidPropertyValue(input, property, values) {
|
|
104
107
|
const value = input[property];
|
|
105
108
|
const path = this.concatPath(property);
|
|
106
|
-
return this.
|
|
109
|
+
return this.issue(new validation_issue_js_1.IssueInvalidValue(path, value, values));
|
|
107
110
|
}
|
|
108
111
|
issueInvalidPropertyType(input, property, expected) {
|
|
109
112
|
const value = input[property];
|
|
110
113
|
const path = this.concatPath(property);
|
|
111
|
-
return this.
|
|
114
|
+
return this.issue(new validation_issue_js_1.IssueInvalidType(path, value, [expected]));
|
|
112
115
|
}
|
|
113
116
|
}
|
|
114
117
|
exports.ValidatorContext = ValidatorContext;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/core/validator.ts"],"names":[],"mappings":"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","sourcesContent":["import { PropertyKey } from './property-key.js'\nimport { ResultFailure, ResultSuccess, failure, success } from './result.js'\nimport { ValidationError } from './validation-error.js'\nimport {\n Issue,\n IssueInvalidFormat,\n IssueInvalidType,\n IssueInvalidValue,\n IssueRequiredKey,\n IssueTooBig,\n IssueTooSmall,\n MeasurableType,\n} from './validation-issue.js'\n\nexport type ValidationSuccess<Value = any> = ResultSuccess<Value>\nexport type ValidationFailure = ResultFailure<ValidationError>\nexport type ValidationResult<Value = any> =\n | ValidationSuccess<Value>\n | ValidationFailure\n\nexport type ValidationOptions = {\n path?: PropertyKey[]\n\n /** @default true */\n allowTransform?: boolean\n}\n\nexport type Infer<T extends Validator> = T['__lex']['output']\n\nexport interface Validator<Output = any> {\n /**\n * This property is used for type inference purposes and does not actually\n * exist at runtime.\n *\n * @deprecated **INTERNAL API, DO NOT USE**.\n */\n readonly ['__lex']: { output: Output }\n\n /**\n * @internal **INTERNAL API**: use {@link ValidatorContext.validate} instead\n *\n * This method is implemented by subclasses to perform transformation and\n * validation of the input value. Do not call this method directly; as the\n * {@link ValidatorContext.options.allowTransform} option will **not** be\n * enforced. See {@link ValidatorContext.validate} for details. When\n * delegating validation from one validator sub-class implementation to\n * another schema, {@link ValidatorContext.validate} must be used instead of\n * calling {@link Validator.validateInContext}. This will allow to stop the\n * validation process if the value was transformed (by the other schema) but\n * transformations are not allowed.\n *\n * By convention, the {@link ValidationResult} must return the original input\n * value if validation was successful and no transformation was applied (i.e.\n * the input already conformed to the schema). If a default value, or any\n * other transformation was applied, the returned value c&an be different from\n * the input.\n *\n * This convention allows the {@link Validator.check check} and\n * {@link Validator.assert assert} methods to check whether the input value\n * exactly matches the schema (without defaults or transformations), by\n * checking if the returned value is strictly equal to the input.\n *\n * @see {@link ValidatorContext.validate}\n */\n validateInContext(\n input: unknown,\n ctx: ValidatorContext,\n ): ValidationResult<Output>\n}\n\nexport class ValidatorContext {\n /**\n * Creates a new validation context and validates the input using the\n * provided validator.\n */\n static validate<V>(\n input: unknown,\n validator: Validator<V>,\n options: ValidationOptions = {},\n ): ValidationResult<V> {\n const context = new ValidatorContext(options)\n return context.validate(input, validator)\n }\n\n private readonly currentPath: PropertyKey[]\n private readonly issues: Issue[] = []\n\n protected constructor(readonly options: ValidationOptions) {\n // Create a copy because we will be mutating the array during validation.\n this.currentPath = options?.path != null ? Array.from(options.path) : []\n }\n\n get path() {\n return Array.from(this.currentPath)\n }\n\n concatPath(path?: PropertyKey | readonly PropertyKey[]) {\n if (path == null) return this.path\n return this.currentPath.concat(path)\n }\n\n /**\n * This is basically the entry point for validation within a context. Use this\n * method instead of {@link Validator.validateInContext} directly, because\n * this method enforces the {@link ValidationOptions.allowTransform} option.\n */\n validate<V>(input: unknown, validator: Validator<V>): ValidationResult<V> {\n // This is the only place where validateInContext should be called.\n const result = validator.validateInContext(input, this)\n\n if (result.success) {\n if (\n // Defaults to true\n this.options?.allowTransform === false &&\n !Object.is(result.value, input)\n ) {\n // If the value changed, it means that a default (or some other\n // transformation) was applied, meaning that the original value did\n // *not* match the (output) schema. When \"allowTransform\" is false, we\n // consider this a failure.\n\n // This check is the reason why Validator.validateInContext should not\n // be used directly, and ValidatorContext.validate should be used\n // instead, even when delegating validation from one validator to\n // another.\n\n // This if block comes before the next one because 'this.issues' will\n // end-up being appended to the returned ValidationError (see the\n // \"failure\" method below), resulting in a more complete error report.\n return this.issueInvalidValue(input, [result.value])\n }\n\n if (this.issues.length > 0) {\n // Validator returned a success but issues were added via the context.\n // This means the overall validation failed.\n return failure(new ValidationError(Array.from(this.issues)))\n }\n }\n\n return result as ValidationResult<V>\n }\n\n validateChild<\n I extends object,\n K extends PropertyKey & keyof I,\n V extends Validator,\n >(input: I, key: K, validator: V): ValidationResult<Infer<V>> {\n // Instead of creating a new context, we just push/pop the path segment.\n this.currentPath.push(key)\n try {\n return this.validate(input[key], validator)\n } finally {\n this.currentPath.length--\n }\n }\n\n addIssue(issue: Issue): void {\n this.issues.push(issue)\n }\n\n success<V>(value: V): ValidationResult<V> {\n return success(value)\n }\n\n failure(reason: ValidationError): ValidationFailure {\n return failure(reason)\n }\n\n issue(issue: Issue) {\n return this.failure(new ValidationError([...this.issues, issue]))\n }\n\n issueInvalidValue(input: unknown, values: readonly unknown[]) {\n return this.issue(new IssueInvalidValue(this.path, input, values))\n }\n\n issueInvalidType(input: unknown, expected: string) {\n return this.issue(new IssueInvalidType(this.path, input, [expected]))\n }\n\n issueRequiredKey(input: object, key: PropertyKey) {\n return this.issue(new IssueRequiredKey(this.path, input, key))\n }\n\n issueInvalidFormat(input: unknown, format: string, msg?: string) {\n return this.issue(new IssueInvalidFormat(this.path, input, format, msg))\n }\n\n issueTooBig(\n input: unknown,\n type: MeasurableType,\n max: number,\n actual: number,\n ) {\n return this.issue(new IssueTooBig(this.path, input, max, type, actual))\n }\n\n issueTooSmall(\n input: unknown,\n type: MeasurableType,\n min: number,\n actual: number,\n ) {\n return this.issue(new IssueTooSmall(this.path, input, min, type, actual))\n }\n\n issueInvalidPropertyValue<I>(\n input: I,\n property: keyof I & PropertyKey,\n values: readonly unknown[],\n ) {\n const value = input[property]\n const path = this.concatPath(property)\n return this.issue(new IssueInvalidValue(path, value, values))\n }\n\n issueInvalidPropertyType<I>(\n input: I,\n property: keyof I & PropertyKey,\n expected: string,\n ) {\n const value = input[property]\n const path = this.concatPath(property)\n return this.issue(new IssueInvalidType(path, value, [expected]))\n }\n}\n"]}
|
package/dist/core.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
export * from './core/$type.js';
|
|
2
|
+
export * from './core/property-key.js';
|
|
2
3
|
export * from './core/record-key.js';
|
|
3
4
|
export * from './core/result.js';
|
|
5
|
+
export * from './core/schema.js';
|
|
4
6
|
export * from './core/string-format.js';
|
|
5
7
|
export * from './core/types.js';
|
|
8
|
+
export * from './core/validation-error.js';
|
|
9
|
+
export * from './core/validation-issue.js';
|
|
10
|
+
export * from './core/validator.js';
|
|
6
11
|
//# sourceMappingURL=core.d.ts.map
|
package/dist/core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,iBAAiB,CAAA"}
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA"}
|
package/dist/core.js
CHANGED
|
@@ -2,8 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
4
|
tslib_1.__exportStar(require("./core/$type.js"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./core/property-key.js"), exports);
|
|
5
6
|
tslib_1.__exportStar(require("./core/record-key.js"), exports);
|
|
6
7
|
tslib_1.__exportStar(require("./core/result.js"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./core/schema.js"), exports);
|
|
7
9
|
tslib_1.__exportStar(require("./core/string-format.js"), exports);
|
|
8
10
|
tslib_1.__exportStar(require("./core/types.js"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./core/validation-error.js"), exports);
|
|
12
|
+
tslib_1.__exportStar(require("./core/validation-issue.js"), exports);
|
|
13
|
+
tslib_1.__exportStar(require("./core/validator.js"), exports);
|
|
9
14
|
//# sourceMappingURL=core.js.map
|
package/dist/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":";;;AAAA,0DAA+B;AAC/B,+DAAoC;AACpC,2DAAgC;AAChC,kEAAuC;AACvC,0DAA+B","sourcesContent":["export * from './core/$type.js'\nexport * from './core/record-key.js'\nexport * from './core/result.js'\nexport * from './core/string-format.js'\nexport * from './core/types.js'\n"]}
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":";;;AAAA,0DAA+B;AAC/B,iEAAsC;AACtC,+DAAoC;AACpC,2DAAgC;AAChC,2DAAgC;AAChC,kEAAuC;AACvC,0DAA+B;AAC/B,qEAA0C;AAC1C,qEAA0C;AAC1C,8DAAmC","sourcesContent":["export * from './core/$type.js'\nexport * from './core/property-key.js'\nexport * from './core/record-key.js'\nexport * from './core/result.js'\nexport * from './core/schema.js'\nexport * from './core/string-format.js'\nexport * from './core/types.js'\nexport * from './core/validation-error.js'\nexport * from './core/validation-issue.js'\nexport * from './core/validator.js'\n"]}
|