@bessemer/cornerstone 0.5.71 → 0.5.73

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 (76) hide show
  1. package/dist/aspect-ratio.d.ts +2 -2
  2. package/dist/aspect-ratio.d.ts.map +1 -1
  3. package/dist/aspect-ratio.js +1 -1
  4. package/dist/aspect-ratio.js.map +1 -1
  5. package/dist/data-size.d.ts +2 -2
  6. package/dist/data-size.d.ts.map +1 -1
  7. package/dist/data-size.js +1 -1
  8. package/dist/data-size.js.map +1 -1
  9. package/dist/duration.d.ts +2 -2
  10. package/dist/duration.d.ts.map +1 -1
  11. package/dist/duration.js +1 -1
  12. package/dist/duration.js.map +1 -1
  13. package/dist/hex-code.d.ts +2 -2
  14. package/dist/hex-code.d.ts.map +1 -1
  15. package/dist/hex-code.js +1 -1
  16. package/dist/hex-code.js.map +1 -1
  17. package/dist/index.d.ts +8 -3
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +13 -3
  20. package/dist/index.js.map +1 -1
  21. package/dist/intl/country-code.d.ts +45 -0
  22. package/dist/intl/country-code.d.ts.map +1 -0
  23. package/dist/intl/country-code.js +91 -0
  24. package/dist/intl/country-code.js.map +1 -0
  25. package/dist/intl/country-subdivision-code.d.ts +9 -0
  26. package/dist/intl/country-subdivision-code.d.ts.map +1 -0
  27. package/dist/intl/country-subdivision-code.js +20 -0
  28. package/dist/intl/country-subdivision-code.js.map +1 -0
  29. package/dist/{currency.d.ts → intl/currency-code.d.ts} +3 -3
  30. package/dist/intl/currency-code.d.ts.map +1 -0
  31. package/dist/{currency.js → intl/currency-code.js} +3 -3
  32. package/dist/intl/currency-code.js.map +1 -0
  33. package/dist/intl/language-code.d.ts +32 -0
  34. package/dist/intl/language-code.d.ts.map +1 -0
  35. package/dist/intl/language-code.js +65 -0
  36. package/dist/intl/language-code.js.map +1 -0
  37. package/dist/intl/locale.d.ts +26 -0
  38. package/dist/intl/locale.d.ts.map +1 -0
  39. package/dist/intl/locale.js +70 -0
  40. package/dist/intl/locale.js.map +1 -0
  41. package/dist/mime-type.d.ts +2 -2
  42. package/dist/mime-type.d.ts.map +1 -1
  43. package/dist/mime-type.js +1 -1
  44. package/dist/mime-type.js.map +1 -1
  45. package/dist/monetary-amount.d.ts +6 -3
  46. package/dist/monetary-amount.d.ts.map +1 -1
  47. package/dist/monetary-amount.js +1 -1
  48. package/dist/monetary-amount.js.map +1 -1
  49. package/dist/object/object-diff.d.ts +42 -0
  50. package/dist/object/object-diff.d.ts.map +1 -0
  51. package/dist/object/object-diff.js +24 -0
  52. package/dist/object/object-diff.js.map +1 -0
  53. package/dist/object/object-path.d.ts +13 -0
  54. package/dist/object/object-path.d.ts.map +1 -0
  55. package/dist/{object-path.js → object/object-path.js} +18 -27
  56. package/dist/object/object-path.js.map +1 -0
  57. package/dist/object/type-path.d.ts +9 -0
  58. package/dist/object/type-path.d.ts.map +1 -0
  59. package/dist/object/type-path.js +44 -0
  60. package/dist/object/type-path.js.map +1 -0
  61. package/dist/types.d.ts +5 -0
  62. package/dist/types.d.ts.map +1 -1
  63. package/dist/ulid.d.ts +2 -2
  64. package/dist/ulid.d.ts.map +1 -1
  65. package/dist/ulid.js +1 -1
  66. package/dist/ulid.js.map +1 -1
  67. package/dist/uuid.d.ts +2 -2
  68. package/dist/uuid.d.ts.map +1 -1
  69. package/dist/uuid.js +1 -1
  70. package/dist/uuid.js.map +1 -1
  71. package/package.json +1 -1
  72. package/dist/currency.d.ts.map +0 -1
  73. package/dist/currency.js.map +0 -1
  74. package/dist/object-path.d.ts +0 -11
  75. package/dist/object-path.d.ts.map +0 -1
  76. package/dist/object-path.js.map +0 -1
