@bessemer/cornerstone 0.5.58 → 0.5.60

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.
Files changed (86) hide show
  1. package/dist/aspect-ratio.d.ts +4 -5
  2. package/dist/aspect-ratio.d.ts.map +1 -1
  3. package/dist/aspect-ratio.js +4 -10
  4. package/dist/aspect-ratio.js.map +1 -1
  5. package/dist/async-value.d.ts +76 -0
  6. package/dist/async-value.d.ts.map +1 -0
  7. package/dist/async-value.js +54 -0
  8. package/dist/async-value.js.map +1 -0
  9. package/dist/async.d.ts +0 -55
  10. package/dist/async.d.ts.map +1 -1
  11. package/dist/async.js +1 -39
  12. package/dist/async.js.map +1 -1
  13. package/dist/cache.d.ts.map +1 -1
  14. package/dist/cache.js +2 -1
  15. package/dist/cache.js.map +1 -1
  16. package/dist/content.d.ts +7 -7
  17. package/dist/content.d.ts.map +1 -1
  18. package/dist/content.js +3 -2
  19. package/dist/content.js.map +1 -1
  20. package/dist/currency.d.ts +13 -0
  21. package/dist/currency.d.ts.map +1 -0
  22. package/dist/currency.js +27 -0
  23. package/dist/currency.js.map +1 -0
  24. package/dist/data-size.d.ts +1 -1
  25. package/dist/data-size.d.ts.map +1 -1
  26. package/dist/data-size.js +2 -2
  27. package/dist/data-size.js.map +1 -1
  28. package/dist/date.d.ts +1 -1
  29. package/dist/date.d.ts.map +1 -1
  30. package/dist/date.js +11 -20
  31. package/dist/date.js.map +1 -1
  32. package/dist/duration.d.ts +1 -1
  33. package/dist/duration.d.ts.map +1 -1
  34. package/dist/duration.js +2 -2
  35. package/dist/duration.js.map +1 -1
  36. package/dist/entry.d.ts +2 -0
  37. package/dist/entry.d.ts.map +1 -1
  38. package/dist/entry.js +5 -0
  39. package/dist/entry.js.map +1 -1
  40. package/dist/glob.d.ts +2 -2
  41. package/dist/glob.d.ts.map +1 -1
  42. package/dist/glob.js +29 -7
  43. package/dist/glob.js.map +1 -1
  44. package/dist/hex-code.d.ts +6 -3
  45. package/dist/hex-code.d.ts.map +1 -1
  46. package/dist/hex-code.js +11 -3
  47. package/dist/hex-code.js.map +1 -1
  48. package/dist/index.d.ts +5 -2
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +8 -2
  51. package/dist/index.js.map +1 -1
  52. package/dist/math.d.ts +1 -1
  53. package/dist/math.d.ts.map +1 -1
  54. package/dist/math.js +1 -1
  55. package/dist/math.js.map +1 -1
  56. package/dist/mime-type.d.ts +3 -3
  57. package/dist/mime-type.d.ts.map +1 -1
  58. package/dist/mime-type.js +6 -6
  59. package/dist/mime-type.js.map +1 -1
  60. package/dist/monetary-amount.d.ts +27 -0
  61. package/dist/monetary-amount.d.ts.map +1 -0
  62. package/dist/monetary-amount.js +97 -0
  63. package/dist/monetary-amount.js.map +1 -0
  64. package/dist/range.d.ts +4 -2
  65. package/dist/range.d.ts.map +1 -1
  66. package/dist/range.js +8 -5
  67. package/dist/range.js.map +1 -1
  68. package/dist/resource.d.ts.map +1 -1
  69. package/dist/resource.js +2 -1
  70. package/dist/resource.js.map +1 -1
  71. package/dist/ulid.d.ts +4 -4
  72. package/dist/ulid.d.ts.map +1 -1
  73. package/dist/ulid.js +9 -17
  74. package/dist/ulid.js.map +1 -1
  75. package/dist/uuid.d.ts +4 -4
  76. package/dist/uuid.d.ts.map +1 -1
  77. package/dist/uuid.js +11 -18
  78. package/dist/uuid.js.map +1 -1
  79. package/dist/zod-util.d.ts +10 -0
  80. package/dist/zod-util.d.ts.map +1 -0
  81. package/dist/{zod.js → zod-util.js} +9 -39
  82. package/dist/zod-util.js.map +1 -0
  83. package/package.json +1 -1
  84. package/dist/zod.d.ts +0 -36
  85. package/dist/zod.d.ts.map +0 -1
  86. package/dist/zod.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/mime-type.ts"],"sourcesContent":["import { TaggedType } from '@bessemer/cornerstone/types'\nimport Zod, { ZodType } from 'zod'\n\nexport type MimeLiteral = TaggedType<string, 'MimeType'>\nexport const MimeTypeSchema: ZodType<MimeLiteral> = Zod.string().regex(/^[\\w-]+\\/[\\w.+-]+$/, 'Invalid MIME type format') as any\n\nexport const of = (mimeType: string): MimeLiteral => {\n return mimeType as MimeLiteral\n}\n\nexport const fromString = (mimeType: string): MimeLiteral => {\n return MimeTypeSchema.parse(mimeType)\n}\n\n// Images\nexport const Jpeg = of('image/jpeg')\nexport const Png = of('image/png')\nexport const Gif = of('image/gif')\nexport const Webp = of('image/webp')\nexport const Svg = of('image/svg+xml')\nexport const Ico = of('image/x-icon')\nexport const Avif = of('image/avif')\nexport const ImageTypes = [Jpeg, Png, Gif, Webp, Svg, Ico, Avif]\n\n// Video\nexport const Mp4 = of('video/mp4')\nexport const Webm = of('video/webm')\nexport const OggVideo = of('video/ogg')\nexport const VideoTypes = [Mp4, Webm, OggVideo]\n\n// Audio\nexport const Mp3 = of('audio/mpeg')\nexport const OggAudio = of('audio/ogg')\nexport const Wav = of('audio/wav')\nexport const AudioTypes = [Mp3, OggAudio, Wav]\n\n// Documents\nexport const Pdf = of('application/pdf')\nexport const Json = of('application/json')\nexport const Csv = of('text/csv')\nexport const PlainText = of('text/plain')\nexport const Html = of('text/html')\nexport const Xml = of('application/xml')\nexport const DocumentTypes = [Pdf, Json, Csv, PlainText, Html, Xml]\n\n// Fonts\nexport const Woff = of('font/woff')\nexport const Woff2 = of('font/woff2')\nexport const Ttf = of('font/ttf')\nexport const Otf = of('font/otf')\nexport const FontTypes = [Woff, Woff2, Ttf, Otf]\n\n// Compression\nexport const Zip = of('application/zip')\nexport const Gzip = of('application/gzip')\nexport const Tar = of('application/x-tar')\nexport const Brotli = of('application/x-brotli')\nexport const CompressionTypes = [Zip, Gzip, Tar, Brotli]\n\n// Misc\nexport const FormData = of('multipart/form-data')\nexport const Javascript = of('application/javascript')\nexport const OctetStream = of('application/octet-stream')\n"],"mappings":";AACA,OAAO,SAAsB;AAGtB,IAAM,iBAAuC,IAAI,OAAO,EAAE,MAAM,sBAAsB,0BAA0B;AAEhH,IAAM,KAAK,CAAC,aAAkC;AACnD,SAAO;AACT;AAEO,IAAM,aAAa,CAAC,aAAkC;AAC3D,SAAO,eAAe,MAAM,QAAQ;AACtC;AAGO,IAAM,OAAO,GAAG,YAAY;AAC5B,IAAM,MAAM,GAAG,WAAW;AAC1B,IAAM,MAAM,GAAG,WAAW;AAC1B,IAAM,OAAO,GAAG,YAAY;AAC5B,IAAM,MAAM,GAAG,eAAe;AAC9B,IAAM,MAAM,GAAG,cAAc;AAC7B,IAAM,OAAO,GAAG,YAAY;AAC5B,IAAM,aAAa,CAAC,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,IAAI;AAGxD,IAAM,MAAM,GAAG,WAAW;AAC1B,IAAM,OAAO,GAAG,YAAY;AAC5B,IAAM,WAAW,GAAG,WAAW;AAC/B,IAAM,aAAa,CAAC,KAAK,MAAM,QAAQ;AAGvC,IAAM,MAAM,GAAG,YAAY;AAC3B,IAAM,WAAW,GAAG,WAAW;AAC/B,IAAM,MAAM,GAAG,WAAW;AAC1B,IAAM,aAAa,CAAC,KAAK,UAAU,GAAG;AAGtC,IAAM,MAAM,GAAG,iBAAiB;AAChC,IAAM,OAAO,GAAG,kBAAkB;AAClC,IAAM,MAAM,GAAG,UAAU;AACzB,IAAM,YAAY,GAAG,YAAY;AACjC,IAAM,OAAO,GAAG,WAAW;AAC3B,IAAM,MAAM,GAAG,iBAAiB;AAChC,IAAM,gBAAgB,CAAC,KAAK,MAAM,KAAK,WAAW,MAAM,GAAG;AAG3D,IAAM,OAAO,GAAG,WAAW;AAC3B,IAAM,QAAQ,GAAG,YAAY;AAC7B,IAAM,MAAM,GAAG,UAAU;AACzB,IAAM,MAAM,GAAG,UAAU;AACzB,IAAM,YAAY,CAAC,MAAM,OAAO,KAAK,GAAG;AAGxC,IAAM,MAAM,GAAG,iBAAiB;AAChC,IAAM,OAAO,GAAG,kBAAkB;AAClC,IAAM,MAAM,GAAG,mBAAmB;AAClC,IAAM,SAAS,GAAG,sBAAsB;AACxC,IAAM,mBAAmB,CAAC,KAAK,MAAM,KAAK,MAAM;AAGhD,IAAM,WAAW,GAAG,qBAAqB;AACzC,IAAM,aAAa,GAAG,wBAAwB;AAC9C,IAAM,cAAc,GAAG,0BAA0B;","names":[]}