@@ -0,0 +1,65 @@
1
+ // src/intl/language-code.ts
2
+ import Zod from "zod";
3
+ var of = (value) => {
4
+ return value;
5
+ };
6
+ var Schema = Zod.string().trim().toLowerCase().regex(/^[a-z]{2}$/, "LanguageCode must be exactly 2 lowercase letters").transform(of);
7
+ var fromString = (value) => {
8
+ return Schema.parse(value);
9
+ };
10
+ var English = of("en");
11
+ var Spanish = of("es");
12
+ var French = of("fr");
13
+ var German = of("de");
14
+ var Italian = of("it");
15
+ var Portuguese = of("pt");
16
+ var Dutch = of("nl");
17
+ var Russian = of("ru");
18
+ var Chinese = of("zh");
19
+ var Japanese = of("ja");
20
+ var Korean = of("ko");
21
+ var Arabic = of("ar");
22
+ var Hindi = of("hi");
23
+ var Turkish = of("tr");
24
+ var Polish = of("pl");
25
+ var Swedish = of("sv");
26
+ var Norwegian = of("no");
27
+ var Danish = of("da");
28
+ var Finnish = of("fi");
29
+ var Greek = of("el");
30
+ var Hebrew = of("he");
31
+ var Thai = of("th");
32
+ var Vietnamese = of("vi");
33
+ var Indonesian = of("id");
34
+ var Malay = of("ms");
35
+ export {
36
+ Arabic,
37
+ Chinese,
38
+ Danish,
39
+ Dutch,
40
+ English,
41
+ Finnish,
42
+ French,
43
+ German,
44
+ Greek,
45
+ Hebrew,
46
+ Hindi,
47
+ Indonesian,
48
+ Italian,
49
+ Japanese,
50
+ Korean,
51
+ Malay,
52
+ Norwegian,
53
+ Polish,
54
+ Portuguese,
55
+ Russian,
56
+ Schema,
57
+ Spanish,
58
+ Swedish,
59
+ Thai,
60
+ Turkish,
61
+ Vietnamese,
62
+ fromString,
63
+ of
64
+ };
65
+ //# sourceMappingURL=language-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/intl/language-code.ts"],"sourcesContent":["import { TaggedType } from '@bessemer/cornerstone/types'\nimport Zod from 'zod'\n\n// ISO 639 language codes\nexport type LanguageCode = TaggedType<string, 'LanguageCode'>\n\nexport const of = (value: string): LanguageCode => {\n return value as LanguageCode\n}\n\nexport const Schema = Zod.string()\n .trim()\n .toLowerCase()\n .regex(/^[a-z]{2}$/, 'LanguageCode must be exactly 2 lowercase letters')\n .transform(of)\n\nexport const fromString = (value: string): LanguageCode => {\n return Schema.parse(value)\n}\n\nexport const English = of('en')\nexport const Spanish = of('es')\nexport const French = of('fr')\nexport const German = of('de')\nexport const Italian = of('it')\nexport const Portuguese = of('pt')\nexport const Dutch = of('nl')\nexport const Russian = of('ru')\nexport const Chinese = of('zh')\nexport const Japanese = of('ja')\nexport const Korean = of('ko')\nexport const Arabic = of('ar')\nexport const Hindi = of('hi')\nexport const Turkish = of('tr')\nexport const Polish = of('pl')\nexport const Swedish = of('sv')\nexport const Norwegian = of('no')\nexport const Danish = of('da')\nexport const Finnish = of('fi')\nexport const Greek = of('el')\nexport const Hebrew = of('he')\nexport const Thai = of('th')\nexport const Vietnamese = of('vi')\nexport const Indonesian = of('id')\nexport const Malay = of('ms')\n"],"mappings":";AACA,OAAO,SAAS;AAKT,IAAM,KAAK,CAAC,UAAgC;AACjD,SAAO;AACT;AAEO,IAAM,SAAS,IAAI,OAAO,EAC9B,KAAK,EACL,YAAY,EACZ,MAAM,cAAc,kDAAkD,EACtE,UAAU,EAAE;AAER,IAAM,aAAa,CAAC,UAAgC;AACzD,SAAO,OAAO,MAAM,KAAK;AAC3B;AAEO,IAAM,UAAU,GAAG,IAAI;AACvB,IAAM,UAAU,GAAG,IAAI;AACvB,IAAM,SAAS,GAAG,IAAI;AACtB,IAAM,SAAS,GAAG,IAAI;AACtB,IAAM,UAAU,GAAG,IAAI;AACvB,IAAM,aAAa,GAAG,IAAI;AAC1B,IAAM,QAAQ,GAAG,IAAI;AACrB,IAAM,UAAU,GAAG,IAAI;AACvB,IAAM,UAAU,GAAG,IAAI;AACvB,IAAM,WAAW,GAAG,IAAI;AACxB,IAAM,SAAS,GAAG,IAAI;AACtB,IAAM,SAAS,GAAG,IAAI;AACtB,IAAM,QAAQ,GAAG,IAAI;AACrB,IAAM,UAAU,GAAG,IAAI;AACvB,IAAM,SAAS,GAAG,IAAI;AACtB,IAAM,UAAU,GAAG,IAAI;AACvB,IAAM,YAAY,GAAG,IAAI;AACzB,IAAM,SAAS,GAAG,IAAI;AACtB,IAAM,UAAU,GAAG,IAAI;AACvB,IAAM,QAAQ,GAAG,IAAI;AACrB,IAAM,SAAS,GAAG,IAAI;AACtB,IAAM,OAAO,GAAG,IAAI;AACpB,IAAM,aAAa,GAAG,IAAI;AAC1B,IAAM,aAAa,GAAG,IAAI;AAC1B,IAAM,QAAQ,GAAG,IAAI;","names":[]}
@@ -0,0 +1,26 @@
1
+ import { TaggedType } from '@bessemer/cornerstone/types';
2
+ import Zod from 'zod';
3
+ import { LanguageCode } from '@bessemer/cornerstone/intl/language-code';
4
+ import { CountryCode } from '@bessemer/cornerstone/intl/country-code';
5
+ export type Locale = TaggedType<string, 'Locale'>;
6
+ export declare const Schema: Zod.ZodPipe<Zod.ZodString, Zod.ZodTransform<Locale, string>>;
7
+ export declare const of: (value: string) => Locale;
8
+ export declare const fromString: (value: string) => Locale;
9
+ export declare const fromCode: (language: LanguageCode, country?: CountryCode | null) => Locale;
10
+ export declare const parse: (locale: Locale) => [LanguageCode, CountryCode | null];
11
+ export declare const English: Locale;
12
+ export declare const Spanish: Locale;
13
+ export declare const French: Locale;
14
+ export declare const German: Locale;
15
+ export declare const Italian: Locale;
16
+ export declare const Portuguese: Locale;
17
+ export declare const Dutch: Locale;
18
+ export declare const Russian: Locale;
19
+ export declare const Chinese: Locale;
20
+ export declare const Japanese: Locale;
21
+ export declare const Korean: Locale;
22
+ export declare const AmericanEnglish: Locale;
23
+ export declare const BritishEnglish: Locale;
24
+ export declare const CanadianEnglish: Locale;
25
+ export declare const AustralianEnglish: Locale;
26
+ //# sourceMappingURL=locale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locale.d.ts","sourceRoot":"","sources":["../../src/intl/locale.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAwC,YAAY,EAAE,MAAM,0CAA0C,CAAA;AAC7G,OAAO,EAAE,WAAW,EAAuC,MAAM,yCAAyC,CAAA;AAI1G,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;AACjD,eAAO,MAAM,MAAM,8DAWf,CAAA;AAEJ,eAAO,MAAM,EAAE,GAAI,OAAO,MAAM,KAAG,MAElC,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,MAE1C,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,UAAU,YAAY,EAAE,UAAU,WAAW,GAAG,IAAI,KAAG,MAM/E,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,QAAQ,MAAM,KAAG,CAAC,YAAY,EAAE,WAAW,GAAG,IAAI,CAKvE,CAAA;AAED,eAAO,MAAM,OAAO,QAAW,CAAA;AAC/B,eAAO,MAAM,OAAO,QAAW,CAAA;AAC/B,eAAO,MAAM,MAAM,QAAW,CAAA;AAC9B,eAAO,MAAM,MAAM,QAAW,CAAA;AAC9B,eAAO,MAAM,OAAO,QAAW,CAAA;AAC/B,eAAO,MAAM,UAAU,QAAW,CAAA;AAClC,eAAO,MAAM,KAAK,QAAW,CAAA;AAC7B,eAAO,MAAM,OAAO,QAAW,CAAA;AAC/B,eAAO,MAAM,OAAO,QAAW,CAAA;AAC/B,eAAO,MAAM,QAAQ,QAAW,CAAA;AAChC,eAAO,MAAM,MAAM,QAAW,CAAA;AAE9B,eAAO,MAAM,eAAe,QAAc,CAAA;AAC1C,eAAO,MAAM,cAAc,QAAc,CAAA;AACzC,eAAO,MAAM,eAAe,QAAc,CAAA;AAC1C,eAAO,MAAM,iBAAiB,QAAc,CAAA"}
@@ -0,0 +1,70 @@
1
+ // src/intl/locale.ts
2
+ import Zod from "zod";
3
+ import { fromString as languageCodeFromString } from "@bessemer/cornerstone/intl/language-code";
4
+ import { fromString as countryCodeFromString } from "@bessemer/cornerstone/intl/country-code";
5
+ import { isPresent } from "@bessemer/cornerstone/object";
6
+ import { Assertions } from "@bessemer/cornerstone";
7
+ var Schema = Zod.string().trim().toLowerCase().regex(/^[a-z]{2}(-[a-z]{2})?$/, 'Locale must be in format "en" or "en-US"').transform((value) => {
8
+ const parts = value.split("-");
9
+ Assertions.assertPresent(parts[0]);
10
+ const languageCode = languageCodeFromString(parts[0]);
11
+ const countryCode = isPresent(parts[1]) ? countryCodeFromString(parts[1]) : null;
12
+ return fromCode(languageCode, countryCode);
13
+ });
14
+ var of = (value) => {
15
+ return value;
16
+ };
17
+ var fromString = (value) => {
18
+ return Schema.parse(value);
19
+ };
20
+ var fromCode = (language, country) => {
21
+ if (isPresent(country)) {
22
+ return of(`${language}-${country}`);
23
+ } else {
24
+ return of(language);
25
+ }
26
+ };
27
+ var parse = (locale) => {
28
+ const parts = locale.split("-");
29
+ const languageCode = parts[0];
30
+ const countryCode = isPresent(parts[1]) ? parts[1] : null;
31
+ return [languageCode, countryCode];
32
+ };
33
+ var English = of("en");
34
+ var Spanish = of("es");
35
+ var French = of("fr");
36
+ var German = of("de");
37
+ var Italian = of("it");
38
+ var Portuguese = of("pt");
39
+ var Dutch = of("nl");
40
+ var Russian = of("ru");
41
+ var Chinese = of("zh");
42
+ var Japanese = of("ja");
43
+ var Korean = of("ko");
44
+ var AmericanEnglish = of("en-US");
45
+ var BritishEnglish = of("en-GB");
46
+ var CanadianEnglish = of("en-CA");
47
+ var AustralianEnglish = of("en-AU");
48
+ export {
49
+ AmericanEnglish,
50
+ AustralianEnglish,
51
+ BritishEnglish,
52
+ CanadianEnglish,
53
+ Chinese,
54
+ Dutch,
55
+ English,
56
+ French,
57
+ German,
58
+ Italian,
59
+ Japanese,
60
+ Korean,
61
+ Portuguese,
62
+ Russian,
63
+ Schema,
64
+ Spanish,
65
+ fromCode,
66
+ fromString,
67
+ of,
68
+ parse
69
+ };
70
+ //# sourceMappingURL=locale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/intl/locale.ts"],"sourcesContent":["import { TaggedType } from '@bessemer/cornerstone/types'\nimport Zod from 'zod'\nimport { fromString as languageCodeFromString, LanguageCode } from '@bessemer/cornerstone/intl/language-code'\nimport { CountryCode, fromString as countryCodeFromString } from '@bessemer/cornerstone/intl/country-code'\nimport { isPresent } from '@bessemer/cornerstone/object'\nimport { Assertions } from '@bessemer/cornerstone'\n\nexport type Locale = TaggedType<string, 'Locale'>\nexport const Schema = Zod.string()\n .trim()\n .toLowerCase()\n .regex(/^[a-z]{2}(-[a-z]{2})?$/, 'Locale must be in format \"en\" or \"en-US\"')\n .transform((value) => {\n const parts = value.split('-')\n Assertions.assertPresent(parts[0])\n const languageCode = languageCodeFromString(parts[0])\n const countryCode = isPresent(parts[1]) ? countryCodeFromString(parts[1]) : null\n\n return fromCode(languageCode, countryCode)\n })\n\nexport const of = (value: string): Locale => {\n return value as Locale\n}\n\nexport const fromString = (value: string): Locale => {\n return Schema.parse(value)\n}\n\nexport const fromCode = (language: LanguageCode, country?: CountryCode | null): Locale => {\n if (isPresent(country)) {\n return of(`${language}-${country}`)\n } else {\n return of(language)\n }\n}\n\nexport const parse = (locale: Locale): [LanguageCode, CountryCode | null] => {\n const parts = locale.split('-')\n const languageCode = parts[0] as LanguageCode\n const countryCode = isPresent(parts[1]) ? (parts[1] as CountryCode) : null\n return [languageCode, countryCode]\n}\n\nexport const English = of('en')\nexport const Spanish = of('es')\nexport const French = of('fr')\nexport const German = of('de')\nexport const Italian = of('it')\nexport const Portuguese = of('pt')\nexport const Dutch = of('nl')\nexport const Russian = of('ru')\nexport const Chinese = of('zh')\nexport const Japanese = of('ja')\nexport const Korean = of('ko')\n\nexport const AmericanEnglish = of('en-US')\nexport const BritishEnglish = of('en-GB')\nexport const CanadianEnglish = of('en-CA')\nexport const AustralianEnglish = of('en-AU')\n"],"mappings":";AACA,OAAO,SAAS;AAChB,SAAS,cAAc,8BAA4C;AACnE,SAAsB,cAAc,6BAA6B;AACjE,SAAS,iBAAiB;AAC1B,SAAS,kBAAkB;AAGpB,IAAM,SAAS,IAAI,OAAO,EAC9B,KAAK,EACL,YAAY,EACZ,MAAM,0BAA0B,0CAA0C,EAC1E,UAAU,CAAC,UAAU;AACpB,QAAM,QAAQ,MAAM,MAAM,GAAG;AAC7B,aAAW,cAAc,MAAM,CAAC,CAAC;AACjC,QAAM,eAAe,uBAAuB,MAAM,CAAC,CAAC;AACpD,QAAM,cAAc,UAAU,MAAM,CAAC,CAAC,IAAI,sBAAsB,MAAM,CAAC,CAAC,IAAI;AAE5E,SAAO,SAAS,cAAc,WAAW;AAC3C,CAAC;AAEI,IAAM,KAAK,CAAC,UAA0B;AAC3C,SAAO;AACT;AAEO,IAAM,aAAa,CAAC,UAA0B;AACnD,SAAO,OAAO,MAAM,KAAK;AAC3B;AAEO,IAAM,WAAW,CAAC,UAAwB,YAAyC;AACxF,MAAI,UAAU,OAAO,GAAG;AACtB,WAAO,GAAG,GAAG,QAAQ,IAAI,OAAO,EAAE;AAAA,EACpC,OAAO;AACL,WAAO,GAAG,QAAQ;AAAA,EACpB;AACF;AAEO,IAAM,QAAQ,CAAC,WAAuD;AAC3E,QAAM,QAAQ,OAAO,MAAM,GAAG;AAC9B,QAAM,eAAe,MAAM,CAAC;AAC5B,QAAM,cAAc,UAAU,MAAM,CAAC,CAAC,IAAK,MAAM,CAAC,IAAoB;AACtE,SAAO,CAAC,cAAc,WAAW;AACnC;AAEO,IAAM,UAAU,GAAG,IAAI;AACvB,IAAM,UAAU,GAAG,IAAI;AACvB,IAAM,SAAS,GAAG,IAAI;AACtB,IAAM,SAAS,GAAG,IAAI;AACtB,IAAM,UAAU,GAAG,IAAI;AACvB,IAAM,aAAa,GAAG,IAAI;AAC1B,IAAM,QAAQ,GAAG,IAAI;AACrB,IAAM,UAAU,GAAG,IAAI;AACvB,IAAM,UAAU,GAAG,IAAI;AACvB,IAAM,WAAW,GAAG,IAAI;AACxB,IAAM,SAAS,GAAG,IAAI;AAEtB,IAAM,kBAAkB,GAAG,OAAO;AAClC,IAAM,iBAAiB,GAAG,OAAO;AACjC,IAAM,kBAAkB,GAAG,OAAO;AAClC,IAAM,oBAAoB,GAAG,OAAO;","names":[]}
@@ -1,8 +1,8 @@
1
1
  import { TaggedType } from '@bessemer/cornerstone/types';
2
- import { ZodType } from 'zod';
2
+ import Zod from 'zod';
3
3
  export type MimeLiteral = TaggedType<string, 'MimeType'>;
4
- export declare const Schema: ZodType<MimeLiteral>;
5
4
  export declare const of: (value: string) => MimeLiteral;
5
+ export declare const Schema: Zod.ZodPipe<Zod.ZodString, Zod.ZodTransform<MimeLiteral, string>>;
6
6
  export declare const fromString: (value: string) => MimeLiteral;
7
7
  export declare const Jpeg: MimeLiteral;
8
8
  export declare const Png: MimeLiteral;
@@ -1 +1 @@
1
- {"version":3,"file":"mime-type.d.ts","sourceRoot":"","sources":["../src/mime-type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAY,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAElC,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;AACxD,eAAO,MAAM,MAAM,EAAE,OAAO,CAAC,WAAW,CAA+E,CAAA;AAEvH,eAAO,MAAM,EAAE,GAAI,OAAO,MAAM,KAAG,WAElC,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,WAE1C,CAAA;AAGD,eAAO,MAAM,IAAI,aAAmB,CAAA;AACpC,eAAO,MAAM,GAAG,aAAkB,CAAA;AAClC,eAAO,MAAM,GAAG,aAAkB,CAAA;AAClC,eAAO,MAAM,IAAI,aAAmB,CAAA;AACpC,eAAO,MAAM,GAAG,aAAsB,CAAA;AACtC,eAAO,MAAM,GAAG,aAAqB,CAAA;AACrC,eAAO,MAAM,IAAI,aAAmB,CAAA;AACpC,eAAO,MAAM,UAAU,eAAyC,CAAA;AAGhE,eAAO,MAAM,GAAG,aAAkB,CAAA;AAClC,eAAO,MAAM,IAAI,aAAmB,CAAA;AACpC,eAAO,MAAM,QAAQ,aAAkB,CAAA;AACvC,eAAO,MAAM,UAAU,eAAwB,CAAA;AAG/C,eAAO,MAAM,GAAG,aAAmB,CAAA;AACnC,eAAO,MAAM,QAAQ,aAAkB,CAAA;AACvC,eAAO,MAAM,GAAG,aAAkB,CAAA;AAClC,eAAO,MAAM,UAAU,eAAuB,CAAA;AAG9C,eAAO,MAAM,GAAG,aAAwB,CAAA;AACxC,eAAO,MAAM,IAAI,aAAyB,CAAA;AAC1C,eAAO,MAAM,GAAG,aAAiB,CAAA;AACjC,eAAO,MAAM,SAAS,aAAmB,CAAA;AACzC,eAAO,MAAM,IAAI,aAAkB,CAAA;AACnC,eAAO,MAAM,GAAG,aAAwB,CAAA;AACxC,eAAO,MAAM,aAAa,eAAyC,CAAA;AAGnE,eAAO,MAAM,IAAI,aAAkB,CAAA;AACnC,eAAO,MAAM,KAAK,aAAmB,CAAA;AACrC,eAAO,MAAM,GAAG,aAAiB,CAAA;AACjC,eAAO,MAAM,GAAG,aAAiB,CAAA;AACjC,eAAO,MAAM,SAAS,eAA0B,CAAA;AAGhD,eAAO,MAAM,GAAG,aAAwB,CAAA;AACxC,eAAO,MAAM,IAAI,aAAyB,CAAA;AAC1C,eAAO,MAAM,GAAG,aAA0B,CAAA;AAC1C,eAAO,MAAM,MAAM,aAA6B,CAAA;AAChD,eAAO,MAAM,gBAAgB,eAA2B,CAAA;AAGxD,eAAO,MAAM,QAAQ,aAA4B,CAAA;AACjD,eAAO,MAAM,UAAU,aAA+B,CAAA;AACtD,eAAO,MAAM,WAAW,aAAiC,CAAA"}
1
+ {"version":3,"file":"mime-type.d.ts","sourceRoot":"","sources":["../src/mime-type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;AAExD,eAAO,MAAM,EAAE,GAAI,OAAO,MAAM,KAAG,WAElC,CAAA;AAED,eAAO,MAAM,MAAM,mEAEH,CAAA;AAEhB,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,WAE1C,CAAA;AAGD,eAAO,MAAM,IAAI,aAAmB,CAAA;AACpC,eAAO,MAAM,GAAG,aAAkB,CAAA;AAClC,eAAO,MAAM,GAAG,aAAkB,CAAA;AAClC,eAAO,MAAM,IAAI,aAAmB,CAAA;AACpC,eAAO,MAAM,GAAG,aAAsB,CAAA;AACtC,eAAO,MAAM,GAAG,aAAqB,CAAA;AACrC,eAAO,MAAM,IAAI,aAAmB,CAAA;AACpC,eAAO,MAAM,UAAU,eAAyC,CAAA;AAGhE,eAAO,MAAM,GAAG,aAAkB,CAAA;AAClC,eAAO,MAAM,IAAI,aAAmB,CAAA;AACpC,eAAO,MAAM,QAAQ,aAAkB,CAAA;AACvC,eAAO,MAAM,UAAU,eAAwB,CAAA;AAG/C,eAAO,MAAM,GAAG,aAAmB,CAAA;AACnC,eAAO,MAAM,QAAQ,aAAkB,CAAA;AACvC,eAAO,MAAM,GAAG,aAAkB,CAAA;AAClC,eAAO,MAAM,UAAU,eAAuB,CAAA;AAG9C,eAAO,MAAM,GAAG,aAAwB,CAAA;AACxC,eAAO,MAAM,IAAI,aAAyB,CAAA;AAC1C,eAAO,MAAM,GAAG,aAAiB,CAAA;AACjC,eAAO,MAAM,SAAS,aAAmB,CAAA;AACzC,eAAO,MAAM,IAAI,aAAkB,CAAA;AACnC,eAAO,MAAM,GAAG,aAAwB,CAAA;AACxC,eAAO,MAAM,aAAa,eAAyC,CAAA;AAGnE,eAAO,MAAM,IAAI,aAAkB,CAAA;AACnC,eAAO,MAAM,KAAK,aAAmB,CAAA;AACrC,eAAO,MAAM,GAAG,aAAiB,CAAA;AACjC,eAAO,MAAM,GAAG,aAAiB,CAAA;AACjC,eAAO,MAAM,SAAS,eAA0B,CAAA;AAGhD,eAAO,MAAM,GAAG,aAAwB,CAAA;AACxC,eAAO,MAAM,IAAI,aAAyB,CAAA;AAC1C,eAAO,MAAM,GAAG,aAA0B,CAAA;AAC1C,eAAO,MAAM,MAAM,aAA6B,CAAA;AAChD,eAAO,MAAM,gBAAgB,eAA2B,CAAA;AAGxD,eAAO,MAAM,QAAQ,aAA4B,CAAA;AACjD,eAAO,MAAM,UAAU,aAA+B,CAAA;AACtD,eAAO,MAAM,WAAW,aAAiC,CAAA"}
package/dist/mime-type.js CHANGED
@@ -1,9 +1,9 @@
1
1
  // src/mime-type.ts
2
2
  import Zod from "zod";
3
- var Schema = Zod.string().regex(/^[\w-]+\/[\w.+-]+$/, "Invalid MIME type format");
4
3
  var of = (value) => {
5
4
  return value;
6
5
  };
6
+ var Schema = Zod.string().regex(/^[\w-]+\/[\w.+-]+$/, "Invalid MIME type format").transform(of);
7
7
  var fromString = (value) => {
8
8
  return Schema.parse(value);
9
9
  };
@@ -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 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":[]}
1
+ {"version":3,"sources":["../src/mime-type.ts"],"sourcesContent":["import { TaggedType } from '@bessemer/cornerstone/types'\nimport Zod from 'zod'\n\nexport type MimeLiteral = TaggedType<string, 'MimeType'>\n\nexport const of = (value: string): MimeLiteral => {\n return value as MimeLiteral\n}\n\nexport const Schema = Zod.string()\n .regex(/^[\\w-]+\\/[\\w.+-]+$/, 'Invalid MIME type format')\n .transform(of)\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,SAAS;AAIT,IAAM,KAAK,CAAC,UAA+B;AAChD,SAAO;AACT;AAEO,IAAM,SAAS,IAAI,OAAO,EAC9B,MAAM,sBAAsB,0BAA0B,EACtD,UAAU,EAAE;AAER,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":[]}
@@ -1,11 +1,14 @@
1
- import { CurrencyCode } from '@bessemer/cornerstone/currency';
2
- import { ZodType } from 'zod';
1
+ import { CurrencyCode } from '@bessemer/cornerstone/intl/currency-code';
2
+ import Zod from 'zod';
3
3
  import { Comparator as IComparator } from '@bessemer/cornerstone/comparator';
4
4
  export type MonetaryAmount = {
5
5
  amount: number;
6
6
  currency: CurrencyCode;
7
7
  };
8
- export declare const Schema: ZodType<MonetaryAmount, MonetaryAmount>;
8
+ export declare const Schema: Zod.ZodObject<{
9
+ amount: Zod.ZodNumber;
10
+ currency: Zod.ZodPipe<Zod.ZodString, Zod.ZodTransform<CurrencyCode, string>>;
11
+ }, Zod.core.$strip>;
9
12
  export declare const Comparator: IComparator<MonetaryAmount>;
10
13
  export declare const Equalitor: import("@bessemer/cornerstone/equalitor").Equalitor<MonetaryAmount>;
11
14
  export declare const of: (amount: number, currency: CurrencyCode) => MonetaryAmount;
@@ -1 +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;AAGlC,OAAO,EAAE,UAAU,IAAI,WAAW,EAAW,MAAM,kCAAkC,CAAA;AAIrF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,YAAY,CAAA;CACvB,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,OAAO,CAAC,cAAc,EAAE,cAAc,CAGzD,CAAA;AAEF,eAAO,MAAM,UAAU,EAAE,WAAW,CAAC,cAAc,CAElD,CAAA;AAED,eAAO,MAAM,SAAS,qEAA6B,CAAA;AAEnD,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,SAAS,CAAC,cAAc,EAAE,GAAG,cAAc,EAAE,CAAC,GAAG,cAAc,CAAA;AACvG,wBAAgB,MAAM,CAAC,eAAe,EAAE,SAAS,cAAc,EAAE,EAAE,QAAQ,EAAE,YAAY,GAAG,cAAc,CAAA;AAM1G,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,eAAO,MAAM,QAAQ,GAAI,OAAO,cAAc,EAAE,QAAQ,cAAc,KAAG,OAExE,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,OAAO,cAAc,EAAE,QAAQ,cAAc,KAAG,OAElF,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,OAAO,cAAc,EAAE,QAAQ,cAAc,KAAG,OAE/E,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"}
1
+ {"version":3,"file":"monetary-amount.d.ts","sourceRoot":"","sources":["../src/monetary-amount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAgC,MAAM,0CAA0C,CAAA;AACrG,OAAO,GAAG,MAAM,KAAK,CAAA;AAGrB,OAAO,EAAE,UAAU,IAAI,WAAW,EAAW,MAAM,kCAAkC,CAAA;AAIrF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,YAAY,CAAA;CACvB,CAAA;AAED,eAAO,MAAM,MAAM;;;mBAGjB,CAAA;AAEF,eAAO,MAAM,UAAU,EAAE,WAAW,CAAC,cAAc,CAElD,CAAA;AAED,eAAO,MAAM,SAAS,qEAA6B,CAAA;AAEnD,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,SAAS,CAAC,cAAc,EAAE,GAAG,cAAc,EAAE,CAAC,GAAG,cAAc,CAAA;AACvG,wBAAgB,MAAM,CAAC,eAAe,EAAE,SAAS,cAAc,EAAE,EAAE,QAAQ,EAAE,YAAY,GAAG,cAAc,CAAA;AAM1G,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,eAAO,MAAM,QAAQ,GAAI,OAAO,cAAc,EAAE,QAAQ,cAAc,KAAG,OAExE,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,OAAO,cAAc,EAAE,QAAQ,cAAc,KAAG,OAElF,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,OAAO,cAAc,EAAE,QAAQ,cAAc,KAAG,OAE/E,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"}
@@ -1,5 +1,5 @@
1
1
  // src/monetary-amount.ts
2
- import { Schema as CurrencyCodeSchema } from "@bessemer/cornerstone/currency";
2
+ import { Schema as CurrencyCodeSchema } from "@bessemer/cornerstone/intl/currency-code";
3
3
  import Zod from "zod";
4
4
  import { isNil } from "@bessemer/cornerstone/object";
5
5
  import { roundHalfEven } from "@bessemer/cornerstone/math";
@@ -1 +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 { isNil } from '@bessemer/cornerstone/object'\nimport { roundHalfEven } from '@bessemer/cornerstone/math'\nimport { Comparator as IComparator, natural } from '@bessemer/cornerstone/comparator'\nimport { fromComparator } from '@bessemer/cornerstone/equalitor'\nimport { assert } from '@bessemer/cornerstone/assertion'\n\nexport type MonetaryAmount = {\n amount: number\n currency: CurrencyCode\n}\n\nexport const Schema: ZodType<MonetaryAmount, MonetaryAmount> = Zod.object({\n amount: Zod.number().int(),\n currency: CurrencyCodeSchema,\n})\n\nexport const Comparator: IComparator<MonetaryAmount> = (first: MonetaryAmount, second: MonetaryAmount): number => {\n return apply(first, second, natural())\n}\n\nexport const Equalitor = fromComparator(Comparator)\n\nexport const of = (amount: number, currency: CurrencyCode): MonetaryAmount => {\n assert(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: readonly [MonetaryAmount, ...MonetaryAmount[]]): MonetaryAmount\nexport function sumAll(monetaryAmounts: readonly MonetaryAmount[], currency: CurrencyCode): MonetaryAmount\nexport function sumAll(monetaryAmounts: readonly MonetaryAmount[], currency?: CurrencyCode): MonetaryAmount {\n const resolvedCurrency = currency ?? monetaryAmounts[0]!.currency\n return monetaryAmounts.reduce<MonetaryAmount>((first, second) => sum(second, first), zero(resolvedCurrency))\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 const lessThan = (first: MonetaryAmount, second: MonetaryAmount): boolean => {\n return apply(first, second, (first, second) => first < second)\n}\n\nexport const greaterThanOrEqual = (first: MonetaryAmount, second: MonetaryAmount): boolean => {\n return apply(first, second, (first, second) => first >= second)\n}\n\nexport const lessThanOrEqual = (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":"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","names":["first","second"]}
1
+ {"version":3,"sources":["../src/monetary-amount.ts"],"sourcesContent":["import { CurrencyCode, Schema as CurrencyCodeSchema } from '@bessemer/cornerstone/intl/currency-code'\nimport Zod from 'zod'\nimport { isNil } from '@bessemer/cornerstone/object'\nimport { roundHalfEven } from '@bessemer/cornerstone/math'\nimport { Comparator as IComparator, natural } from '@bessemer/cornerstone/comparator'\nimport { fromComparator } from '@bessemer/cornerstone/equalitor'\nimport { assert } from '@bessemer/cornerstone/assertion'\n\nexport type MonetaryAmount = {\n amount: number\n currency: CurrencyCode\n}\n\nexport const Schema = Zod.object({\n amount: Zod.number().int(),\n currency: CurrencyCodeSchema,\n})\n\nexport const Comparator: IComparator<MonetaryAmount> = (first: MonetaryAmount, second: MonetaryAmount): number => {\n return apply(first, second, natural())\n}\n\nexport const Equalitor = fromComparator(Comparator)\n\nexport const of = (amount: number, currency: CurrencyCode): MonetaryAmount => {\n assert(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: readonly [MonetaryAmount, ...MonetaryAmount[]]): MonetaryAmount\nexport function sumAll(monetaryAmounts: readonly MonetaryAmount[], currency: CurrencyCode): MonetaryAmount\nexport function sumAll(monetaryAmounts: readonly MonetaryAmount[], currency?: CurrencyCode): MonetaryAmount {\n const resolvedCurrency = currency ?? monetaryAmounts[0]!.currency\n return monetaryAmounts.reduce<MonetaryAmount>((first, second) => sum(second, first), zero(resolvedCurrency))\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 const lessThan = (first: MonetaryAmount, second: MonetaryAmount): boolean => {\n return apply(first, second, (first, second) => first < second)\n}\n\nexport const greaterThanOrEqual = (first: MonetaryAmount, second: MonetaryAmount): boolean => {\n return apply(first, second, (first, second) => first >= second)\n}\n\nexport const lessThanOrEqual = (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":"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","names":["first","second"]}
@@ -0,0 +1,42 @@
1
+ import { Get } from 'type-fest';
2
+ import { ConstrainObjectPaths } from '@bessemer/cornerstone/object/object-path';
3
+ export declare enum ObjectDiffType {
4
+ Add = "Add",
5
+ Remove = "Remove",
6
+ Update = "Update",
7
+ Move = "Move"
8
+ }
9
+ export type AddObjectDiff<N, T extends ConstrainObjectPaths<N> = ConstrainObjectPaths<N>> = {
10
+ type: ObjectDiffType.Add;
11
+ path: T;
12
+ value: Get<N, T>;
13
+ };
14
+ export type RemoveObjectDiff<N, T extends ConstrainObjectPaths<N> = ConstrainObjectPaths<N>> = {
15
+ type: ObjectDiffType.Remove;
16
+ path: T;
17
+ originalValue: Get<N, T>;
18
+ };
19
+ export type UpdateObjectDiff<N, T extends ConstrainObjectPaths<N> = ConstrainObjectPaths<N>> = {
20
+ type: ObjectDiffType.Update;
21
+ path: T;
22
+ value: Get<N, T>;
23
+ originalValue: Get<N, T>;
24
+ };
25
+ export type MoveObjectDiff<N, T extends ConstrainObjectPaths<N> = ConstrainObjectPaths<N>> = {
26
+ type: ObjectDiffType.Move;
27
+ path: T;
28
+ value: Get<N, T>;
29
+ position: number;
30
+ originalPosition: number;
31
+ };
32
+ export type ObjectDiffEntry<N, T extends ConstrainObjectPaths<N> = ConstrainObjectPaths<N>> = AddObjectDiff<N, T> | RemoveObjectDiff<N, T> | UpdateObjectDiff<N, T> | MoveObjectDiff<N, T>;
33
+ export type ConstrainObjectDiffEntries<N, T extends ConstrainObjectPaths<N> = ConstrainObjectPaths<N>> = Extract<ObjectDiffEntry<N, T>, {
34
+ type: T;
35
+ }>;
36
+ export type ObjectDiff<N> = {
37
+ entries: Array<ObjectDiffEntry<N>>;
38
+ };
39
+ export declare const add: <N, T extends ConstrainObjectPaths<N> = ConstrainObjectPaths<N>>(path: T, value: Get<N, T>) => AddObjectDiff<N, T>;
40
+ export declare const remove: <N, T extends ConstrainObjectPaths<N> = ConstrainObjectPaths<N>>(path: T, originalValue: Get<N, T>) => RemoveObjectDiff<N, T>;
41
+ export declare const update: <N, T extends ConstrainObjectPaths<N> = ConstrainObjectPaths<N>>(path: T, value: Get<N, T>, originalValue: Get<N, T>) => UpdateObjectDiff<N, T>;
42
+ //# sourceMappingURL=object-diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-diff.d.ts","sourceRoot":"","sources":["../../src/object/object-diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ // src/object/object-diff.ts
2
+ var ObjectDiffType = /* @__PURE__ */ ((ObjectDiffType2) => {
3
+ ObjectDiffType2["Add"] = "Add";
4
+ ObjectDiffType2["Remove"] = "Remove";
5
+ ObjectDiffType2["Update"] = "Update";
6
+ ObjectDiffType2["Move"] = "Move";
7
+ return ObjectDiffType2;
8
+ })(ObjectDiffType || {});
9
+ var add = (path, value) => {
10
+ return { type: "Add" /* Add */, path, value };
11
+ };
12
+ var remove = (path, originalValue) => {
13
+ return { type: "Remove" /* Remove */, path, originalValue };
14
+ };
15
+ var update = (path, value, originalValue) => {
16
+ return { type: "Update" /* Update */, path, value, originalValue };
17
+ };
18
+ export {
19
+ ObjectDiffType,
20
+ add,
21
+ remove,
22
+ update
23
+ };
24
+ //# sourceMappingURL=object-diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/object/object-diff.ts"],"sourcesContent":["import { Get } from 'type-fest'\nimport { ConstrainObjectPaths } from '@bessemer/cornerstone/object/object-path'\n\nexport enum ObjectDiffType {\n Add = 'Add',\n Remove = 'Remove',\n Update = 'Update',\n Move = 'Move',\n}\n\nexport type AddObjectDiff<N, T extends ConstrainObjectPaths<N> = ConstrainObjectPaths<N>> = {\n type: ObjectDiffType.Add\n path: T\n value: Get<N, T>\n}\n\nexport type RemoveObjectDiff<N, T extends ConstrainObjectPaths<N> = ConstrainObjectPaths<N>> = {\n type: ObjectDiffType.Remove\n path: T\n originalValue: Get<N, T>\n}\n\nexport type UpdateObjectDiff<N, T extends ConstrainObjectPaths<N> = ConstrainObjectPaths<N>> = {\n type: ObjectDiffType.Update\n path: T\n value: Get<N, T>\n originalValue: Get<N, T>\n}\n\nexport type MoveObjectDiff<N, T extends ConstrainObjectPaths<N> = ConstrainObjectPaths<N>> = {\n type: ObjectDiffType.Move\n path: T\n value: Get<N, T>\n position: number\n originalPosition: number\n}\n\nexport type ObjectDiffEntry<N, T extends ConstrainObjectPaths<N> = ConstrainObjectPaths<N>> =\n | AddObjectDiff<N, T>\n | RemoveObjectDiff<N, T>\n | UpdateObjectDiff<N, T>\n | MoveObjectDiff<N, T>\n\nexport type ConstrainObjectDiffEntries<N, T extends ConstrainObjectPaths<N> = ConstrainObjectPaths<N>> = Extract<ObjectDiffEntry<N, T>, { type: T }>\n\nexport type ObjectDiff<N> = { entries: Array<ObjectDiffEntry<N>> }\n\nexport const add = <N, T extends ConstrainObjectPaths<N> = ConstrainObjectPaths<N>>(path: T, value: Get<N, T>): AddObjectDiff<N, T> => {\n return { type: ObjectDiffType.Add, path, value }\n}\n\nexport const remove = <N, T extends ConstrainObjectPaths<N> = ConstrainObjectPaths<N>>(path: T, originalValue: Get<N, T>): RemoveObjectDiff<N, T> => {\n return { type: ObjectDiffType.Remove, path, originalValue }\n}\n\nexport const update = <N, T extends ConstrainObjectPaths<N> = ConstrainObjectPaths<N>>(\n path: T,\n value: Get<N, T>,\n originalValue: Get<N, T>\n): UpdateObjectDiff<N, T> => {\n return { type: ObjectDiffType.Update, path, value, originalValue }\n}\n"],"mappings":";AAGO,IAAK,iBAAL,kBAAKA,oBAAL;AACL,EAAAA,gBAAA,SAAM;AACN,EAAAA,gBAAA,YAAS;AACT,EAAAA,gBAAA,YAAS;AACT,EAAAA,gBAAA,UAAO;AAJG,SAAAA;AAAA,GAAA;AA4CL,IAAM,MAAM,CAAiE,MAAS,UAA0C;AACrI,SAAO,EAAE,MAAM,iBAAoB,MAAM,MAAM;AACjD;AAEO,IAAM,SAAS,CAAiE,MAAS,kBAAqD;AACnJ,SAAO,EAAE,MAAM,uBAAuB,MAAM,cAAc;AAC5D;AAEO,IAAM,SAAS,CACpB,MACA,OACA,kBAC2B;AAC3B,SAAO,EAAE,MAAM,uBAAuB,MAAM,OAAO,cAAc;AACnE;","names":["ObjectDiffType"]}
@@ -0,0 +1,13 @@
1
+ import Zod from 'zod';
2
+ import { Get, Paths, UnknownRecord } from 'type-fest';
3
+ import { JoinPath, NominalType, ToString, ToStringArray } from '@bessemer/cornerstone/types';
4
+ export type ObjectPathType = string;
5
+ export type ObjectPath<T extends ObjectPathType = ObjectPathType> = NominalType<Array<string>, ['ObjectPath', T]>;
6
+ export type ConstrainObjectPaths<N> = ObjectPath<ToString<Paths<N>>>;
7
+ export declare const of: <T extends Array<string | number>>(value: T) => ObjectPath<JoinPath<ToStringArray<T>>>;
8
+ export declare const fromString: <T extends ObjectPathType>(path: T) => ObjectPath<T>;
9
+ export declare const Schema: Zod.ZodPipe<Zod.ZodUnion<readonly [Zod.ZodArray<Zod.ZodUnion<readonly [Zod.ZodString, Zod.ZodNumber]>>, Zod.ZodString]>, Zod.ZodTransform<ObjectPath<string>, string | (string | number)[]>>;
10
+ export declare const getValue: <N extends UnknownRecord, T extends ObjectPathType>(object: N, path: ObjectPath<T>) => Get<N, T>;
11
+ export declare const findValue: <N extends UnknownRecord, T extends ObjectPathType>(object: N, path: ObjectPath<T>) => Get<N, T> | undefined;
12
+ export declare const applyValue: (object: UnknownRecord, path: ObjectPath, valueToApply: unknown) => unknown;
13
+ //# sourceMappingURL=object-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-path.d.ts","sourceRoot":"","sources":["../../src/object/object-path.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAMrD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAE5F,MAAM,MAAM,cAAc,GAAG,MAAM,CAAA;AACnC,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAA;AACjH,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAEpE,eAAO,MAAM,EAAE,GAAI,CAAC,SAAS,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,OAAO,CAAC,KAAG,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAEpG,CAAA;AAID,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,cAAc,EAAE,MAAM,CAAC,KAAG,UAAU,CAAC,CAAC,CAG1E,CAAA;AAED,eAAO,MAAM,MAAM,8LAMjB,CAAA;AAEF,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,aAAa,EAAE,CAAC,SAAS,cAAc,EAAE,QAAQ,CAAC,EAAE,MAAM,UAAU,CAAC,CAAC,CAAC,KAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAQpH,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,aAAa,EAAE,CAAC,SAAS,cAAc,EAAE,QAAQ,CAAC,EAAE,MAAM,UAAU,CAAC,CAAC,CAAC,KAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAQzH,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,QAAQ,aAAa,EAAE,MAAM,UAAU,EAAE,cAAc,OAAO,KAAG,OAc3F,CAAA"}
@@ -1,33 +1,25 @@
1
- // src/object-path.ts
1
+ // src/object/object-path.ts
2
2
  import Zod from "zod";
3
3
  import { isObject } from "@bessemer/cornerstone/object";
4
4
  import { produce } from "immer";
5
- import { isNumber } from "@bessemer/cornerstone/math";
6
- import { isString } from "@bessemer/cornerstone/string";
7
5
  import { assert } from "@bessemer/cornerstone/assertion";
8
6
  import { isEmpty } from "@bessemer/cornerstone/array";
9
7
  import { failure, success } from "@bessemer/cornerstone/result";
10
- var Schema = Zod.array(Zod.union([Zod.string(), Zod.number()]));
11
8
  var of = (value) => {
12
- return value;
9
+ return value.map((it) => `${it}`);
13
10
  };
14
- var ObjectPathRegex = /^[a-zA-Z_$][a-zA-Z0-9_$]*(?:\.[a-zA-Z_$][a-zA-Z0-9_$]*|\.\d+|\[\d+])*$/;
15
- var ObjectPathPartRegex = /([a-zA-Z_$][a-zA-Z0-9_$]*)|\[(\d+)]|\.(\d+)/g;
11
+ var ObjectPathRegex = /^[a-zA-Z_$][a-zA-Z0-9_$]*(?:\.[a-zA-Z_$][a-zA-Z0-9_$]*|\.\d+)*$/;
16
12
  var fromString = (path) => {
17
13
  assert(ObjectPathRegex.test(path), () => `Unable to parse ObjectPath from string: ${path}`);
18
- const result = [];
19
- let match;
20
- while ((match = ObjectPathPartRegex.exec(path)) !== null) {
21
- if (match[1] !== void 0) {
22
- result.push(match[1]);
23
- } else if (match[2] !== void 0) {
24
- result.push(Number(match[2]));
25
- } else if (match[3] !== void 0) {
26
- result.push(Number(match[3]));
27
- }
28
- }
29
- return of(result);
14
+ return of(path.split("."));
30
15
  };
16
+ var Schema = Zod.union([Zod.array(Zod.union([Zod.string(), Zod.number()])), Zod.string()]).transform((it) => {
17
+ if (Array.isArray(it)) {
18
+ return of(it);
19
+ } else {
20
+ return fromString(it);
21
+ }
22
+ });
31
23
  var getValue = (object, path) => {
32
24
  const result = getValueResult(object, path);
33
25
  if (result.isSuccess) {
@@ -59,12 +51,13 @@ var applyValue = (object, path, valueToApply) => {
59
51
  var getValueResult = (object, path) => {
60
52
  let value = object;
61
53
  for (const key of path) {
62
- if (isNumber(key) && Array.isArray(value)) {
63
- if (key < 0 || key >= value.length) {
54
+ if (Array.isArray(value)) {
55
+ const numberKey = Number(key);
56
+ if (numberKey < 0 || numberKey >= value.length) {
64
57
  return failure();
65
58
  }
66
- value = value[key];
67
- } else if (isString(key) && isObject(value)) {
59
+ value = value[numberKey];
60
+ } else if (isObject(value)) {
68
61
  if (!(key in value)) {
69
62
  return failure();
70
63
  }
@@ -75,10 +68,8 @@ var getValueResult = (object, path) => {
75
68
  }
76
69
  return success(value);
77
70
  };
78
- var assertLegalIndex = (value, key, object, path) => {
79
- if (isNumber(key) && Array.isArray(value)) {
80
- return;
81
- } else if (isString(key) && isObject(value)) {
71
+ var assertLegalIndex = (value, _key, object, path) => {
72
+ if (Array.isArray(value) || isObject(value)) {
82
73
  return;
83
74
  } else {
84
75
  throw new Error(`Unable to resolve ObjectPath: ${path} against record: ${JSON.stringify(object)}`);
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/object/object-path.ts"],"sourcesContent":["import Zod from 'zod'\nimport { Get, Paths, UnknownRecord } from 'type-fest'\nimport { isObject } from '@bessemer/cornerstone/object'\nimport { produce } from 'immer'\nimport { assert } from '@bessemer/cornerstone/assertion'\nimport { isEmpty } from '@bessemer/cornerstone/array'\nimport { failure, Result, success } from '@bessemer/cornerstone/result'\nimport { JoinPath, NominalType, ToString, ToStringArray } from '@bessemer/cornerstone/types'\n\nexport type ObjectPathType = string\nexport type ObjectPath<T extends ObjectPathType = ObjectPathType> = NominalType<Array<string>, ['ObjectPath', T]>\nexport type ConstrainObjectPaths<N> = ObjectPath<ToString<Paths<N>>>\n\nexport const of = <T extends Array<string | number>>(value: T): ObjectPath<JoinPath<ToStringArray<T>>> => {\n return value.map((it) => `${it}`) as ObjectPath<JoinPath<ToStringArray<T>>>\n}\n\nconst ObjectPathRegex = /^[a-zA-Z_$][a-zA-Z0-9_$]*(?:\\.[a-zA-Z_$][a-zA-Z0-9_$]*|\\.\\d+)*$/\n\nexport const fromString = <T extends ObjectPathType>(path: T): ObjectPath<T> => {\n assert(ObjectPathRegex.test(path), () => `Unable to parse ObjectPath from string: ${path}`)\n return of(path.split('.')) as ObjectPath<T>\n}\n\nexport const Schema = Zod.union([Zod.array(Zod.union([Zod.string(), Zod.number()])), Zod.string()]).transform((it) => {\n if (Array.isArray(it)) {\n return of(it)\n } else {\n return fromString(it)\n }\n})\n\nexport const getValue = <N extends UnknownRecord, T extends ObjectPathType>(object: N, path: ObjectPath<T>): Get<N, T> => {\n const result = getValueResult(object, path)\n\n if (result.isSuccess) {\n return result.value\n } else {\n throw new Error(`Unable to resolve ObjectPath: ${path} against record: ${JSON.stringify(object)}`)\n }\n}\n\nexport const findValue = <N extends UnknownRecord, T extends ObjectPathType>(object: N, path: ObjectPath<T>): Get<N, T> | undefined => {\n const result = getValueResult(object, path)\n\n if (result.isSuccess) {\n return result.value\n } else {\n return undefined\n }\n}\n\nexport const applyValue = (object: UnknownRecord, path: ObjectPath, valueToApply: unknown): unknown => {\n if (isEmpty(path)) {\n return valueToApply\n }\n\n return produce(object, (draft) => {\n const rest = path.slice(0, -1)\n const last = path[path.length - 1]!\n const parent: any = isEmpty(rest) ? draft : getValue(draft, of(rest))\n\n // Check to make sure the last index is ok\n assertLegalIndex(parent, last, object, path)\n parent[last] = valueToApply\n })\n}\n\nconst getValueResult = (object: UnknownRecord, path: ObjectPath): Result<any> => {\n let value: any = object\n\n for (const key of path) {\n if (Array.isArray(value)) {\n const numberKey = Number(key)\n if (numberKey < 0 || numberKey >= value.length) {\n return failure()\n }\n\n value = value[numberKey]\n } else if (isObject(value)) {\n if (!(key in value)) {\n return failure()\n }\n\n value = value[key]\n } else {\n return failure()\n }\n }\n\n return success(value)\n}\n\nconst assertLegalIndex = (value: any, _key: string, object: UnknownRecord, path: ObjectPath): void => {\n if (Array.isArray(value) || isObject(value)) {\n return\n } else {\n throw new Error(`Unable to resolve ObjectPath: ${path} against record: ${JSON.stringify(object)}`)\n }\n}\n"],"mappings":";AAAA,OAAO,SAAS;AAEhB,SAAS,gBAAgB;AACzB,SAAS,eAAe;AACxB,SAAS,cAAc;AACvB,SAAS,eAAe;AACxB,SAAS,SAAiB,eAAe;AAOlC,IAAM,KAAK,CAAmC,UAAqD;AACxG,SAAO,MAAM,IAAI,CAAC,OAAO,GAAG,EAAE,EAAE;AAClC;AAEA,IAAM,kBAAkB;AAEjB,IAAM,aAAa,CAA2B,SAA2B;AAC9E,SAAO,gBAAgB,KAAK,IAAI,GAAG,MAAM,2CAA2C,IAAI,EAAE;AAC1F,SAAO,GAAG,KAAK,MAAM,GAAG,CAAC;AAC3B;AAEO,IAAM,SAAS,IAAI,MAAM,CAAC,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO;AACpH,MAAI,MAAM,QAAQ,EAAE,GAAG;AACrB,WAAO,GAAG,EAAE;AAAA,EACd,OAAO;AACL,WAAO,WAAW,EAAE;AAAA,EACtB;AACF,CAAC;AAEM,IAAM,WAAW,CAAoD,QAAW,SAAmC;AACxH,QAAM,SAAS,eAAe,QAAQ,IAAI;AAE1C,MAAI,OAAO,WAAW;AACpB,WAAO,OAAO;AAAA,EAChB,OAAO;AACL,UAAM,IAAI,MAAM,iCAAiC,IAAI,oBAAoB,KAAK,UAAU,MAAM,CAAC,EAAE;AAAA,EACnG;AACF;AAEO,IAAM,YAAY,CAAoD,QAAW,SAA+C;AACrI,QAAM,SAAS,eAAe,QAAQ,IAAI;AAE1C,MAAI,OAAO,WAAW;AACpB,WAAO,OAAO;AAAA,EAChB,OAAO;AACL,WAAO;AAAA,EACT;AACF;AAEO,IAAM,aAAa,CAAC,QAAuB,MAAkB,iBAAmC;AACrG,MAAI,QAAQ,IAAI,GAAG;AACjB,WAAO;AAAA,EACT;AAEA,SAAO,QAAQ,QAAQ,CAAC,UAAU;AAChC,UAAM,OAAO,KAAK,MAAM,GAAG,EAAE;AAC7B,UAAM,OAAO,KAAK,KAAK,SAAS,CAAC;AACjC,UAAM,SAAc,QAAQ,IAAI,IAAI,QAAQ,SAAS,OAAO,GAAG,IAAI,CAAC;AAGpE,qBAAiB,QAAQ,MAAM,QAAQ,IAAI;AAC3C,WAAO,IAAI,IAAI;AAAA,EACjB,CAAC;AACH;AAEA,IAAM,iBAAiB,CAAC,QAAuB,SAAkC;AAC/E,MAAI,QAAa;AAEjB,aAAW,OAAO,MAAM;AACtB,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,YAAM,YAAY,OAAO,GAAG;AAC5B,UAAI,YAAY,KAAK,aAAa,MAAM,QAAQ;AAC9C,eAAO,QAAQ;AAAA,MACjB;AAEA,cAAQ,MAAM,SAAS;AAAA,IACzB,WAAW,SAAS,KAAK,GAAG;AAC1B,UAAI,EAAE,OAAO,QAAQ;AACnB,eAAO,QAAQ;AAAA,MACjB;AAEA,cAAQ,MAAM,GAAG;AAAA,IACnB,OAAO;AACL,aAAO,QAAQ;AAAA,IACjB;AAAA,EACF;AAEA,SAAO,QAAQ,KAAK;AACtB;AAEA,IAAM,mBAAmB,CAAC,OAAY,MAAc,QAAuB,SAA2B;AACpG,MAAI,MAAM,QAAQ,KAAK,KAAK,SAAS,KAAK,GAAG;AAC3C;AAAA,EACF,OAAO;AACL,UAAM,IAAI,MAAM,iCAAiC,IAAI,oBAAoB,KAAK,UAAU,MAAM,CAAC,EAAE;AAAA,EACnG;AACF;","names":[]}
@@ -0,0 +1,9 @@
1
+ import { JoinPath, NominalType, ToStringArray } from '@bessemer/cornerstone/types';
2
+ import Zod from 'zod';
3
+ export type TypePathType = string;
4
+ export type TypePath<T extends TypePathType = TypePathType> = NominalType<Array<string>, ['TypePath', T]>;
5
+ export declare const of: <T extends Array<string | number>>(value: T) => TypePath<JoinPath<ToStringArray<T>>>;
6
+ export declare const fromString: <T extends TypePathType>(path: T) => TypePath<T>;
7
+ export declare const Schema: Zod.ZodPipe<Zod.ZodUnion<readonly [Zod.ZodArray<Zod.ZodString>, Zod.ZodString]>, Zod.ZodTransform<TypePath<string>, string | string[]>>;
8
+ export declare const matches: (evaluatingPath: TypePath, targetPath: TypePath) => boolean;
9
+ //# sourceMappingURL=type-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-path.d.ts","sourceRoot":"","sources":["../../src/object/type-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAElF,OAAO,GAAG,MAAM,KAAK,CAAA;AAIrB,MAAM,MAAM,YAAY,GAAG,MAAM,CAAA;AACjC,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAA;AAEzG,eAAO,MAAM,EAAE,GAAI,CAAC,SAAS,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,OAAO,CAAC,KAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAElG,CAAA;AAID,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,YAAY,EAAE,MAAM,CAAC,KAAG,QAAQ,CAAC,CAAC,CAGtE,CAAA;AAED,eAAO,MAAM,MAAM,yIAMjB,CAAA;AAEF,eAAO,MAAM,OAAO,GAAI,gBAAgB,QAAQ,EAAE,YAAY,QAAQ,KAAG,OAuBxE,CAAA"}
@@ -0,0 +1,44 @@
1
+ // src/object/type-path.ts
2
+ import { assert } from "@bessemer/cornerstone/assertion";
3
+ import Zod from "zod";
4
+ var of = (value) => {
5
+ return value.map((it) => `${it}`);
6
+ };
7
+ var TypePathRegex = /^[a-zA-Z_$][a-zA-Z0-9_$]*(?:\.[a-zA-Z_$][a-zA-Z0-9_$]*|\[\d+]|\[\*])*$/;
8
+ var fromString = (path) => {
9
+ assert(TypePathRegex.test(path), () => `Unable to parse ObjectPath from string: ${path}`);
10
+ return of(path.split("."));
11
+ };
12
+ var Schema = Zod.union([Zod.array(Zod.string()), Zod.string()]).transform((it) => {
13
+ if (Array.isArray(it)) {
14
+ return of(it);
15
+ } else {
16
+ return fromString(it);
17
+ }
18
+ });
19
+ var matches = (evaluatingPath, targetPath) => {
20
+ if (targetPath.length !== evaluatingPath.length) {
21
+ return false;
22
+ }
23
+ for (let i = 0; i < targetPath.length; i++) {
24
+ const evaluatingSegment = evaluatingPath[i];
25
+ const targetSegment = targetPath[i];
26
+ if (evaluatingSegment === "*") {
27
+ continue;
28
+ }
29
+ if (targetSegment === "*") {
30
+ return false;
31
+ }
32
+ if (targetSegment !== evaluatingSegment) {
33
+ return false;
34
+ }
35
+ }
36
+ return true;
37
+ };
38
+ export {
39
+ Schema,
40
+ fromString,
41
+ matches,
42
+ of
43
+ };
44
+ //# sourceMappingURL=type-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/object/type-path.ts"],"sourcesContent":["import { JoinPath, NominalType, ToStringArray } from '@bessemer/cornerstone/types'\nimport { assert } from '@bessemer/cornerstone/assertion'\nimport Zod from 'zod'\n\n// see https://github.com/sinclairnick/jsonpath-ts for type inference examples!\n\nexport type TypePathType = string\nexport type TypePath<T extends TypePathType = TypePathType> = NominalType<Array<string>, ['TypePath', T]>\n\nexport const of = <T extends Array<string | number>>(value: T): TypePath<JoinPath<ToStringArray<T>>> => {\n return value.map((it) => `${it}`) as TypePath<JoinPath<ToStringArray<T>>>\n}\n\nconst TypePathRegex = /^[a-zA-Z_$][a-zA-Z0-9_$]*(?:\\.[a-zA-Z_$][a-zA-Z0-9_$]*|\\[\\d+]|\\[\\*])*$/\n\nexport const fromString = <T extends TypePathType>(path: T): TypePath<T> => {\n assert(TypePathRegex.test(path), () => `Unable to parse ObjectPath from string: ${path}`)\n return of(path.split('.')) as TypePath<T>\n}\n\nexport const Schema = Zod.union([Zod.array(Zod.string()), Zod.string()]).transform((it) => {\n if (Array.isArray(it)) {\n return of(it)\n } else {\n return fromString(it)\n }\n})\n\nexport const matches = (evaluatingPath: TypePath, targetPath: TypePath): boolean => {\n if (targetPath.length !== evaluatingPath.length) {\n return false\n }\n\n for (let i = 0; i < targetPath.length; i++) {\n const evaluatingSegment = evaluatingPath[i]\n const targetSegment = targetPath[i]\n\n if (evaluatingSegment === '*') {\n continue\n }\n\n if (targetSegment === '*') {\n return false\n }\n\n if (targetSegment !== evaluatingSegment) {\n return false\n }\n }\n\n return true\n}\n"],"mappings":";AACA,SAAS,cAAc;AACvB,OAAO,SAAS;AAOT,IAAM,KAAK,CAAmC,UAAmD;AACtG,SAAO,MAAM,IAAI,CAAC,OAAO,GAAG,EAAE,EAAE;AAClC;AAEA,IAAM,gBAAgB;AAEf,IAAM,aAAa,CAAyB,SAAyB;AAC1E,SAAO,cAAc,KAAK,IAAI,GAAG,MAAM,2CAA2C,IAAI,EAAE;AACxF,SAAO,GAAG,KAAK,MAAM,GAAG,CAAC;AAC3B;AAEO,IAAM,SAAS,IAAI,MAAM,CAAC,IAAI,MAAM,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO;AACzF,MAAI,MAAM,QAAQ,EAAE,GAAG;AACrB,WAAO,GAAG,EAAE;AAAA,EACd,OAAO;AACL,WAAO,WAAW,EAAE;AAAA,EACtB;AACF,CAAC;AAEM,IAAM,UAAU,CAAC,gBAA0B,eAAkC;AAClF,MAAI,WAAW,WAAW,eAAe,QAAQ;AAC/C,WAAO;AAAA,EACT;AAEA,WAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,UAAM,oBAAoB,eAAe,CAAC;AAC1C,UAAM,gBAAgB,WAAW,CAAC;AAElC,QAAI,sBAAsB,KAAK;AAC7B;AAAA,IACF;AAEA,QAAI,kBAAkB,KAAK;AACzB,aAAO;AAAA,IACT;AAEA,QAAI,kBAAkB,mBAAmB;AACvC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
package/dist/types.d.ts CHANGED
@@ -17,4 +17,9 @@ export type DeepPartial<T> = {
17
17
  [P in keyof T]?: T[P] extends Array<infer U> ? DeepPartial<U>[] : T[P] extends object | undefined ? DeepPartial<T[P]> : T[P];
18
18
  };
19
19
  export type BasicType = string | number | boolean | Date;
20
+ export type ToString<T> = T extends string | number ? `${T}` : never;
21
+ export type ToStringArray<T extends Array<string | number>> = {
22
+ [K in keyof T]: T[K] extends string | number ? `${T[K]}` : never;
23
+ };
24
+ export type JoinPath<T extends readonly string[]> = T extends readonly [infer First, ...infer Rest] ? First extends string ? Rest extends readonly string[] ? Rest['length'] extends 0 ? First : `${First}.${JoinPath<Rest>}` : never : never : '';
20
25
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAA;AAE5B,MAAM,WAAW,aAAa,CAAC,cAAc;IAC3C,KAAK,CAAC,EAAE,cAAc,CAAA;CACvB;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,EAAE,cAAc,IAAI,CAAC,GAAG,aAAa,CAAC,cAAc,CAAC,CAAA;AAE9E,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;AAE1C,MAAM,MAAM,YAAY,CAAC,aAAa,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI;IACzE,CAAC,MAAM,CAAC,EAAE;SACP,CAAC,IAAI,aAAa,GAAG,IAAI;KAC3B,CAAA;CACF,CAAA;AAED,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,aAAa,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,YAAY,CAAC,aAAa,CAAC,CAAA;AAE3G,MAAM,MAAM,SAAS,GAAG,OAAO,CAAA;AAE/B,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;AAE7C,MAAM,MAAM,GAAG,GAAG,IAAI,GAAG,SAAS,CAAA;AAElC,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;KAC1B,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAC7H,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAA;AAE5B,MAAM,WAAW,aAAa,CAAC,cAAc;IAC3C,KAAK,CAAC,EAAE,cAAc,CAAA;CACvB;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,EAAE,cAAc,IAAI,CAAC,GAAG,aAAa,CAAC,cAAc,CAAC,CAAA;AAE9E,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;AAE1C,MAAM,MAAM,YAAY,CAAC,aAAa,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI;IACzE,CAAC,MAAM,CAAC,EAAE;SACP,CAAC,IAAI,aAAa,GAAG,IAAI;KAC3B,CAAA;CACF,CAAA;AAED,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,aAAa,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,YAAY,CAAC,aAAa,CAAC,CAAA;AAE3G,MAAM,MAAM,SAAS,GAAG,OAAO,CAAA;AAE/B,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;AAE7C,MAAM,MAAM,GAAG,GAAG,IAAI,GAAG,SAAS,CAAA;AAElC,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;KAC1B,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAC7H,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;AAExD,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,KAAK,CAAA;AAEpE,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI;KAC3D,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK;CACjE,CAAA;AAED,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,SAAS,MAAM,EAAE,IAAI,CAAC,SAAS,SAAS,CAAC,MAAM,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,GAC/F,KAAK,SAAS,MAAM,GAClB,IAAI,SAAS,SAAS,MAAM,EAAE,GAC5B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GACtB,KAAK,GACL,GAAG,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,GAC9B,KAAK,GACP,KAAK,GACP,EAAE,CAAA"}
package/dist/ulid.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { TaggedType } from '@bessemer/cornerstone/types';
2
- import { ZodType } from 'zod';
2
+ import Zod from 'zod';
3
3
  export type Ulid = TaggedType<string, 'Ulid'>;
4
- export declare const Schema: ZodType<Ulid>;
5
4
  export declare const of: (value: string) => Ulid;
5
+ export declare const Schema: Zod.ZodPipe<Zod.ZodString, Zod.ZodTransform<Ulid, string>>;
6
6
  export declare const fromString: (value: string) => Ulid;
7
7
  export declare const generate: () => Ulid;
8
8
  //# sourceMappingURL=ulid.d.ts.map