1
+ {"version":3,"sources":["../src/mime-type.ts"],"sourcesContent":["import { TaggedType } from '@bessemer/cornerstone/types'\nimport Zod, { ZodType } from 'zod'\n\nexport type MimeLiteral = TaggedType<string, 'MimeType'>\nexport const Schema: ZodType<MimeLiteral> = Zod.string().regex(/^[\\w-]+\\/[\\w.+-]+$/, 'Invalid MIME type format') as any\n\nexport const of = (value: string): MimeLiteral => {\n return value as MimeLiteral\n}\n\nexport const fromString = (value: string): MimeLiteral => {\n return Schema.parse(value)\n}\n\n// Images\nexport const Jpeg = of('image/jpeg')\nexport const Png = of('image/png')\nexport const Gif = of('image/gif')\nexport const Webp = of('image/webp')\nexport const Svg = of('image/svg+xml')\nexport const Ico = of('image/x-icon')\nexport const Avif = of('image/avif')\nexport const ImageTypes = [Jpeg, Png, Gif, Webp, Svg, Ico, Avif]\n\n// Video\nexport const Mp4 = of('video/mp4')\nexport const Webm = of('video/webm')\nexport const OggVideo = of('video/ogg')\nexport const VideoTypes = [Mp4, Webm, OggVideo]\n\n// Audio\nexport const Mp3 = of('audio/mpeg')\nexport const OggAudio = of('audio/ogg')\nexport const Wav = of('audio/wav')\nexport const AudioTypes = [Mp3, OggAudio, Wav]\n\n// Documents\nexport const Pdf = of('application/pdf')\nexport const Json = of('application/json')\nexport const Csv = of('text/csv')\nexport const PlainText = of('text/plain')\nexport const Html = of('text/html')\nexport const Xml = of('application/xml')\nexport const DocumentTypes = [Pdf, Json, Csv, PlainText, Html, Xml]\n\n// Fonts\nexport const Woff = of('font/woff')\nexport const Woff2 = of('font/woff2')\nexport const Ttf = of('font/ttf')\nexport const Otf = of('font/otf')\nexport const FontTypes = [Woff, Woff2, Ttf, Otf]\n\n// Compression\nexport const Zip = of('application/zip')\nexport const Gzip = of('application/gzip')\nexport const Tar = of('application/x-tar')\nexport const Brotli = of('application/x-brotli')\nexport const CompressionTypes = [Zip, Gzip, Tar, Brotli]\n\n// Misc\nexport const FormData = of('multipart/form-data')\nexport const Javascript = of('application/javascript')\nexport const OctetStream = of('application/octet-stream')\n"],"mappings":";AACA,OAAO,SAAsB;AAGtB,IAAM,SAA+B,IAAI,OAAO,EAAE,MAAM,sBAAsB,0BAA0B;AAExG,IAAM,KAAK,CAAC,UAA+B;AAChD,SAAO;AACT;AAEO,IAAM,aAAa,CAAC,UAA+B;AACxD,SAAO,OAAO,MAAM,KAAK;AAC3B;AAGO,IAAM,OAAO,GAAG,YAAY;AAC5B,IAAM,MAAM,GAAG,WAAW;AAC1B,IAAM,MAAM,GAAG,WAAW;AAC1B,IAAM,OAAO,GAAG,YAAY;AAC5B,IAAM,MAAM,GAAG,eAAe;AAC9B,IAAM,MAAM,GAAG,cAAc;AAC7B,IAAM,OAAO,GAAG,YAAY;AAC5B,IAAM,aAAa,CAAC,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,IAAI;AAGxD,IAAM,MAAM,GAAG,WAAW;AAC1B,IAAM,OAAO,GAAG,YAAY;AAC5B,IAAM,WAAW,GAAG,WAAW;AAC/B,IAAM,aAAa,CAAC,KAAK,MAAM,QAAQ;AAGvC,IAAM,MAAM,GAAG,YAAY;AAC3B,IAAM,WAAW,GAAG,WAAW;AAC/B,IAAM,MAAM,GAAG,WAAW;AAC1B,IAAM,aAAa,CAAC,KAAK,UAAU,GAAG;AAGtC,IAAM,MAAM,GAAG,iBAAiB;AAChC,IAAM,OAAO,GAAG,kBAAkB;AAClC,IAAM,MAAM,GAAG,UAAU;AACzB,IAAM,YAAY,GAAG,YAAY;AACjC,IAAM,OAAO,GAAG,WAAW;AAC3B,IAAM,MAAM,GAAG,iBAAiB;AAChC,IAAM,gBAAgB,CAAC,KAAK,MAAM,KAAK,WAAW,MAAM,GAAG;AAG3D,IAAM,OAAO,GAAG,WAAW;AAC3B,IAAM,QAAQ,GAAG,YAAY;AAC7B,IAAM,MAAM,GAAG,UAAU;AACzB,IAAM,MAAM,GAAG,UAAU;AACzB,IAAM,YAAY,CAAC,MAAM,OAAO,KAAK,GAAG;AAGxC,IAAM,MAAM,GAAG,iBAAiB;AAChC,IAAM,OAAO,GAAG,kBAAkB;AAClC,IAAM,MAAM,GAAG,mBAAmB;AAClC,IAAM,SAAS,GAAG,sBAAsB;AACxC,IAAM,mBAAmB,CAAC,KAAK,MAAM,KAAK,MAAM;AAGhD,IAAM,WAAW,GAAG,qBAAqB;AACzC,IAAM,aAAa,GAAG,wBAAwB;AAC9C,IAAM,cAAc,GAAG,0BAA0B;","names":[]}
@@ -0,0 +1,27 @@
1
+ import { CurrencyCode } from '@bessemer/cornerstone/currency';
2
+ import { ZodType } from 'zod';
3
+ export type MonetaryAmount = {
4
+ amount: number;
5
+ currency: CurrencyCode;
6
+ };
7
+ export declare const Schema: ZodType<MonetaryAmount>;
8
+ export declare const of: (amount: number, currency: CurrencyCode) => MonetaryAmount;
9
+ export declare const zero: (currency: CurrencyCode) => MonetaryAmount;
10
+ export declare const apply: <T>(first: MonetaryAmount, second: MonetaryAmount, operator: (first: number, second: number) => T) => T;
11
+ export declare const operate: (first: MonetaryAmount, second: MonetaryAmount, operator: (first: number, second: number) => number) => MonetaryAmount;
12
+ /** Determines whether two MonetaryAmounts are considered equivalent */
13
+ export declare const equal: (first?: MonetaryAmount | null, second?: MonetaryAmount | null) => boolean;
14
+ export declare const sum: (first: MonetaryAmount, second?: MonetaryAmount | null) => MonetaryAmount;
15
+ export declare const subtract: (first: MonetaryAmount, second: MonetaryAmount) => MonetaryAmount;
16
+ export declare const multiply: (money: MonetaryAmount, value: number) => MonetaryAmount;
17
+ export declare const divide: (money: MonetaryAmount, value: number) => MonetaryAmount;
18
+ export declare function sumAll(monetaryAmounts: [MonetaryAmount, ...MonetaryAmount[]]): MonetaryAmount;
19
+ export declare function sumAll(monetaryAmounts: Array<MonetaryAmount>): MonetaryAmount | null;
20
+ export declare const negate: (monetaryAmount: MonetaryAmount) => MonetaryAmount;
21
+ export declare const isZero: (monetaryAmount: MonetaryAmount) => boolean;
22
+ export declare const greaterThan: (first: MonetaryAmount, second: MonetaryAmount) => boolean;
23
+ export type MonetaryAmountFormatOptions = {
24
+ hideCents?: boolean;
25
+ };
26
+ export declare const format: (amount: MonetaryAmount, alpha2Code: string, options?: MonetaryAmountFormatOptions) => string;
27
+ //# sourceMappingURL=monetary-amount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monetary-amount.d.ts","sourceRoot":"","sources":["../src/monetary-amount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAgC,MAAM,gCAAgC,CAAA;AAC3F,OAAY,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAMlC,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,YAAY,CAAA;CACvB,CAAA;AACD,eAAO,MAAM,MAAM,EAAE,OAAO,CAAC,cAAc,CAGzC,CAAA;AAEF,eAAO,MAAM,EAAE,GAAI,QAAQ,MAAM,EAAE,UAAU,YAAY,KAAG,cAG3D,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,UAAU,YAAY,KAAG,cAE7C,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,OAAO,cAAc,EAAE,QAAQ,cAAc,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC,KAAG,CAMxH,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,OAAO,cAAc,EAAE,QAAQ,cAAc,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,KAAG,cAE5H,CAAA;AAED,uEAAuE;AACvE,eAAO,MAAM,KAAK,GAAI,QAAQ,cAAc,GAAG,IAAI,EAAE,SAAS,cAAc,GAAG,IAAI,KAAG,OASrF,CAAA;AAED,eAAO,MAAM,GAAG,GAAI,OAAO,cAAc,EAAE,SAAS,cAAc,GAAG,IAAI,KAAG,cAE3E,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,OAAO,cAAc,EAAE,QAAQ,cAAc,KAAG,cAExE,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,OAAO,cAAc,EAAE,OAAO,MAAM,KAAG,cAE/D,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,OAAO,cAAc,EAAE,OAAO,MAAM,KAAG,cAE7D,CAAA;AAED,wBAAgB,MAAM,CAAC,eAAe,EAAE,CAAC,cAAc,EAAE,GAAG,cAAc,EAAE,CAAC,GAAG,cAAc,CAAA;AAC9F,wBAAgB,MAAM,CAAC,eAAe,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,cAAc,GAAG,IAAI,CAAA;AASrF,eAAO,MAAM,MAAM,GAAI,gBAAgB,cAAc,KAAG,cAOvD,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,gBAAgB,cAAc,KAAG,OAEvD,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,OAAO,cAAc,EAAE,QAAQ,cAAc,KAAG,OAE3E,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,QAAQ,cAAc,EAAE,YAAY,MAAM,EAAE,UAAU,2BAA2B,KAAG,MAgB1G,CAAA"}
@@ -0,0 +1,97 @@
1
+ // src/monetary-amount.ts
2
+ import { Schema as CurrencyCodeSchema } from "@bessemer/cornerstone/currency";
3
+ import Zod from "zod";
4
+ import { assertTrue } from "@bessemer/cornerstone/assertion";
5
+ import { isNil } from "@bessemer/cornerstone/object";
6
+ import { roundHalfEven } from "@bessemer/cornerstone/math";
7
+ import { isEmpty } from "@bessemer/cornerstone/array";
8
+ var Schema = Zod.object({
9
+ amount: Zod.number().int(),
10
+ currency: CurrencyCodeSchema
11
+ });
12
+ var of = (amount, currency) => {
13
+ assertTrue(Number.isInteger(amount));
14
+ return { amount, currency };
15
+ };
16
+ var zero = (currency) => {
17
+ return { amount: 0, currency };
18
+ };
19
+ var apply = (first, second, operator) => {
20
+ if (first.currency !== second.currency) {
21
+ throw new Error(`Currency mismatch in operation on MonetaryAmount: ${first.currency}, ${second.currency}`);
22
+ }
23
+ return operator(first.amount, second.amount);
24
+ };
25
+ var operate = (first, second, operator) => {
26
+ return of(apply(first, second, operator), first.currency);
27
+ };
28
+ var equal = (first, second) => {
29
+ if (isNil(first) && isNil(second)) {
30
+ return true;
31
+ }
32
+ if (isNil(first) || isNil(second)) {
33
+ return false;
34
+ }
35
+ return apply(first, second, (first2, second2) => first2 === second2);
36
+ };
37
+ var sum = (first, second) => {
38
+ return operate(first, second ?? zero(first.currency), (first2, second2) => first2 + second2);
39
+ };
40
+ var subtract = (first, second) => {
41
+ return operate(first, second, (first2, second2) => first2 - second2);
42
+ };
43
+ var multiply = (money, value) => {
44
+ return of(roundHalfEven(money.amount * value, 0), money.currency);
45
+ };
46
+ var divide = (money, value) => {
47
+ return of(roundHalfEven(money.amount / value, 0), money.currency);
48
+ };
49
+ function sumAll(monetaryAmounts) {
50
+ if (isEmpty(monetaryAmounts)) {
51
+ return null;
52
+ }
53
+ return monetaryAmounts.reduce((first, second) => sum(second, first), null);
54
+ }
55
+ var negate = (monetaryAmount) => {
56
+ if (isZero(monetaryAmount)) {
57
+ return monetaryAmount;
58
+ }
59
+ return of(-monetaryAmount.amount, monetaryAmount.currency);
60
+ };
61
+ var isZero = (monetaryAmount) => {
62
+ return monetaryAmount.amount === 0;
63
+ };
64
+ var greaterThan = (first, second) => {
65
+ return apply(first, second, (first2, second2) => first2 > second2);
66
+ };
67
+ var format = (amount, alpha2Code, options) => {
68
+ const hideCents = options?.hideCents ?? false;
69
+ const isWholeNumber = amount.amount % 100 === 0;
70
+ const formatCurrency = new Intl.NumberFormat(alpha2Code, {
71
+ style: "currency",
72
+ currency: amount.currency,
73
+ ...hideCents ? {
74
+ minimumFractionDigits: isWholeNumber ? 0 : 2,
75
+ maximumFractionDigits: 2
76
+ } : {}
77
+ });
78
+ return formatCurrency.format(amount.amount / 100);
79
+ };
80
+ export {
81
+ Schema,
82
+ apply,
83
+ divide,
84
+ equal,
85
+ format,
86
+ greaterThan,
87
+ isZero,
88
+ multiply,
89
+ negate,
90
+ of,
91
+ operate,
92
+ subtract,
93
+ sum,
94
+ sumAll,
95
+ zero
96
+ };
97
+ //# sourceMappingURL=monetary-amount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/monetary-amount.ts"],"sourcesContent":["import { CurrencyCode, Schema as CurrencyCodeSchema } from '@bessemer/cornerstone/currency'\nimport Zod, { ZodType } from 'zod'\nimport { assertTrue } from '@bessemer/cornerstone/assertion'\nimport { isNil } from '@bessemer/cornerstone/object'\nimport { roundHalfEven } from '@bessemer/cornerstone/math'\nimport { isEmpty } from '@bessemer/cornerstone/array'\n\nexport type MonetaryAmount = {\n amount: number\n currency: CurrencyCode\n}\nexport const Schema: ZodType<MonetaryAmount> = Zod.object({\n amount: Zod.number().int(),\n currency: CurrencyCodeSchema,\n})\n\nexport const of = (amount: number, currency: CurrencyCode): MonetaryAmount => {\n assertTrue(Number.isInteger(amount))\n return { amount, currency }\n}\n\nexport const zero = (currency: CurrencyCode): MonetaryAmount => {\n return { amount: 0, currency }\n}\n\nexport const apply = <T>(first: MonetaryAmount, second: MonetaryAmount, operator: (first: number, second: number) => T): T => {\n if (first.currency !== second.currency) {\n throw new Error(`Currency mismatch in operation on MonetaryAmount: ${first.currency}, ${second.currency}`)\n }\n\n return operator(first.amount, second.amount)\n}\n\nexport const operate = (first: MonetaryAmount, second: MonetaryAmount, operator: (first: number, second: number) => number): MonetaryAmount => {\n return of(apply(first, second, operator), first.currency)\n}\n\n/** Determines whether two MonetaryAmounts are considered equivalent */\nexport const equal = (first?: MonetaryAmount | null, second?: MonetaryAmount | null): boolean => {\n if (isNil(first) && isNil(second)) {\n return true\n }\n if (isNil(first) || isNil(second)) {\n return false\n }\n\n return apply(first, second, (first, second) => first === second)\n}\n\nexport const sum = (first: MonetaryAmount, second?: MonetaryAmount | null): MonetaryAmount => {\n return operate(first, second ?? zero(first.currency), (first, second) => first + second)\n}\n\nexport const subtract = (first: MonetaryAmount, second: MonetaryAmount): MonetaryAmount => {\n return operate(first, second, (first, second) => first - second)\n}\n\nexport const multiply = (money: MonetaryAmount, value: number): MonetaryAmount => {\n return of(roundHalfEven(money.amount * value, 0), money.currency)\n}\n\nexport const divide = (money: MonetaryAmount, value: number): MonetaryAmount => {\n return of(roundHalfEven(money.amount / value, 0), money.currency)\n}\n\nexport function sumAll(monetaryAmounts: [MonetaryAmount, ...MonetaryAmount[]]): MonetaryAmount\nexport function sumAll(monetaryAmounts: Array<MonetaryAmount>): MonetaryAmount | null\nexport function sumAll(monetaryAmounts: Array<MonetaryAmount>): MonetaryAmount | null {\n if (isEmpty(monetaryAmounts)) {\n return null\n }\n\n return monetaryAmounts.reduce<MonetaryAmount | null>((first, second) => sum(second, first), null)\n}\n\nexport const negate = (monetaryAmount: MonetaryAmount): MonetaryAmount => {\n // Avoid creating a negative 0, which is a real thing!\n if (isZero(monetaryAmount)) {\n return monetaryAmount\n }\n\n return of(-monetaryAmount.amount, monetaryAmount.currency)\n}\n\nexport const isZero = (monetaryAmount: MonetaryAmount): boolean => {\n return monetaryAmount.amount === 0\n}\n\nexport const greaterThan = (first: MonetaryAmount, second: MonetaryAmount): boolean => {\n return apply(first, second, (first, second) => first > second)\n}\n\nexport type MonetaryAmountFormatOptions = {\n hideCents?: boolean\n}\n\nexport const format = (amount: MonetaryAmount, alpha2Code: string, options?: MonetaryAmountFormatOptions): string => {\n const hideCents = options?.hideCents ?? false\n const isWholeNumber = amount.amount % 100 === 0\n\n const formatCurrency = new Intl.NumberFormat(alpha2Code, {\n style: 'currency',\n currency: amount.currency,\n ...(hideCents\n ? {\n minimumFractionDigits: isWholeNumber ? 0 : 2,\n maximumFractionDigits: 2,\n }\n : {}),\n })\n\n return formatCurrency.format(amount.amount / 100)\n}\n"],"mappings":";AAAA,SAAuB,UAAU,0BAA0B;AAC3D,OAAO,SAAsB;AAC7B,SAAS,kBAAkB;AAC3B,SAAS,aAAa;AACtB,SAAS,qBAAqB;AAC9B,SAAS,eAAe;AAMjB,IAAM,SAAkC,IAAI,OAAO;AAAA,EACxD,QAAQ,IAAI,OAAO,EAAE,IAAI;AAAA,EACzB,UAAU;AACZ,CAAC;AAEM,IAAM,KAAK,CAAC,QAAgB,aAA2C;AAC5E,aAAW,OAAO,UAAU,MAAM,CAAC;AACnC,SAAO,EAAE,QAAQ,SAAS;AAC5B;AAEO,IAAM,OAAO,CAAC,aAA2C;AAC9D,SAAO,EAAE,QAAQ,GAAG,SAAS;AAC/B;AAEO,IAAM,QAAQ,CAAI,OAAuB,QAAwB,aAAsD;AAC5H,MAAI,MAAM,aAAa,OAAO,UAAU;AACtC,UAAM,IAAI,MAAM,qDAAqD,MAAM,QAAQ,KAAK,OAAO,QAAQ,EAAE;AAAA,EAC3G;AAEA,SAAO,SAAS,MAAM,QAAQ,OAAO,MAAM;AAC7C;AAEO,IAAM,UAAU,CAAC,OAAuB,QAAwB,aAAwE;AAC7I,SAAO,GAAG,MAAM,OAAO,QAAQ,QAAQ,GAAG,MAAM,QAAQ;AAC1D;AAGO,IAAM,QAAQ,CAAC,OAA+B,WAA4C;AAC/F,MAAI,MAAM,KAAK,KAAK,MAAM,MAAM,GAAG;AACjC,WAAO;AAAA,EACT;AACA,MAAI,MAAM,KAAK,KAAK,MAAM,MAAM,GAAG;AACjC,WAAO;AAAA,EACT;AAEA,SAAO,MAAM,OAAO,QAAQ,CAACA,QAAOC,YAAWD,WAAUC,OAAM;AACjE;AAEO,IAAM,MAAM,CAAC,OAAuB,WAAmD;AAC5F,SAAO,QAAQ,OAAO,UAAU,KAAK,MAAM,QAAQ,GAAG,CAACD,QAAOC,YAAWD,SAAQC,OAAM;AACzF;AAEO,IAAM,WAAW,CAAC,OAAuB,WAA2C;AACzF,SAAO,QAAQ,OAAO,QAAQ,CAACD,QAAOC,YAAWD,SAAQC,OAAM;AACjE;AAEO,IAAM,WAAW,CAAC,OAAuB,UAAkC;AAChF,SAAO,GAAG,cAAc,MAAM,SAAS,OAAO,CAAC,GAAG,MAAM,QAAQ;AAClE;AAEO,IAAM,SAAS,CAAC,OAAuB,UAAkC;AAC9E,SAAO,GAAG,cAAc,MAAM,SAAS,OAAO,CAAC,GAAG,MAAM,QAAQ;AAClE;AAIO,SAAS,OAAO,iBAA+D;AACpF,MAAI,QAAQ,eAAe,GAAG;AAC5B,WAAO;AAAA,EACT;AAEA,SAAO,gBAAgB,OAA8B,CAAC,OAAO,WAAW,IAAI,QAAQ,KAAK,GAAG,IAAI;AAClG;AAEO,IAAM,SAAS,CAAC,mBAAmD;AAExE,MAAI,OAAO,cAAc,GAAG;AAC1B,WAAO;AAAA,EACT;AAEA,SAAO,GAAG,CAAC,eAAe,QAAQ,eAAe,QAAQ;AAC3D;AAEO,IAAM,SAAS,CAAC,mBAA4C;AACjE,SAAO,eAAe,WAAW;AACnC;AAEO,IAAM,cAAc,CAAC,OAAuB,WAAoC;AACrF,SAAO,MAAM,OAAO,QAAQ,CAACD,QAAOC,YAAWD,SAAQC,OAAM;AAC/D;AAMO,IAAM,SAAS,CAAC,QAAwB,YAAoB,YAAkD;AACnH,QAAM,YAAY,SAAS,aAAa;AACxC,QAAM,gBAAgB,OAAO,SAAS,QAAQ;AAE9C,QAAM,iBAAiB,IAAI,KAAK,aAAa,YAAY;AAAA,IACvD,OAAO;AAAA,IACP,UAAU,OAAO;AAAA,IACjB,GAAI,YACA;AAAA,MACE,uBAAuB,gBAAgB,IAAI;AAAA,MAC3C,uBAAuB;AAAA,IACzB,IACA,CAAC;AAAA,EACP,CAAC;AAED,SAAO,eAAe,OAAO,OAAO,SAAS,GAAG;AAClD;","names":["first","second"]}
package/dist/range.d.ts CHANGED
@@ -1,7 +1,9 @@
1
- import { ZodType } from 'zod';
1
+ import Zod, { ZodType } from 'zod';
2
2
  import { TaggedType } from '@bessemer/cornerstone/types';
3
- export declare const boundsSchema: <T extends ZodType>(type: T) => import("zod").ZodBranded<import("zod").ZodTuple<[import("zod").ZodNullable<T>, import("zod").ZodNullable<T>], null>, "Bounds">;
4
3
  export type Bounds<T> = TaggedType<[T | null, T | null], 'Bounds'>;
5
4
  export type BoundsInput<T> = [lower: T | null, upper?: T | null] | Bounds<T>;
5
+ export declare const schema: <T>(type: ZodType<T>) => ZodType<Bounds<T>>;
6
+ export type NumericBounds<T> = Bounds<number>;
7
+ export declare const NumericSchema: Zod.ZodType<Bounds<number>, Zod.ZodTypeDef, Bounds<number>>;
6
8
  export declare const of: <T>(bounds: BoundsInput<T>) => Bounds<T>;
7
9
  //# sourceMappingURL=range.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"range.d.ts","sourceRoot":"","sources":["../src/range.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAExD,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,OAAO,EAAE,MAAM,CAAC,mIAEtD,CAAA;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAA;AAClE,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;AAE5E,eAAO,MAAM,EAAE,GAAI,CAAC,EAAE,QAAQ,WAAW,CAAC,CAAC,CAAC,KAAG,MAAM,CAAC,CAAC,CAMtD,CAAA"}
1
+ {"version":3,"file":"range.d.ts","sourceRoot":"","sources":["../src/range.ts"],"names":[],"mappings":"AACA,OAAO,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAExD,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAA;AAClE,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;AAE5E,eAAO,MAAM,MAAM,GAAI,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAE7D,CAAA;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAA;AAC7C,eAAO,MAAM,aAAa,6DAAuB,CAAA;AAEjD,eAAO,MAAM,EAAE,GAAI,CAAC,EAAE,QAAQ,WAAW,CAAC,CAAC,CAAC,KAAG,MAAM,CAAC,CAAC,CAMtD,CAAA"}
package/dist/range.js CHANGED
@@ -1,8 +1,10 @@
1
1
  // src/range.ts
2
- import { Objects, Zod } from "@bessemer/cornerstone";
3
- var boundsSchema = (type) => {
4
- return Zod.tuple([type.nullable(), type.nullable()]).brand("Bounds");
2
+ import { Objects } from "@bessemer/cornerstone";
3
+ import Zod from "zod";
4
+ var schema = (type) => {
5
+ return Zod.tuple([type.nullable(), type.nullable()]);
5
6
  };
7
+ var NumericSchema = schema(Zod.number());
6
8
  var of = (bounds) => {
7
9
  if (Objects.isUndefined(bounds[1])) {
8
10
  return [bounds[0], null];
@@ -10,7 +12,8 @@ var of = (bounds) => {
10
12
  return bounds;
11
13
  };
12
14
  export {
13
- boundsSchema,
14
- of
15
+ NumericSchema,
16
+ of,
17
+ schema
15
18
  };
16
19
  //# sourceMappingURL=range.js.map
package/dist/range.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/range.ts"],"sourcesContent":["import { Objects, Zod } from '@bessemer/cornerstone'\nimport { ZodType } from 'zod'\nimport { TaggedType } from '@bessemer/cornerstone/types'\n\nexport const boundsSchema = <T extends ZodType>(type: T) => {\n return Zod.tuple([type.nullable(), type.nullable()]).brand('Bounds')\n}\n\nexport type Bounds<T> = TaggedType<[T | null, T | null], 'Bounds'>\nexport type BoundsInput<T> = [lower: T | null, upper?: T | null] | Bounds<T>\n\nexport const of = <T>(bounds: BoundsInput<T>): Bounds<T> => {\n if (Objects.isUndefined(bounds[1])) {\n return [bounds[0], null] as Bounds<T>\n }\n\n return bounds as Bounds<T>\n}\n"],"mappings":";AAAA,SAAS,SAAS,WAAW;AAItB,IAAM,eAAe,CAAoB,SAAY;AAC1D,SAAO,IAAI,MAAM,CAAC,KAAK,SAAS,GAAG,KAAK,SAAS,CAAC,CAAC,EAAE,MAAM,QAAQ;AACrE;AAKO,IAAM,KAAK,CAAI,WAAsC;AAC1D,MAAI,QAAQ,YAAY,OAAO,CAAC,CAAC,GAAG;AAClC,WAAO,CAAC,OAAO,CAAC,GAAG,IAAI;AAAA,EACzB;AAEA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../src/range.ts"],"sourcesContent":["import { Objects } from '@bessemer/cornerstone'\nimport Zod, { ZodType } from 'zod'\nimport { TaggedType } from '@bessemer/cornerstone/types'\n\nexport type Bounds<T> = TaggedType<[T | null, T | null], 'Bounds'>\nexport type BoundsInput<T> = [lower: T | null, upper?: T | null] | Bounds<T>\n\nexport const schema = <T>(type: ZodType<T>): ZodType<Bounds<T>> => {\n return Zod.tuple([type.nullable(), type.nullable()]) as any\n}\n\nexport type NumericBounds<T> = Bounds<number>\nexport const NumericSchema = schema(Zod.number())\n\nexport const of = <T>(bounds: BoundsInput<T>): Bounds<T> => {\n if (Objects.isUndefined(bounds[1])) {\n return [bounds[0], null] as Bounds<T>\n }\n\n return bounds as Bounds<T>\n}\n"],"mappings":";AAAA,SAAS,eAAe;AACxB,OAAO,SAAsB;AAMtB,IAAM,SAAS,CAAI,SAAyC;AACjE,SAAO,IAAI,MAAM,CAAC,KAAK,SAAS,GAAG,KAAK,SAAS,CAAC,CAAC;AACrD;AAGO,IAAM,gBAAgB,OAAO,IAAI,OAAO,CAAC;AAEzC,IAAM,KAAK,CAAI,WAAsC;AAC1D,MAAI,QAAQ,YAAY,OAAO,CAAC,CAAC,GAAG;AAClC,WAAO,CAAC,OAAO,CAAC,GAAG,IAAI;AAAA,EACzB;AAEA,SAAO;AACT;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAEzD,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAE7B,MAAM,MAAM,WAAW,GAAG,MAAM,CAAA;AAEhC,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;AACxE,eAAO,MAAM,uBAAuB,EAAE,OAAO,CAAC,iBAAiB,CAAgB,CAAA;AAE/E,yBAAiB,WAAW,CAAC;IAGpB,MAAM,SAAS,GAAI,WAAW,iBAAiB,EAAE,KAAK,WAAW,KAAG,WAE1E,CAAA;IAEM,MAAM,YAAY,GAAI,WAAW,iBAAiB,EAAE,MAAM,KAAK,CAAC,WAAW,CAAC,KAAG,KAAK,CAAC,WAAW,CAEtG,CAAA;IAEM,MAAM,cAAc,GAAI,WAAW,iBAAiB,EAAE,KAAK,WAAW,KAAG,WAE/E,CAAA;IAEM,MAAM,iBAAiB,GAAI,WAAW,iBAAiB,EAAE,MAAM,KAAK,CAAC,WAAW,CAAC,KAAG,KAAK,CAAC,WAAW,CAE3G,CAAA;IAEM,MAAM,eAAe,GAAI,GAAG,YAAY,KAAK,CAAC,iBAAiB,CAAC,KAAG,iBAEzE,CAAA;CACF"}
1
+ {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAEzD,OAAY,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAElC,MAAM,MAAM,WAAW,GAAG,MAAM,CAAA;AAEhC,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;AACxE,eAAO,MAAM,uBAAuB,EAAE,OAAO,CAAC,iBAAiB,CAAgB,CAAA;AAE/E,yBAAiB,WAAW,CAAC;IAGpB,MAAM,SAAS,GAAI,WAAW,iBAAiB,EAAE,KAAK,WAAW,KAAG,WAE1E,CAAA;IAEM,MAAM,YAAY,GAAI,WAAW,iBAAiB,EAAE,MAAM,KAAK,CAAC,WAAW,CAAC,KAAG,KAAK,CAAC,WAAW,CAEtG,CAAA;IAEM,MAAM,cAAc,GAAI,WAAW,iBAAiB,EAAE,KAAK,WAAW,KAAG,WAE/E,CAAA;IAEM,MAAM,iBAAiB,GAAI,WAAW,iBAAiB,EAAE,MAAM,KAAK,CAAC,WAAW,CAAC,KAAG,KAAK,CAAC,WAAW,CAE3G,CAAA;IAEM,MAAM,eAAe,GAAI,GAAG,YAAY,KAAK,CAAC,iBAAiB,CAAC,KAAG,iBAEzE,CAAA;CACF"}
package/dist/resource.js CHANGED
@@ -1,5 +1,6 @@
1
1
  // src/resource.ts
2
- import { Strings, Zod } from "@bessemer/cornerstone";
2
+ import { Strings } from "@bessemer/cornerstone";
3
+ import Zod from "zod";
3
4
  var ResourceNamespaceSchema = Zod.string();
4
5
  var ResourceKey;
5
6
  ((ResourceKey2) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/resource.ts"],"sourcesContent":["import { NominalType } from '@bessemer/cornerstone/types'\nimport { Strings, Zod } from '@bessemer/cornerstone'\nimport { ZodType } from 'zod'\n\nexport type ResourceKey = string\n\nexport type ResourceNamespace = NominalType<string, 'ResourceNamespace'>\nexport const ResourceNamespaceSchema: ZodType<ResourceNamespace> = Zod.string()\n\nexport namespace ResourceKey {\n const ResourceNamespaceSeparator = '/'\n\n export const namespace = (namespace: ResourceNamespace, key: ResourceKey): ResourceKey => {\n return `${namespace}${ResourceNamespaceSeparator}${key}`\n }\n\n export const namespaceAll = (namespace: ResourceNamespace, keys: Array<ResourceKey>): Array<ResourceKey> => {\n return keys.map((it) => ResourceKey.namespace(namespace, it))\n }\n\n export const stripNamespace = (namespace: ResourceNamespace, key: ResourceKey): ResourceKey => {\n return Strings.removeStart(key, `${namespace}${ResourceNamespaceSeparator}`)\n }\n\n export const stripNamespaceAll = (namespace: ResourceNamespace, keys: Array<ResourceKey>): Array<ResourceKey> => {\n return keys.map((it) => ResourceKey.stripNamespace(namespace, it))\n }\n\n export const extendNamespace = (...namespaces: Array<ResourceNamespace>): ResourceNamespace => {\n return namespaces.join(ResourceNamespaceSeparator)\n }\n}\n"],"mappings":";AACA,SAAS,SAAS,WAAW;AAMtB,IAAM,0BAAsD,IAAI,OAAO;AAEvE,IAAU;AAAA,CAAV,CAAUA,iBAAV;AACL,QAAM,6BAA6B;AAE5B,EAAMA,aAAA,YAAY,CAACC,YAA8B,QAAkC;AACxF,WAAO,GAAGA,UAAS,GAAG,0BAA0B,GAAG,GAAG;AAAA,EACxD;AAEO,EAAMD,aAAA,eAAe,CAACC,YAA8B,SAAiD;AAC1G,WAAO,KAAK,IAAI,CAAC,OAAOD,aAAY,UAAUC,YAAW,EAAE,CAAC;AAAA,EAC9D;AAEO,EAAMD,aAAA,iBAAiB,CAACC,YAA8B,QAAkC;AAC7F,WAAO,QAAQ,YAAY,KAAK,GAAGA,UAAS,GAAG,0BAA0B,EAAE;AAAA,EAC7E;AAEO,EAAMD,aAAA,oBAAoB,CAACC,YAA8B,SAAiD;AAC/G,WAAO,KAAK,IAAI,CAAC,OAAOD,aAAY,eAAeC,YAAW,EAAE,CAAC;AAAA,EACnE;AAEO,EAAMD,aAAA,kBAAkB,IAAI,eAA4D;AAC7F,WAAO,WAAW,KAAK,0BAA0B;AAAA,EACnD;AAAA,GArBe;","names":["ResourceKey","namespace"]}
1
+ {"version":3,"sources":["../src/resource.ts"],"sourcesContent":["import { NominalType } from '@bessemer/cornerstone/types'\nimport { Strings } from '@bessemer/cornerstone'\nimport Zod, { ZodType } from 'zod'\n\nexport type ResourceKey = string\n\nexport type ResourceNamespace = NominalType<string, 'ResourceNamespace'>\nexport const ResourceNamespaceSchema: ZodType<ResourceNamespace> = Zod.string()\n\nexport namespace ResourceKey {\n const ResourceNamespaceSeparator = '/'\n\n export const namespace = (namespace: ResourceNamespace, key: ResourceKey): ResourceKey => {\n return `${namespace}${ResourceNamespaceSeparator}${key}`\n }\n\n export const namespaceAll = (namespace: ResourceNamespace, keys: Array<ResourceKey>): Array<ResourceKey> => {\n return keys.map((it) => ResourceKey.namespace(namespace, it))\n }\n\n export const stripNamespace = (namespace: ResourceNamespace, key: ResourceKey): ResourceKey => {\n return Strings.removeStart(key, `${namespace}${ResourceNamespaceSeparator}`)\n }\n\n export const stripNamespaceAll = (namespace: ResourceNamespace, keys: Array<ResourceKey>): Array<ResourceKey> => {\n return keys.map((it) => ResourceKey.stripNamespace(namespace, it))\n }\n\n export const extendNamespace = (...namespaces: Array<ResourceNamespace>): ResourceNamespace => {\n return namespaces.join(ResourceNamespaceSeparator)\n }\n}\n"],"mappings":";AACA,SAAS,eAAe;AACxB,OAAO,SAAsB;AAKtB,IAAM,0BAAsD,IAAI,OAAO;AAEvE,IAAU;AAAA,CAAV,CAAUA,iBAAV;AACL,QAAM,6BAA6B;AAE5B,EAAMA,aAAA,YAAY,CAACC,YAA8B,QAAkC;AACxF,WAAO,GAAGA,UAAS,GAAG,0BAA0B,GAAG,GAAG;AAAA,EACxD;AAEO,EAAMD,aAAA,eAAe,CAACC,YAA8B,SAAiD;AAC1G,WAAO,KAAK,IAAI,CAAC,OAAOD,aAAY,UAAUC,YAAW,EAAE,CAAC;AAAA,EAC9D;AAEO,EAAMD,aAAA,iBAAiB,CAACC,YAA8B,QAAkC;AAC7F,WAAO,QAAQ,YAAY,KAAK,GAAGA,UAAS,GAAG,0BAA0B,EAAE;AAAA,EAC7E;AAEO,EAAMD,aAAA,oBAAoB,CAACC,YAA8B,SAAiD;AAC/G,WAAO,KAAK,IAAI,CAAC,OAAOD,aAAY,eAAeC,YAAW,EAAE,CAAC;AAAA,EACnE;AAEO,EAAMD,aAAA,kBAAkB,IAAI,eAA4D;AAC7F,WAAO,WAAW,KAAK,0BAA0B;AAAA,EACnD;AAAA,GArBe;","names":["ResourceKey","namespace"]}
package/dist/ulid.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { TaggedType } from '@bessemer/cornerstone/types';
2
+ import { ZodType } from 'zod';
2
3
  export type Ulid = TaggedType<string, 'Ulid'>;
3
- export declare const generate: () => Ulid;
4
- export declare const asString: (value: Ulid) => string;
5
- export declare const generateString: () => string;
4
+ export declare const Schema: ZodType<Ulid>;
6
5
  export declare const of: (value: string) => Ulid;
7
- export declare const isValid: (value: unknown) => value is Ulid;
6
+ export declare const fromString: (value: string) => Ulid;
7
+ export declare const generate: () => Ulid;
8
8
  //# sourceMappingURL=ulid.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ulid.d.ts","sourceRoot":"","sources":["../src/ulid.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAGxD,MAAM,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAE7C,eAAO,MAAM,QAAQ,QAAO,IAE3B,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,OAAO,IAAI,KAAG,MAEtC,CAAA;AAED,eAAO,MAAM,cAAc,QAAO,MAEjC,CAAA;AAED,eAAO,MAAM,EAAE,GAAI,OAAO,MAAM,KAAG,IAGlC,CAAA;AAID,eAAO,MAAM,OAAO,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,IAEjD,CAAA"}
1
+ {"version":3,"file":"ulid.d.ts","sourceRoot":"","sources":["../src/ulid.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAY,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAElC,MAAM,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAC7C,eAAO,MAAM,MAAM,EAAE,OAAO,CAAC,IAAI,CAAgF,CAAA;AAEjH,eAAO,MAAM,EAAE,GAAI,OAAO,MAAM,KAAG,IAElC,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,IAE1C,CAAA;AAED,eAAO,MAAM,QAAQ,QAAO,IAE3B,CAAA"}
package/dist/ulid.js CHANGED
@@ -1,28 +1,20 @@
1
1
  // src/ulid.ts
2
2
  import { ulid } from "ulid";
3
- import { Assertions, Strings } from "@bessemer/cornerstone";
4
- var generate = () => {
5
- return ulid();
6
- };
7
- var asString = (value) => {
8
- return value;
9
- };
10
- var generateString = () => {
11
- return asString(generate());
12
- };
3
+ import Zod from "zod";
4
+ var Schema = Zod.string().regex(/^[0-9A-HJKMNP-TV-Z]{26}$/, "Invalid ULID format");
13
5
  var of = (value) => {
14
- Assertions.assertTrue(isValid(value), () => `Attempted to coerce invalid value to Ulid: ${value}`);
15
6
  return value;
16
7
  };
17
- var pattern = /^[0-9A-HJKMNP-TV-Z]{26}$/;
18
- var isValid = (value) => {
19
- return Strings.isString(value) && pattern.test(value);
8
+ var fromString = (value) => {
9
+ return Schema.parse(value);
10
+ };
11
+ var generate = () => {
12
+ return ulid();
20
13
  };
21
14
  export {
22
- asString,
15
+ Schema,
16
+ fromString,
23
17
  generate,
24
- generateString,
25
- isValid,
26
18
  of
27
19
  };
28
20
  //# sourceMappingURL=ulid.js.map
package/dist/ulid.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ulid.ts"],"sourcesContent":["import { ulid } from 'ulid'\nimport { TaggedType } from '@bessemer/cornerstone/types'\nimport { Assertions, Strings } from '@bessemer/cornerstone'\n\nexport type Ulid = TaggedType<string, 'Ulid'>\n\nexport const generate = (): Ulid => {\n return ulid() as Ulid\n}\n\nexport const asString = (value: Ulid): string => {\n return value\n}\n\nexport const generateString = (): string => {\n return asString(generate())\n}\n\nexport const of = (value: string): Ulid => {\n Assertions.assertTrue(isValid(value), () => `Attempted to coerce invalid value to Ulid: ${value}`)\n return value as Ulid\n}\n\nconst pattern = /^[0-9A-HJKMNP-TV-Z]{26}$/\n\nexport const isValid = (value: unknown): value is Ulid => {\n return Strings.isString(value) && pattern.test(value)\n}\n"],"mappings":";AAAA,SAAS,YAAY;AAErB,SAAS,YAAY,eAAe;AAI7B,IAAM,WAAW,MAAY;AAClC,SAAO,KAAK;AACd;AAEO,IAAM,WAAW,CAAC,UAAwB;AAC/C,SAAO;AACT;AAEO,IAAM,iBAAiB,MAAc;AAC1C,SAAO,SAAS,SAAS,CAAC;AAC5B;AAEO,IAAM,KAAK,CAAC,UAAwB;AACzC,aAAW,WAAW,QAAQ,KAAK,GAAG,MAAM,8CAA8C,KAAK,EAAE;AACjG,SAAO;AACT;AAEA,IAAM,UAAU;AAET,IAAM,UAAU,CAAC,UAAkC;AACxD,SAAO,QAAQ,SAAS,KAAK,KAAK,QAAQ,KAAK,KAAK;AACtD;","names":[]}
1
+ {"version":3,"sources":["../src/ulid.ts"],"sourcesContent":["import { ulid } from 'ulid'\nimport { TaggedType } from '@bessemer/cornerstone/types'\nimport Zod, { ZodType } from 'zod'\n\nexport type Ulid = TaggedType<string, 'Ulid'>\nexport const Schema: ZodType<Ulid> = Zod.string().regex(/^[0-9A-HJKMNP-TV-Z]{26}$/, 'Invalid ULID format') as any\n\nexport const of = (value: string): Ulid => {\n return value as Ulid\n}\n\nexport const fromString = (value: string): Ulid => {\n return Schema.parse(value)\n}\n\nexport const generate = (): Ulid => {\n return ulid() as Ulid\n}\n"],"mappings":";AAAA,SAAS,YAAY;AAErB,OAAO,SAAsB;AAGtB,IAAM,SAAwB,IAAI,OAAO,EAAE,MAAM,4BAA4B,qBAAqB;AAElG,IAAM,KAAK,CAAC,UAAwB;AACzC,SAAO;AACT;AAEO,IAAM,aAAa,CAAC,UAAwB;AACjD,SAAO,OAAO,MAAM,KAAK;AAC3B;AAEO,IAAM,WAAW,MAAY;AAClC,SAAO,KAAK;AACd;","names":[]}
package/dist/uuid.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { TaggedType } from '@bessemer/cornerstone/types';
2
+ import { ZodType } from 'zod';
2
3
  export type Uuid = TaggedType<string, 'Uuid'>;
3
- export declare const generate: () => Uuid;
4
- export declare const asString: (value: Uuid) => string;
5
- export declare const generateString: () => string;
4
+ export declare const Schema: ZodType<Uuid>;
6
5
  export declare const of: (value: string) => Uuid;
7
- export declare const isValid: (value: unknown) => value is Uuid;
6
+ export declare const fromString: (value: string) => Uuid;
7
+ export declare const generate: () => Uuid;
8
8
  //# sourceMappingURL=uuid.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../src/uuid.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAExD,MAAM,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAE7C,eAAO,MAAM,QAAQ,QAAO,IAM3B,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,OAAO,IAAI,KAAG,MAEtC,CAAA;AAED,eAAO,MAAM,cAAc,QAAO,MAEjC,CAAA;AAQD,eAAO,MAAM,EAAE,GAAI,OAAO,MAAM,KAAG,IAGlC,CAAA;AAID,eAAO,MAAM,OAAO,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,IAEjD,CAAA"}
1
+ {"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../src/uuid.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAY,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAElC,MAAM,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAC7C,eAAO,MAAM,MAAM,EAAE,OAAO,CAAC,IAAI,CAA8B,CAAA;AAE/D,eAAO,MAAM,EAAE,GAAI,OAAO,MAAM,KAAG,IAElC,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,IAE1C,CAAA;AAED,eAAO,MAAM,QAAQ,QAAO,IAM3B,CAAA"}
package/dist/uuid.js CHANGED
@@ -1,5 +1,13 @@
1
1
  // src/uuid.ts
2
- import { Assertions, Objects, Strings } from "@bessemer/cornerstone";
2
+ import { Objects, Strings } from "@bessemer/cornerstone";
3
+ import Zod from "zod";
4
+ var Schema = Zod.string().uuid();
5
+ var of = (value) => {
6
+ return value;
7
+ };
8
+ var fromString = (value) => {
9
+ return Schema.parse(value);
10
+ };
3
11
  var generate = () => {
4
12
  if (Objects.isNil(crypto.randomUUID)) {
5
13
  return `${randomHex(8)}-${randomHex(4)}-${randomHex(4)}-${randomHex(4)}-${randomHex(12)}`;
@@ -7,29 +15,14 @@ var generate = () => {
7
15
  return crypto.randomUUID();
8
16
  }
9
17
  };
10
- var asString = (value) => {
11
- return value;
12
- };
13
- var generateString = () => {
14
- return asString(generate());
15
- };
16
18
  var randomHex = (characters) => {
17
19
  const randomNum = Math.floor(Math.random() * (16 ** characters - 1));
18
20
  return Strings.padStart(randomNum.toString(16), characters, "0");
19
21
  };
20
- var of = (value) => {
21
- Assertions.assertTrue(isValid(value), () => `Attempted to coerce invalid value to Uuid: ${value}`);
22
- return value;
23
- };
24
- var pattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
25
- var isValid = (value) => {
26
- return Strings.isString(value) && pattern.test(value);
27
- };
28
22
  export {
29
- asString,
23
+ Schema,
24
+ fromString,
30
25
  generate,
31
- generateString,
32
- isValid,
33
26
  of
34
27
  };
35
28
  //# sourceMappingURL=uuid.js.map
package/dist/uuid.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/uuid.ts"],"sourcesContent":["import { Assertions, Objects, Strings } from '@bessemer/cornerstone'\nimport { TaggedType } from '@bessemer/cornerstone/types'\n\nexport type Uuid = TaggedType<string, 'Uuid'>\n\nexport const generate = (): Uuid => {\n if (Objects.isNil(crypto.randomUUID)) {\n return `${randomHex(8)}-${randomHex(4)}-${randomHex(4)}-${randomHex(4)}-${randomHex(12)}` as Uuid\n } else {\n return crypto.randomUUID() as Uuid\n }\n}\n\nexport const asString = (value: Uuid): string => {\n return value\n}\n\nexport const generateString = (): string => {\n return asString(generate())\n}\n\nconst randomHex = (characters: number) => {\n // Generates a random number between 0x0..0 and 0xF..F for the target number of characters\n const randomNum = Math.floor(Math.random() * (16 ** characters - 1))\n return Strings.padStart(randomNum.toString(16), characters, '0')\n}\n\nexport const of = (value: string): Uuid => {\n Assertions.assertTrue(isValid(value), () => `Attempted to coerce invalid value to Uuid: ${value}`)\n return value as Uuid\n}\n\nconst pattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\n\nexport const isValid = (value: unknown): value is Uuid => {\n return Strings.isString(value) && pattern.test(value)\n}\n"],"mappings":";AAAA,SAAS,YAAY,SAAS,eAAe;AAKtC,IAAM,WAAW,MAAY;AAClC,MAAI,QAAQ,MAAM,OAAO,UAAU,GAAG;AACpC,WAAO,GAAG,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC;AAAA,EACzF,OAAO;AACL,WAAO,OAAO,WAAW;AAAA,EAC3B;AACF;AAEO,IAAM,WAAW,CAAC,UAAwB;AAC/C,SAAO;AACT;AAEO,IAAM,iBAAiB,MAAc;AAC1C,SAAO,SAAS,SAAS,CAAC;AAC5B;AAEA,IAAM,YAAY,CAAC,eAAuB;AAExC,QAAM,YAAY,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM,aAAa,EAAE;AACnE,SAAO,QAAQ,SAAS,UAAU,SAAS,EAAE,GAAG,YAAY,GAAG;AACjE;AAEO,IAAM,KAAK,CAAC,UAAwB;AACzC,aAAW,WAAW,QAAQ,KAAK,GAAG,MAAM,8CAA8C,KAAK,EAAE;AACjG,SAAO;AACT;AAEA,IAAM,UAAU;AAET,IAAM,UAAU,CAAC,UAAkC;AACxD,SAAO,QAAQ,SAAS,KAAK,KAAK,QAAQ,KAAK,KAAK;AACtD;","names":[]}
1
+ {"version":3,"sources":["../src/uuid.ts"],"sourcesContent":["import { Objects, Strings } from '@bessemer/cornerstone'\nimport { TaggedType } from '@bessemer/cornerstone/types'\nimport Zod, { ZodType } from 'zod'\n\nexport type Uuid = TaggedType<string, 'Uuid'>\nexport const Schema: ZodType<Uuid> = Zod.string().uuid() as any\n\nexport const of = (value: string): Uuid => {\n return value as Uuid\n}\n\nexport const fromString = (value: string): Uuid => {\n return Schema.parse(value)\n}\n\nexport const generate = (): Uuid => {\n if (Objects.isNil(crypto.randomUUID)) {\n return `${randomHex(8)}-${randomHex(4)}-${randomHex(4)}-${randomHex(4)}-${randomHex(12)}` as Uuid\n } else {\n return crypto.randomUUID() as Uuid\n }\n}\n\nconst randomHex = (characters: number) => {\n // Generates a random number between 0x0..0 and 0xF..F for the target number of characters\n const randomNum = Math.floor(Math.random() * (16 ** characters - 1))\n return Strings.padStart(randomNum.toString(16), characters, '0')\n}\n"],"mappings":";AAAA,SAAS,SAAS,eAAe;AAEjC,OAAO,SAAsB;AAGtB,IAAM,SAAwB,IAAI,OAAO,EAAE,KAAK;AAEhD,IAAM,KAAK,CAAC,UAAwB;AACzC,SAAO;AACT;AAEO,IAAM,aAAa,CAAC,UAAwB;AACjD,SAAO,OAAO,MAAM,KAAK;AAC3B;AAEO,IAAM,WAAW,MAAY;AAClC,MAAI,QAAQ,MAAM,OAAO,UAAU,GAAG;AACpC,WAAO,GAAG,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC;AAAA,EACzF,OAAO;AACL,WAAO,OAAO,WAAW;AAAA,EAC3B;AACF;AAEA,IAAM,YAAY,CAAC,eAAuB;AAExC,QAAM,YAAY,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM,aAAa,EAAE;AACnE,SAAO,QAAQ,SAAS,UAAU,SAAS,EAAE,GAAG,YAAY,GAAG;AACjE;","names":[]}
@@ -0,0 +1,10 @@
1
+ import Zod, { ZodType } from 'zod';
2
+ import { ResourceKey } from '@bessemer/cornerstone/resource';
3
+ import { Result } from '@bessemer/cornerstone/result';
4
+ export declare const parse: <T extends ZodType>(type: T, data: unknown) => Result<Zod.infer<T>>;
5
+ export declare const parseOrThrow: <T extends ZodType>(type: T, data: unknown) => Zod.infer<T>;
6
+ export declare const parseJson: <T extends ZodType>(type: T, data: string) => Result<Zod.infer<T>>;
7
+ export declare const parseJsonOrThrow: <T extends ZodType>(type: T, data: string) => Zod.infer<T>;
8
+ export declare const arrayable: <T>(type: ZodType<T>) => Zod.ZodUnion<[Zod.ZodType<T, Zod.ZodTypeDef, T>, Zod.ZodArray<Zod.ZodType<T, Zod.ZodTypeDef, T>, "many">]>;
9
+ export declare const key: () => ZodType<ResourceKey>;
10
+ //# sourceMappingURL=zod-util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod-util.d.ts","sourceRoot":"","sources":["../src/zod-util.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAE5D,OAAO,EAA4B,MAAM,EAAW,MAAM,8BAA8B,CAAA;AAExF,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,OAAO,KAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAOpF,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,OAAO,KAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAEnF,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,MAAM,KAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAOvF,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,MAAM,KAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAEtF,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,+GAE5C,CAAA;AAED,eAAO,MAAM,GAAG,QAAO,OAAO,CAAC,WAAW,CAEzC,CAAA"}
@@ -1,29 +1,7 @@
1
- // src/zod.ts
1
+ // src/zod-util.ts
2
2
  import Zod from "zod";
3
3
  import { parse as jsonParse } from "@bessemer/cornerstone/json";
4
4
  import { failure, getValueOrThrow, success } from "@bessemer/cornerstone/result";
5
- var object = Zod.object;
6
- var string = Zod.string;
7
- var union = Zod.union;
8
- var array = Zod.array;
9
- var unknown = Zod.unknown;
10
- var nullType = Zod.null;
11
- var undefined = Zod.undefined;
12
- var date = Zod.date;
13
- var boolean = Zod.boolean;
14
- var number = Zod.number;
15
- var tuple = Zod.tuple;
16
- var record = Zod.record;
17
- var lazy = Zod.lazy;
18
- var arrayable = (type) => {
19
- return union([type, array(type)]);
20
- };
21
- var key = () => {
22
- return string();
23
- };
24
- var entry = (value, key2) => {
25
- return tuple([key2 ?? string(), value]);
26
- };
27
5
  var parse = (type, data) => {
28
6
  const result = type.safeParse(data);
29
7
  if (result.success) {
@@ -45,26 +23,18 @@ var parseJson = (type, data) => {
45
23
  var parseJsonOrThrow = (type, data) => {
46
24
  return parseJson(type, data);
47
25
  };
26
+ var arrayable = (type) => {
27
+ return Zod.union([type, Zod.array(type)]);
28
+ };
29
+ var key = () => {
30
+ return Zod.string();
31
+ };
48
32
  export {
49
- array,
50
33
  arrayable,
51
- boolean,
52
- date,
53
- entry,
54
34
  key,
55
- lazy,
56
- nullType,
57
- number,
58
- object,
59
35
  parse,
60
36
  parseJson,
61
37
  parseJsonOrThrow,
62
- parseOrThrow,
63
- record,
64
- string,
65
- tuple,
66
- undefined,
67
- union,
68
- unknown
38
+ parseOrThrow
69
39
  };
70
- //# sourceMappingURL=zod.js.map
40
+ //# sourceMappingURL=zod-util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/zod-util.ts"],"sourcesContent":["import Zod, { ZodType } from 'zod'\nimport { ResourceKey } from '@bessemer/cornerstone/resource'\nimport { parse as jsonParse } from '@bessemer/cornerstone/json'\nimport { failure, getValueOrThrow, Result, success } from '@bessemer/cornerstone/result'\n\nexport const parse = <T extends ZodType>(type: T, data: unknown): Result<Zod.infer<T>> => {\n const result = type.safeParse(data)\n if (result.success) {\n return success(result.data)\n } else {\n return failure(result.error)\n }\n}\n\nexport const parseOrThrow = <T extends ZodType>(type: T, data: unknown): Zod.infer<T> => {\n return getValueOrThrow(parse(type, data))\n}\n\nexport const parseJson = <T extends ZodType>(type: T, data: string): Result<Zod.infer<T>> => {\n const result = jsonParse(data)\n if (!result.isSuccess) {\n return result\n }\n\n return parse(type, result.value)\n}\n\nexport const parseJsonOrThrow = <T extends ZodType>(type: T, data: string): Zod.infer<T> => {\n return parseJson(type, data)\n}\n\nexport const arrayable = <T>(type: ZodType<T>) => {\n return Zod.union([type, Zod.array(type)])\n}\n\nexport const key = (): ZodType<ResourceKey> => {\n return Zod.string()\n}\n"],"mappings":";AAAA,OAAO,SAAsB;AAE7B,SAAS,SAAS,iBAAiB;AACnC,SAAS,SAAS,iBAAyB,eAAe;AAEnD,IAAM,QAAQ,CAAoB,MAAS,SAAwC;AACxF,QAAM,SAAS,KAAK,UAAU,IAAI;AAClC,MAAI,OAAO,SAAS;AAClB,WAAO,QAAQ,OAAO,IAAI;AAAA,EAC5B,OAAO;AACL,WAAO,QAAQ,OAAO,KAAK;AAAA,EAC7B;AACF;AAEO,IAAM,eAAe,CAAoB,MAAS,SAAgC;AACvF,SAAO,gBAAgB,MAAM,MAAM,IAAI,CAAC;AAC1C;AAEO,IAAM,YAAY,CAAoB,MAAS,SAAuC;AAC3F,QAAM,SAAS,UAAU,IAAI;AAC7B,MAAI,CAAC,OAAO,WAAW;AACrB,WAAO;AAAA,EACT;AAEA,SAAO,MAAM,MAAM,OAAO,KAAK;AACjC;AAEO,IAAM,mBAAmB,CAAoB,MAAS,SAA+B;AAC1F,SAAO,UAAU,MAAM,IAAI;AAC7B;AAEO,IAAM,YAAY,CAAI,SAAqB;AAChD,SAAO,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,IAAI,CAAC,CAAC;AAC1C;AAEO,IAAM,MAAM,MAA4B;AAC7C,SAAO,IAAI,OAAO;AACpB;","names":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bessemer/cornerstone",
3
3
  "type": "module",
4
- "version": "0.5.58",
4
+ "version": "0.5.60",
5
5
  "module": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
7
7
  "sideEffects": false,
package/dist/zod.d.ts DELETED
@@ -1,36 +0,0 @@
1
- import Zod, { ZodType } from 'zod';
2
- import { ResourceKey } from '@bessemer/cornerstone/resource';
3
- import { Entry } from '@bessemer/cornerstone/entry';
4
- import { Result } from '@bessemer/cornerstone/result';
5
- export type infer<T extends ZodType<any, any, any>> = Zod.infer<T>;
6
- export type input<T extends ZodType<any, any, any>> = Zod.input<T>;
7
- export type output<T extends ZodType<any, any, any>> = Zod.output<T>;
8
- export declare const object: <T extends Zod.ZodRawShape>(shape: T, params?: Zod.RawCreateParams) => Zod.ZodObject<T, "strip", Zod.ZodTypeAny, Zod.objectOutputType<T, Zod.ZodTypeAny, "strip">, Zod.objectInputType<T, Zod.ZodTypeAny, "strip">>;
9
- export declare const string: (params?: Zod.RawCreateParams & {
10
- coerce?: true;
11
- }) => Zod.ZodString;
12
- export declare const union: <T extends readonly [Zod.ZodTypeAny, Zod.ZodTypeAny, ...Zod.ZodTypeAny[]]>(types: T, params?: Zod.RawCreateParams) => Zod.ZodUnion<T>;
13
- export declare const array: <T extends Zod.ZodTypeAny>(schema: T, params?: Zod.RawCreateParams) => Zod.ZodArray<T>;
14
- export declare const unknown: (params?: Zod.RawCreateParams) => Zod.ZodUnknown;
15
- export declare const nullType: (params?: Zod.RawCreateParams) => Zod.ZodNull;
16
- export declare const undefined: (params?: Zod.RawCreateParams) => Zod.ZodUndefined;
17
- export declare const date: (params?: Zod.RawCreateParams & {
18
- coerce?: boolean;
19
- }) => Zod.ZodDate;
20
- export declare const boolean: (params?: Zod.RawCreateParams & {
21
- coerce?: boolean;
22
- }) => Zod.ZodBoolean;
23
- export declare const number: (params?: Zod.RawCreateParams & {
24
- coerce?: boolean;
25
- }) => Zod.ZodNumber;
26
- export declare const tuple: <T extends [] | [Zod.ZodTypeAny, ...Zod.ZodTypeAny[]]>(schemas: T, params?: Zod.RawCreateParams) => Zod.ZodTuple<T, null>;
27
- export declare const record: typeof Zod.ZodRecord.create;
28
- export declare const lazy: <T extends Zod.ZodTypeAny>(getter: () => T, params?: Zod.RawCreateParams) => Zod.ZodLazy<T>;
29
- export declare const arrayable: <T>(type: ZodType<T>) => Zod.ZodUnion<[Zod.ZodType<T, Zod.ZodTypeDef, T>, Zod.ZodArray<Zod.ZodType<T, Zod.ZodTypeDef, T>, "many">]>;
30
- export declare const key: () => ZodType<ResourceKey>;
31
- export declare const entry: <Value, Key = string>(value: ZodType<Value>, key?: ZodType<Key>) => ZodType<Entry<Value, Key>>;
32
- export declare const parse: <T extends ZodType>(type: T, data: unknown) => Result<Zod.infer<T>>;
33
- export declare const parseOrThrow: <T extends ZodType>(type: T, data: unknown) => Zod.infer<T>;
34
- export declare const parseJson: <T extends ZodType>(type: T, data: string) => Result<Zod.infer<T>>;
35
- export declare const parseJsonOrThrow: <T extends ZodType>(type: T, data: string) => Zod.infer<T>;
36
- //# sourceMappingURL=zod.d.ts.map
package/dist/zod.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"zod.d.ts","sourceRoot":"","sources":["../src/zod.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAA;AAEnD,OAAO,EAA4B,MAAM,EAAW,MAAM,8BAA8B,CAAA;AAExF,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAClE,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAClE,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AACpE,eAAO,MAAM,MAAM,qNAAa,CAAA;AAChC,eAAO,MAAM,MAAM;UAkD4p4C,CAAC;mBAlDhp4C,CAAA;AAChC,eAAO,MAAM,KAAK,uIAAY,CAAA;AAC9B,eAAO,MAAM,KAAK,wFAAY,CAAA;AAC9B,eAAO,MAAM,OAAO,kDAAc,CAAA;AAClC,eAAO,MAAM,QAAQ,+CAAW,CAAA;AAChC,eAAO,MAAM,SAAS,oDAAgB,CAAA;AACtC,eAAO,MAAM,IAAI;UA4Col5C,CAAC;iBA5C1k5C,CAAA;AAC5B,eAAO,MAAM,OAAO;UA2Cm/4C,CAAC;oBA3Ct+4C,CAAA;AAClC,eAAO,MAAM,MAAM;UA0Cwv4C,CAAC;mBA1C5u4C,CAAA;AAChC,eAAO,MAAM,KAAK,2HAAY,CAAA;AAC9B,eAAO,MAAM,MAAM,6BAAa,CAAA;AAChC,eAAO,MAAM,IAAI,6FAAW,CAAA;AAE5B,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,+GAE5C,CAAA;AAED,eAAO,MAAM,GAAG,QAAO,OAAO,CAAC,WAAW,CAEzC,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,KAAK,EAAE,GAAG,GAAG,MAAM,EAAE,OAAO,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,KAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAE/G,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,OAAO,KAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAOpF,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,OAAO,KAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAEnF,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,MAAM,KAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAOvF,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,MAAM,KAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAEtF,CAAA"}
package/dist/zod.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/zod.ts"],"sourcesContent":["import Zod, { ZodType } from 'zod'\nimport { ResourceKey } from '@bessemer/cornerstone/resource'\nimport { Entry } from '@bessemer/cornerstone/entry'\nimport { parse as jsonParse } from '@bessemer/cornerstone/json'\nimport { failure, getValueOrThrow, Result, success } from '@bessemer/cornerstone/result'\n\nexport type infer<T extends ZodType<any, any, any>> = Zod.infer<T>\nexport type input<T extends ZodType<any, any, any>> = Zod.input<T>\nexport type output<T extends ZodType<any, any, any>> = Zod.output<T>\nexport const object = Zod.object\nexport const string = Zod.string\nexport const union = Zod.union\nexport const array = Zod.array\nexport const unknown = Zod.unknown\nexport const nullType = Zod.null\nexport const undefined = Zod.undefined\nexport const date = Zod.date\nexport const boolean = Zod.boolean\nexport const number = Zod.number\nexport const tuple = Zod.tuple\nexport const record = Zod.record\nexport const lazy = Zod.lazy\n\nexport const arrayable = <T>(type: ZodType<T>) => {\n return union([type, array(type)])\n}\n\nexport const key = (): ZodType<ResourceKey> => {\n return string()\n}\n\nexport const entry = <Value, Key = string>(value: ZodType<Value>, key?: ZodType<Key>): ZodType<Entry<Value, Key>> => {\n return tuple([key ?? string(), value]) as ZodType<Entry<Value, Key>>\n}\n\nexport const parse = <T extends ZodType>(type: T, data: unknown): Result<Zod.infer<T>> => {\n const result = type.safeParse(data)\n if (result.success) {\n return success(result.data)\n } else {\n return failure(result.error)\n }\n}\n\nexport const parseOrThrow = <T extends ZodType>(type: T, data: unknown): Zod.infer<T> => {\n return getValueOrThrow(parse(type, data))\n}\n\nexport const parseJson = <T extends ZodType>(type: T, data: string): Result<Zod.infer<T>> => {\n const result = jsonParse(data)\n if (!result.isSuccess) {\n return result\n }\n\n return parse(type, result.value)\n}\n\nexport const parseJsonOrThrow = <T extends ZodType>(type: T, data: string): Zod.infer<T> => {\n return parseJson(type, data)\n}\n"],"mappings":";AAAA,OAAO,SAAsB;AAG7B,SAAS,SAAS,iBAAiB;AACnC,SAAS,SAAS,iBAAyB,eAAe;AAKnD,IAAM,SAAS,IAAI;AACnB,IAAM,SAAS,IAAI;AACnB,IAAM,QAAQ,IAAI;AAClB,IAAM,QAAQ,IAAI;AAClB,IAAM,UAAU,IAAI;AACpB,IAAM,WAAW,IAAI;AACrB,IAAM,YAAY,IAAI;AACtB,IAAM,OAAO,IAAI;AACjB,IAAM,UAAU,IAAI;AACpB,IAAM,SAAS,IAAI;AACnB,IAAM,QAAQ,IAAI;AAClB,IAAM,SAAS,IAAI;AACnB,IAAM,OAAO,IAAI;AAEjB,IAAM,YAAY,CAAI,SAAqB;AAChD,SAAO,MAAM,CAAC,MAAM,MAAM,IAAI,CAAC,CAAC;AAClC;AAEO,IAAM,MAAM,MAA4B;AAC7C,SAAO,OAAO;AAChB;AAEO,IAAM,QAAQ,CAAsB,OAAuBA,SAAmD;AACnH,SAAO,MAAM,CAACA,QAAO,OAAO,GAAG,KAAK,CAAC;AACvC;AAEO,IAAM,QAAQ,CAAoB,MAAS,SAAwC;AACxF,QAAM,SAAS,KAAK,UAAU,IAAI;AAClC,MAAI,OAAO,SAAS;AAClB,WAAO,QAAQ,OAAO,IAAI;AAAA,EAC5B,OAAO;AACL,WAAO,QAAQ,OAAO,KAAK;AAAA,EAC7B;AACF;AAEO,IAAM,eAAe,CAAoB,MAAS,SAAgC;AACvF,SAAO,gBAAgB,MAAM,MAAM,IAAI,CAAC;AAC1C;AAEO,IAAM,YAAY,CAAoB,MAAS,SAAuC;AAC3F,QAAM,SAAS,UAAU,IAAI;AAC7B,MAAI,CAAC,OAAO,WAAW;AACrB,WAAO;AAAA,EACT;AAEA,SAAO,MAAM,MAAM,OAAO,KAAK;AACjC;AAEO,IAAM,mBAAmB,CAAoB,MAAS,SAA+B;AAC1F,SAAO,UAAU,MAAM,IAAI;AAC7B;","names":["key"]}