@bessemer/cornerstone 0.5.57 → 0.5.59

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 (83) hide show
  1. package/dist/async-value.d.ts +88 -0
  2. package/dist/async-value.d.ts.map +1 -0
  3. package/dist/async-value.js +54 -0
  4. package/dist/async-value.js.map +1 -0
  5. package/dist/async.d.ts +0 -55
  6. package/dist/async.d.ts.map +1 -1
  7. package/dist/async.js +1 -39
  8. package/dist/async.js.map +1 -1
  9. package/dist/cache.d.ts.map +1 -1
  10. package/dist/cache.js +2 -1
  11. package/dist/cache.js.map +1 -1
  12. package/dist/content.d.ts +7 -7
  13. package/dist/content.d.ts.map +1 -1
  14. package/dist/content.js +3 -2
  15. package/dist/content.js.map +1 -1
  16. package/dist/data-size.d.ts +1 -1
  17. package/dist/data-size.d.ts.map +1 -1
  18. package/dist/data-size.js +2 -2
  19. package/dist/data-size.js.map +1 -1
  20. package/dist/date.d.ts +1 -1
  21. package/dist/date.d.ts.map +1 -1
  22. package/dist/date.js +11 -20
  23. package/dist/date.js.map +1 -1
  24. package/dist/duration.d.ts +1 -1
  25. package/dist/duration.d.ts.map +1 -1
  26. package/dist/duration.js +2 -2
  27. package/dist/duration.js.map +1 -1
  28. package/dist/entry.d.ts +2 -0
  29. package/dist/entry.d.ts.map +1 -1
  30. package/dist/entry.js +5 -0
  31. package/dist/entry.js.map +1 -1
  32. package/dist/error-event.d.ts +1 -1
  33. package/dist/error-event.js +2 -2
  34. package/dist/error-event.js.map +1 -1
  35. package/dist/glob.d.ts +2 -2
  36. package/dist/glob.d.ts.map +1 -1
  37. package/dist/glob.js +29 -7
  38. package/dist/glob.js.map +1 -1
  39. package/dist/hex-code.d.ts +6 -3
  40. package/dist/hex-code.d.ts.map +1 -1
  41. package/dist/hex-code.js +11 -3
  42. package/dist/hex-code.js.map +1 -1
  43. package/dist/index.d.ts +3 -2
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +4 -2
  46. package/dist/index.js.map +1 -1
  47. package/dist/math.d.ts +1 -1
  48. package/dist/math.d.ts.map +1 -1
  49. package/dist/math.js +1 -1
  50. package/dist/math.js.map +1 -1
  51. package/dist/mime-type.d.ts +3 -3
  52. package/dist/mime-type.d.ts.map +1 -1
  53. package/dist/mime-type.js +6 -6
  54. package/dist/mime-type.js.map +1 -1
  55. package/dist/range.d.ts +6 -3
  56. package/dist/range.d.ts.map +1 -1
  57. package/dist/range.js +12 -9
  58. package/dist/range.js.map +1 -1
  59. package/dist/resource.d.ts.map +1 -1
  60. package/dist/resource.js +2 -1
  61. package/dist/resource.js.map +1 -1
  62. package/dist/sql/sql-expression-parser.js +2 -3
  63. package/dist/sql/sql-expression-parser.js.map +1 -1
  64. package/dist/sql/sql.d.ts +1 -1
  65. package/dist/sql/sql.d.ts.map +1 -1
  66. package/dist/sql/sql.js +1 -1
  67. package/dist/sql/sql.js.map +1 -1
  68. package/dist/ulid.d.ts +4 -4
  69. package/dist/ulid.d.ts.map +1 -1
  70. package/dist/ulid.js +9 -17
  71. package/dist/ulid.js.map +1 -1
  72. package/dist/uuid.d.ts +4 -4
  73. package/dist/uuid.d.ts.map +1 -1
  74. package/dist/uuid.js +11 -18
  75. package/dist/uuid.js.map +1 -1
  76. package/dist/zod-util.d.ts +10 -0
  77. package/dist/zod-util.d.ts.map +1 -0
  78. package/dist/{zod.js → zod-util.js} +9 -39
  79. package/dist/zod-util.js.map +1 -0
  80. package/package.json +1 -1
  81. package/dist/zod.d.ts +0 -36
  82. package/dist/zod.d.ts.map +0 -1
  83. package/dist/zod.js.map +0 -1
@@ -0,0 +1,88 @@
1
+ import Zod, { ZodType } from 'zod';
2
+ export declare const schema: <T extends ZodType>(type: T) => Zod.ZodObject<{
3
+ isSuccess: Zod.ZodBoolean;
4
+ isError: Zod.ZodBoolean;
5
+ isLoading: Zod.ZodBoolean;
6
+ isFetching: Zod.ZodBoolean;
7
+ data: Zod.ZodUnion<[T, Zod.ZodUnknown]>;
8
+ }, "strip", Zod.ZodTypeAny, Zod.objectUtil.addQuestionMarks<Zod.baseObjectOutputType<{
9
+ isSuccess: Zod.ZodBoolean;
10
+ isError: Zod.ZodBoolean;
11
+ isLoading: Zod.ZodBoolean;
12
+ isFetching: Zod.ZodBoolean;
13
+ data: Zod.ZodUnion<[T, Zod.ZodUnknown]>;
14
+ }>, any> extends infer T_1 ? { [k in keyof T_1]: Zod.objectUtil.addQuestionMarks<Zod.baseObjectOutputType<{
15
+ isSuccess: Zod.ZodBoolean;
16
+ isError: Zod.ZodBoolean;
17
+ isLoading: Zod.ZodBoolean;
18
+ isFetching: Zod.ZodBoolean;
19
+ data: Zod.ZodUnion<[T, Zod.ZodUnknown]>;
20
+ }>, any>[k]; } : never, Zod.baseObjectInputType<{
21
+ isSuccess: Zod.ZodBoolean;
22
+ isError: Zod.ZodBoolean;
23
+ isLoading: Zod.ZodBoolean;
24
+ isFetching: Zod.ZodBoolean;
25
+ data: Zod.ZodUnion<[T, Zod.ZodUnknown]>;
26
+ }> extends infer T_2 ? { [k_1 in keyof T_2]: Zod.baseObjectInputType<{
27
+ isSuccess: Zod.ZodBoolean;
28
+ isError: Zod.ZodBoolean;
29
+ isLoading: Zod.ZodBoolean;
30
+ isFetching: Zod.ZodBoolean;
31
+ data: Zod.ZodUnion<[T, Zod.ZodUnknown]>;
32
+ }>[k_1]; } : never>;
33
+ export type PendingValue = {
34
+ isSuccess: false;
35
+ isError: false;
36
+ isLoading: false;
37
+ isFetching: boolean;
38
+ data: undefined;
39
+ };
40
+ export type LoadingValue = {
41
+ isSuccess: false;
42
+ isError: false;
43
+ isLoading: true;
44
+ isFetching: boolean;
45
+ data: undefined;
46
+ };
47
+ export type ErrorValue = {
48
+ isSuccess: false;
49
+ isError: true;
50
+ isLoading: false;
51
+ isFetching: boolean;
52
+ data: unknown;
53
+ };
54
+ export type FetchingValueSuccess<T> = {
55
+ isSuccess: true;
56
+ isError: false;
57
+ isLoading: false;
58
+ isFetching: true;
59
+ data: T;
60
+ };
61
+ export type FetchingValueError = {
62
+ isSuccess: false;
63
+ isError: true;
64
+ isLoading: false;
65
+ isFetching: true;
66
+ data: unknown;
67
+ };
68
+ export type SettledValue<T> = {
69
+ isSuccess: true;
70
+ isError: false;
71
+ isLoading: false;
72
+ isFetching: false;
73
+ data: T;
74
+ };
75
+ export type AsyncValue<T> = PendingValue | LoadingValue | ErrorValue | FetchingValueSuccess<T> | FetchingValueError | SettledValue<T>;
76
+ export declare const isSettled: <T>(value: AsyncValue<T>) => value is SettledValue<T>;
77
+ export declare const loading: () => LoadingValue;
78
+ export declare const fetching: <T>(data: T) => FetchingValueSuccess<T>;
79
+ export declare const settled: <T>(data: T) => SettledValue<T>;
80
+ export declare const error: (error: unknown) => ErrorValue;
81
+ export declare const handle: <T, N>(value: AsyncValue<T | null>, handlers: {
82
+ loading: () => N;
83
+ error: (error: unknown) => N;
84
+ absent: () => N;
85
+ success: (data: T) => N;
86
+ }) => N;
87
+ export declare const map: <T, N>(value: AsyncValue<T>, mapper: (value: T) => N) => AsyncValue<N>;
88
+ //# sourceMappingURL=async-value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-value.d.ts","sourceRoot":"","sources":["../src/async-value.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ // src/async-value.ts
2
+ import Zod from "zod";
3
+ import { Objects } from "@bessemer/cornerstone/index";
4
+ var schema = (type) => {
5
+ return Zod.object({
6
+ isSuccess: Zod.boolean(),
7
+ isError: Zod.boolean(),
8
+ isLoading: Zod.boolean(),
9
+ isFetching: Zod.boolean(),
10
+ data: Zod.union([type, Zod.unknown()])
11
+ });
12
+ };
13
+ var isSettled = (value) => {
14
+ return value.isSuccess && !value.isError && !value.isLoading && !value.isFetching;
15
+ };
16
+ var loading = () => ({ isSuccess: false, isError: false, isLoading: true, isFetching: true, data: void 0 });
17
+ var fetching = (data) => ({
18
+ isSuccess: true,
19
+ isError: false,
20
+ isLoading: false,
21
+ isFetching: true,
22
+ data
23
+ });
24
+ var settled = (data) => ({ isSuccess: true, isError: false, isLoading: false, isFetching: false, data });
25
+ var error = (error2) => ({ isSuccess: false, isError: true, isLoading: false, isFetching: false, data: error2 });
26
+ var handle = (value, handlers) => {
27
+ if (value.isLoading || value.isError && value.isFetching) {
28
+ return handlers.loading();
29
+ }
30
+ if (value.isError) {
31
+ return handlers.error(value.data);
32
+ }
33
+ if (Objects.isNil(value.data)) {
34
+ return handlers.absent();
35
+ }
36
+ return handlers.success(value.data);
37
+ };
38
+ var map = (value, mapper) => {
39
+ if (!value.isSuccess) {
40
+ return value;
41
+ }
42
+ return { ...value, data: mapper(value.data) };
43
+ };
44
+ export {
45
+ error,
46
+ fetching,
47
+ handle,
48
+ isSettled,
49
+ loading,
50
+ map,
51
+ schema,
52
+ settled
53
+ };
54
+ //# sourceMappingURL=async-value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/async-value.ts"],"sourcesContent":["import Zod, { ZodType } from 'zod'\nimport { Objects } from '@bessemer/cornerstone/index'\n\nexport const schema = <T extends ZodType>(type: T) => {\n return Zod.object({\n isSuccess: Zod.boolean(),\n isError: Zod.boolean(),\n isLoading: Zod.boolean(),\n isFetching: Zod.boolean(),\n data: Zod.union([type, Zod.unknown()]),\n })\n}\n\nexport type PendingValue = {\n isSuccess: false\n isError: false\n isLoading: false\n isFetching: boolean\n data: undefined\n}\n\nexport type LoadingValue = {\n isSuccess: false\n isError: false\n isLoading: true\n isFetching: boolean\n data: undefined\n}\n\nexport type ErrorValue = {\n isSuccess: false\n isError: true\n isLoading: false\n isFetching: boolean\n data: unknown\n}\n\nexport type FetchingValueSuccess<T> = {\n isSuccess: true\n isError: false\n isLoading: false\n isFetching: true\n data: T\n}\n\nexport type FetchingValueError = {\n isSuccess: false\n isError: true\n isLoading: false\n isFetching: true\n data: unknown\n}\n\nexport type SettledValue<T> = {\n isSuccess: true\n isError: false\n isLoading: false\n isFetching: false\n data: T\n}\n\nexport type AsyncValue<T> = PendingValue | LoadingValue | ErrorValue | FetchingValueSuccess<T> | FetchingValueError | SettledValue<T>\n\nexport const isSettled = <T>(value: AsyncValue<T>): value is SettledValue<T> => {\n return value.isSuccess && !value.isError && !value.isLoading && !value.isFetching\n}\n\nexport const loading = (): LoadingValue => ({ isSuccess: false, isError: false, isLoading: true, isFetching: true, data: undefined })\n\nexport const fetching = <T>(data: T): FetchingValueSuccess<T> => ({\n isSuccess: true,\n isError: false,\n isLoading: false,\n isFetching: true,\n data,\n})\n\nexport const settled = <T>(data: T): SettledValue<T> => ({ isSuccess: true, isError: false, isLoading: false, isFetching: false, data })\n\nexport const error = (error: unknown): ErrorValue => ({ isSuccess: false, isError: true, isLoading: false, isFetching: false, data: error })\n\nexport const handle = <T, N>(\n value: AsyncValue<T | null>,\n handlers: { loading: () => N; error: (error: unknown) => N; absent: () => N; success: (data: T) => N }\n): N => {\n if (value.isLoading || (value.isError && value.isFetching)) {\n return handlers.loading()\n }\n if (value.isError) {\n return handlers.error(value.data)\n }\n if (Objects.isNil(value.data)) {\n return handlers.absent()\n }\n\n return handlers.success(value.data)\n}\n\nexport const map = <T, N>(value: AsyncValue<T>, mapper: (value: T) => N): AsyncValue<N> => {\n if (!value.isSuccess) {\n return value\n }\n\n return { ...value, data: mapper(value.data) }\n}\n"],"mappings":";AAAA,OAAO,SAAsB;AAC7B,SAAS,eAAe;AAEjB,IAAM,SAAS,CAAoB,SAAY;AACpD,SAAO,IAAI,OAAO;AAAA,IAChB,WAAW,IAAI,QAAQ;AAAA,IACvB,SAAS,IAAI,QAAQ;AAAA,IACrB,WAAW,IAAI,QAAQ;AAAA,IACvB,YAAY,IAAI,QAAQ;AAAA,IACxB,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC;AAAA,EACvC,CAAC;AACH;AAoDO,IAAM,YAAY,CAAI,UAAmD;AAC9E,SAAO,MAAM,aAAa,CAAC,MAAM,WAAW,CAAC,MAAM,aAAa,CAAC,MAAM;AACzE;AAEO,IAAM,UAAU,OAAqB,EAAE,WAAW,OAAO,SAAS,OAAO,WAAW,MAAM,YAAY,MAAM,MAAM,OAAU;AAE5H,IAAM,WAAW,CAAI,UAAsC;AAAA,EAChE,WAAW;AAAA,EACX,SAAS;AAAA,EACT,WAAW;AAAA,EACX,YAAY;AAAA,EACZ;AACF;AAEO,IAAM,UAAU,CAAI,UAA8B,EAAE,WAAW,MAAM,SAAS,OAAO,WAAW,OAAO,YAAY,OAAO,KAAK;AAE/H,IAAM,QAAQ,CAACA,YAAgC,EAAE,WAAW,OAAO,SAAS,MAAM,WAAW,OAAO,YAAY,OAAO,MAAMA,OAAM;AAEnI,IAAM,SAAS,CACpB,OACA,aACM;AACN,MAAI,MAAM,aAAc,MAAM,WAAW,MAAM,YAAa;AAC1D,WAAO,SAAS,QAAQ;AAAA,EAC1B;AACA,MAAI,MAAM,SAAS;AACjB,WAAO,SAAS,MAAM,MAAM,IAAI;AAAA,EAClC;AACA,MAAI,QAAQ,MAAM,MAAM,IAAI,GAAG;AAC7B,WAAO,SAAS,OAAO;AAAA,EACzB;AAEA,SAAO,SAAS,QAAQ,MAAM,IAAI;AACpC;AAEO,IAAM,MAAM,CAAO,OAAsB,WAA2C;AACzF,MAAI,CAAC,MAAM,WAAW;AACpB,WAAO;AAAA,EACT;AAEA,SAAO,EAAE,GAAG,OAAO,MAAM,OAAO,MAAM,IAAI,EAAE;AAC9C;","names":["error"]}
package/dist/async.d.ts CHANGED
@@ -1,59 +1,4 @@
1
1
  import { Duration } from '@bessemer/cornerstone/duration';
2
- export type PendingValue = {
3
- isSuccess: false;
4
- isError: false;
5
- isLoading: false;
6
- isFetching: boolean;
7
- data: undefined;
8
- };
9
- export type LoadingValue = {
10
- isSuccess: false;
11
- isError: false;
12
- isLoading: true;
13
- isFetching: boolean;
14
- data: undefined;
15
- };
16
- export type ErrorValue = {
17
- isSuccess: false;
18
- isError: true;
19
- isLoading: false;
20
- isFetching: boolean;
21
- data: unknown;
22
- };
23
- export type FetchingValueSuccess<T> = {
24
- isSuccess: true;
25
- isError: false;
26
- isLoading: false;
27
- isFetching: true;
28
- data: T;
29
- };
30
- export type FetchingValueError = {
31
- isSuccess: false;
32
- isError: true;
33
- isLoading: false;
34
- isFetching: true;
35
- data: unknown;
36
- };
37
- export type SettledValue<T> = {
38
- isSuccess: true;
39
- isError: false;
40
- isLoading: false;
41
- isFetching: false;
42
- data: T;
43
- };
44
- export type AsyncValue<T> = PendingValue | LoadingValue | ErrorValue | FetchingValueSuccess<T> | FetchingValueError | SettledValue<T>;
45
- export declare const isSettled: <T>(value: AsyncValue<T>) => value is SettledValue<T>;
46
- export declare const loading: () => LoadingValue;
47
- export declare const fetching: <T>(data: T) => FetchingValueSuccess<T>;
48
- export declare const settled: <T>(data: T) => SettledValue<T>;
49
- export declare const error: (error: unknown) => ErrorValue;
50
- export declare const handle: <T, N>(value: AsyncValue<T | null>, handlers: {
51
- loading: () => N;
52
- error: (error: unknown) => N;
53
- absent: () => N;
54
- success: (data: T) => N;
55
- }) => N;
56
- export declare const map: <T, N>(value: AsyncValue<T>, mapper: (value: T) => N) => AsyncValue<N>;
57
2
  export declare const execute: <T>(runnable: () => Promise<T>) => Promise<T>;
58
3
  export declare const sleep: (duration: Duration) => Promise<void>;
59
4
  //# sourceMappingURL=async.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"async.d.ts","sourceRoot":"","sources":["../src/async.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"async.d.ts","sourceRoot":"","sources":["../src/async.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAA;AAGzD,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,UAAU,MAAM,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAWhE,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,UAAU,QAAQ,KAAG,OAAO,CAAC,IAAI,CAItD,CAAA"}
package/dist/async.js CHANGED
@@ -1,36 +1,5 @@
1
1
  // src/async.ts
2
- import { Durations, Objects } from "@bessemer/cornerstone";
3
- var isSettled = (value) => {
4
- return value.isSuccess && !value.isError && !value.isLoading && !value.isFetching;
5
- };
6
- var loading = () => ({ isSuccess: false, isError: false, isLoading: true, isFetching: true, data: void 0 });
7
- var fetching = (data) => ({
8
- isSuccess: true,
9
- isError: false,
10
- isLoading: false,
11
- isFetching: true,
12
- data
13
- });
14
- var settled = (data) => ({ isSuccess: true, isError: false, isLoading: false, isFetching: false, data });
15
- var error = (error2) => ({ isSuccess: false, isError: true, isLoading: false, isFetching: false, data: error2 });
16
- var handle = (value, handlers) => {
17
- if (value.isLoading || value.isError && value.isFetching) {
18
- return handlers.loading();
19
- }
20
- if (value.isError) {
21
- return handlers.error(value.data);
22
- }
23
- if (Objects.isNil(value.data)) {
24
- return handlers.absent();
25
- }
26
- return handlers.success(value.data);
27
- };
28
- var map = (value, mapper) => {
29
- if (!value.isSuccess) {
30
- return value;
31
- }
32
- return { ...value, data: mapper(value.data) };
33
- };
2
+ import { Durations } from "@bessemer/cornerstone";
34
3
  var execute = (runnable) => {
35
4
  return new Promise(async (resolve, reject) => {
36
5
  setTimeout(async () => {
@@ -49,14 +18,7 @@ var sleep = (duration) => {
49
18
  });
50
19
  };
51
20
  export {
52
- error,
53
21
  execute,
54
- fetching,
55
- handle,
56
- isSettled,
57
- loading,
58
- map,
59
- settled,
60
22
  sleep
61
23
  };
62
24
  //# sourceMappingURL=async.js.map
package/dist/async.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/async.ts"],"sourcesContent":["import { Duration } from '@bessemer/cornerstone/duration'\nimport { Durations, Objects } from '@bessemer/cornerstone'\n\nexport type PendingValue = {\n isSuccess: false\n isError: false\n isLoading: false\n isFetching: boolean\n data: undefined\n}\n\nexport type LoadingValue = {\n isSuccess: false\n isError: false\n isLoading: true\n isFetching: boolean\n data: undefined\n}\n\nexport type ErrorValue = {\n isSuccess: false\n isError: true\n isLoading: false\n isFetching: boolean\n data: unknown\n}\n\nexport type FetchingValueSuccess<T> = {\n isSuccess: true\n isError: false\n isLoading: false\n isFetching: true\n data: T\n}\n\nexport type FetchingValueError = {\n isSuccess: false\n isError: true\n isLoading: false\n isFetching: true\n data: unknown\n}\n\nexport type SettledValue<T> = {\n isSuccess: true\n isError: false\n isLoading: false\n isFetching: false\n data: T\n}\n\nexport type AsyncValue<T> = PendingValue | LoadingValue | ErrorValue | FetchingValueSuccess<T> | FetchingValueError | SettledValue<T>\n\nexport const isSettled = <T>(value: AsyncValue<T>): value is SettledValue<T> => {\n return value.isSuccess && !value.isError && !value.isLoading && !value.isFetching\n}\n\nexport const loading = (): LoadingValue => ({ isSuccess: false, isError: false, isLoading: true, isFetching: true, data: undefined })\n\nexport const fetching = <T>(data: T): FetchingValueSuccess<T> => ({\n isSuccess: true,\n isError: false,\n isLoading: false,\n isFetching: true,\n data,\n})\n\nexport const settled = <T>(data: T): SettledValue<T> => ({ isSuccess: true, isError: false, isLoading: false, isFetching: false, data })\n\nexport const error = (error: unknown): ErrorValue => ({ isSuccess: false, isError: true, isLoading: false, isFetching: false, data: error })\n\nexport const handle = <T, N>(\n value: AsyncValue<T | null>,\n handlers: { loading: () => N; error: (error: unknown) => N; absent: () => N; success: (data: T) => N }\n): N => {\n if (value.isLoading || (value.isError && value.isFetching)) {\n return handlers.loading()\n }\n if (value.isError) {\n return handlers.error(value.data)\n }\n if (Objects.isNil(value.data)) {\n return handlers.absent()\n }\n\n return handlers.success(value.data)\n}\n\nexport const map = <T, N>(value: AsyncValue<T>, mapper: (value: T) => N): AsyncValue<N> => {\n if (!value.isSuccess) {\n return value\n }\n\n return { ...value, data: mapper(value.data) }\n}\n\nexport const execute = <T>(runnable: () => Promise<T>): Promise<T> => {\n return new Promise(async (resolve, reject) => {\n setTimeout(async () => {\n try {\n const value = await runnable()\n resolve(value)\n } catch (e) {\n reject(e)\n }\n }, 0)\n })\n}\n\nexport const sleep = (duration: Duration): Promise<void> => {\n return new Promise((resolve) => {\n setTimeout(resolve, Durations.toMilliseconds(duration))\n })\n}\n"],"mappings":";AACA,SAAS,WAAW,eAAe;AAoD5B,IAAM,YAAY,CAAI,UAAmD;AAC9E,SAAO,MAAM,aAAa,CAAC,MAAM,WAAW,CAAC,MAAM,aAAa,CAAC,MAAM;AACzE;AAEO,IAAM,UAAU,OAAqB,EAAE,WAAW,OAAO,SAAS,OAAO,WAAW,MAAM,YAAY,MAAM,MAAM,OAAU;AAE5H,IAAM,WAAW,CAAI,UAAsC;AAAA,EAChE,WAAW;AAAA,EACX,SAAS;AAAA,EACT,WAAW;AAAA,EACX,YAAY;AAAA,EACZ;AACF;AAEO,IAAM,UAAU,CAAI,UAA8B,EAAE,WAAW,MAAM,SAAS,OAAO,WAAW,OAAO,YAAY,OAAO,KAAK;AAE/H,IAAM,QAAQ,CAACA,YAAgC,EAAE,WAAW,OAAO,SAAS,MAAM,WAAW,OAAO,YAAY,OAAO,MAAMA,OAAM;AAEnI,IAAM,SAAS,CACpB,OACA,aACM;AACN,MAAI,MAAM,aAAc,MAAM,WAAW,MAAM,YAAa;AAC1D,WAAO,SAAS,QAAQ;AAAA,EAC1B;AACA,MAAI,MAAM,SAAS;AACjB,WAAO,SAAS,MAAM,MAAM,IAAI;AAAA,EAClC;AACA,MAAI,QAAQ,MAAM,MAAM,IAAI,GAAG;AAC7B,WAAO,SAAS,OAAO;AAAA,EACzB;AAEA,SAAO,SAAS,QAAQ,MAAM,IAAI;AACpC;AAEO,IAAM,MAAM,CAAO,OAAsB,WAA2C;AACzF,MAAI,CAAC,MAAM,WAAW;AACpB,WAAO;AAAA,EACT;AAEA,SAAO,EAAE,GAAG,OAAO,MAAM,OAAO,MAAM,IAAI,EAAE;AAC9C;AAEO,IAAM,UAAU,CAAI,aAA2C;AACpE,SAAO,IAAI,QAAQ,OAAO,SAAS,WAAW;AAC5C,eAAW,YAAY;AACrB,UAAI;AACF,cAAM,QAAQ,MAAM,SAAS;AAC7B,gBAAQ,KAAK;AAAA,MACf,SAAS,GAAG;AACV,eAAO,CAAC;AAAA,MACV;AAAA,IACF,GAAG,CAAC;AAAA,EACN,CAAC;AACH;AAEO,IAAM,QAAQ,CAAC,aAAsC;AAC1D,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,eAAW,SAAS,UAAU,eAAe,QAAQ,CAAC;AAAA,EACxD,CAAC;AACH;","names":["error"]}
1
+ {"version":3,"sources":["../src/async.ts"],"sourcesContent":["import { Duration } from '@bessemer/cornerstone/duration'\nimport { Durations } from '@bessemer/cornerstone'\n\nexport const execute = <T>(runnable: () => Promise<T>): Promise<T> => {\n return new Promise(async (resolve, reject) => {\n setTimeout(async () => {\n try {\n const value = await runnable()\n resolve(value)\n } catch (e) {\n reject(e)\n }\n }, 0)\n })\n}\n\nexport const sleep = (duration: Duration): Promise<void> => {\n return new Promise((resolve) => {\n setTimeout(resolve, Durations.toMilliseconds(duration))\n })\n}\n"],"mappings":";AACA,SAAS,iBAAiB;AAEnB,IAAM,UAAU,CAAI,aAA2C;AACpE,SAAO,IAAI,QAAQ,OAAO,SAAS,WAAW;AAC5C,eAAW,YAAY;AACrB,UAAI;AACF,cAAM,QAAQ,MAAM,SAAS;AAC7B,gBAAQ,KAAK;AAAA,MACf,SAAS,GAAG;AACV,eAAO,CAAC;AAAA,MACV;AAAA,IACF,GAAG,CAAC;AAAA,EACN,CAAC;AACH;AAEO,IAAM,QAAQ,CAAC,aAAsC;AAC1D,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,eAAW,SAAS,UAAU,eAAe,QAAQ,CAAC;AAAA,EACxD,CAAC;AACH;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAE9I,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAY,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAIlC,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,UAAU,EAAE,QAAQ,CAAA;IACpB,WAAW,EAAE,QAAQ,GAAG,IAAI,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AAE9C,yBAAiB,UAAU,CAAC;IAOnB,MAAM,eAAe,GAAI,UAAU,YAAY,KAAG,UAUxD,CAAA;CACF;AAED,yBAAiB,QAAQ,CAAC;IAIjB,MAAM,cAAc,QAAO,iBAEjC,CAAA;IAEM,MAAM,UAAU,GAAI,KAAK,iBAAiB,KAAG,OAEnD,CAAA;CACF;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,CAAA;CAC1B,CAAA;AAED,yBAAiB,WAAW,CAAC;IACpB,MAAM,EAAE,GAAI,OAAO,SAAS,CAAC,WAAW,CAAC;;KAE/C,CAAA;IAEM,MAAM,SAAS,GAAI,WAAW,iBAAiB,EAAE,QAAQ,WAAW,KAAG,WAE7E,CAAA;CACF;AAED,MAAM,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;AACxD,eAAO,MAAM,eAAe,EAAE,OAAO,CAAC,SAAS,CAAgB,CAAA;AAE/D,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,IAAI,EAAE,SAAS,CAAA;CAChB;AAED,MAAM,WAAW,KAAK,CAAC,CAAC,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IAChD,UAAU,CAAC,SAAS,EAAE,iBAAiB,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IAE/F,WAAW,CACT,SAAS,EAAE,iBAAiB,EAC5B,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,EACxB,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAC5D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAE3B,UAAU,CAAC,SAAS,EAAE,iBAAiB,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE/F,WAAW,CAAC,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE9F,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7C;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,CAAE,SAAQ,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC1E,IAAI,EAAE,iBAAiB,CAAA;IAEvB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7C;AAED,8BAAsB,qBAAqB,CAAC,CAAC,CAAE,SAAQ,2BAA2B,CAAC,UAAU,CAAC,CAAC,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC;IAC3H,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAA;IAEhC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CACtD;AAED,MAAM,WAAW,UAAU,CAAC,CAAC,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,SAAS,EAAE,iBAAiB,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;IAE3E,SAAS,CAAC,SAAS,EAAE,iBAAiB,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAExI,QAAQ,CAAC,SAAS,EAAE,iBAAiB,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,IAAI,CAAA;IAEpF,SAAS,CAAC,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,IAAI,CAAA;IAEnF,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;CACrC;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,CAAE,SAAQ,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;IAChG,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;CACrC;AAED,8BAAsB,0BAA0B,CAAC,CAAC,CAAE,SAAQ,0BAA0B,CAAC,UAAU,CAAC,CAAC,CAAC,CAAE,YAAW,kBAAkB,CAAC,CAAC,CAAC;IACpI,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAA;IAEhC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAEvC,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAGnD;AAED,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAC1B,KAAK,EAAE,CAAC,CAAA;IACR,aAAa,EAAE,IAAI,GAAG,IAAI,CAAA;IAC1B,cAAc,EAAE,IAAI,GAAG,IAAI,CAAA;CAC5B,CAAA;AAED,yBAAiB,UAAU,CAAC;IACnB,MAAM,QAAQ,GAAI,CAAC,EAAE,OAAO,UAAU,CAAC,CAAC,CAAC,KAAG,OAMlD,CAAA;IAEM,MAAM,MAAM,GAAI,CAAC,EAAE,OAAO,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,KAAG,OAU5D,CAAA;IAEM,MAAM,OAAO,GAAI,CAAC,EAAE,OAAO,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,KAAG,OAAyB,CAAA;IAEhF,MAAM,OAAO,GAAI,CAAC,EAAE,OAAO,UAAU,CAAC,CAAC,CAAC,KAAG,OAMjD,CAAA;IAEM,MAAM,EAAE,GAAI,CAAC,EAAE,OAAO,CAAC,kBAQ7B,CAAA;IAGM,MAAM,UAAU,GAAI,CAAC,EAAE,eAAe,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,UAAU,KAAG,UAAU,CAAC,CAAC,CAwB3F,CAAA;CACF;AAED,MAAM,MAAM,yBAAyB,GAAG,yBAAyB,GAAG;IAClE,KAAK,EAAE,yBAAyB,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,EAAE,eAAe,CAAA;IAEzB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAA;CAClD,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,SAAS,EAAE,KAAK,CAAC,0BAA0B,CAAC,CAAA;CAC7C,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;AACxE,MAAM,MAAM,0BAA0B,GAAG,YAAY,GAAG;IACtD,IAAI,EAAE,iBAAiB,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,yBAAyB,GAAG;IAC3D,KAAK,EAAE,yBAAyB,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,qBAAqB,CAAC,WAAW,SAAS,0BAA0B,IAAI;IAClF,IAAI,EAAE,iBAAiB,CAAA;IACvB,SAAS,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,KAAK,aAAa,CAAC,CAAC,CAAC,CAAA;CAC5E,CAAA"}
package/dist/cache.js CHANGED
@@ -1,7 +1,8 @@
1
1
  // src/cache.ts
2
2
  import { AbstractLocalKeyValueStore, AbstractRemoteKeyValueStore } from "@bessemer/cornerstone/store";
3
- import { Arrays, Dates, Durations, Objects, Strings, Zod } from "@bessemer/cornerstone";
3
+ import { Arrays, Dates, Durations, Objects, Strings } from "@bessemer/cornerstone";
4
4
  import { ResourceKey } from "@bessemer/cornerstone/resource";
5
+ import Zod from "zod";
5
6
  var CacheProps;
6
7
  ((CacheProps2) => {
7
8
  const DefaultCacheProps = {
package/dist/cache.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cache.ts"],"sourcesContent":["import { AbstractLocalKeyValueStore, AbstractRemoteKeyValueStore, LocalKeyValueStore, RemoteKeyValueStore } from '@bessemer/cornerstone/store'\nimport { Arrays, Dates, Durations, Objects, Strings, Zod } from '@bessemer/cornerstone'\nimport { Duration } from '@bessemer/cornerstone/duration'\nimport { ResourceKey, ResourceNamespace } from '@bessemer/cornerstone/resource'\nimport { AbstractApplicationContext } from '@bessemer/cornerstone/context'\nimport { NominalType } from '@bessemer/cornerstone/types'\nimport { Entry } from '@bessemer/cornerstone/entry'\nimport { GlobPattern } from '@bessemer/cornerstone/glob'\nimport { Arrayable } from 'type-fest'\nimport { ZodType } from 'zod'\n\n// JOHN should this even be in cornerstone? especially consider the config types down at the bottom\n\nexport type CacheProps = {\n maxSize: number | null\n timeToLive: Duration\n timeToStale: Duration | null\n}\n\nexport type CacheOptions = Partial<CacheProps>\n\nexport namespace CacheProps {\n const DefaultCacheProps = {\n maxSize: 50000,\n timeToLive: Durations.OneDay,\n timeToStale: Durations.OneHour,\n }\n\n export const buildCacheProps = (options?: CacheOptions): CacheProps => {\n options = options ?? {}\n\n const props = Objects.deepMerge(DefaultCacheProps, options)\n\n if (props.maxSize === null && props.timeToLive === null) {\n throw new Error('Invalid cache configuration, both maxSize and timeToLive are null')\n }\n\n return props\n }\n}\n\nexport namespace CacheKey {\n // We use a hardcoded UUID to represent a unique token value that serves as a flag to disable caching\n const DisableCacheToken = 'f6822c1a-d527-4c65-b9dd-ddc24620b684'\n\n export const disableCaching = (): ResourceNamespace => {\n return DisableCacheToken\n }\n\n export const isDisabled = (key: ResourceNamespace): boolean => {\n return Strings.contains(key, DisableCacheToken)\n }\n}\n\nexport type CacheSector = {\n globs: Array<GlobPattern>\n}\n\nexport namespace CacheSector {\n export const of = (globs: Arrayable<GlobPattern>) => {\n return { globs: Arrays.toArray(globs) }\n }\n\n export const namespace = (namespace: ResourceNamespace, sector: CacheSector): CacheSector => {\n return { globs: ResourceKey.namespaceAll(namespace, sector.globs) }\n }\n}\n\nexport type CacheName = NominalType<string, 'CacheName'>\nexport const CacheNameSchema: ZodType<CacheName> = Zod.string()\n\nexport interface AbstractCache<T> {\n name: CacheName\n}\n\nexport interface Cache<T> extends AbstractCache<T> {\n fetchValue(namespace: ResourceNamespace, key: ResourceKey, fetch: () => Promise<T>): Promise<T>\n\n fetchValues(\n namespace: ResourceNamespace,\n keys: Array<ResourceKey>,\n fetch: (keys: Array<ResourceKey>) => Promise<Array<Entry<T>>>\n ): Promise<Array<Entry<T>>>\n\n writeValue(namespace: ResourceNamespace, key: ResourceKey, value: T | undefined): Promise<void>\n\n writeValues(namespace: ResourceNamespace, entries: Array<Entry<T | undefined>>): Promise<void>\n\n evictAll(sector: CacheSector): Promise<void>\n}\n\nexport interface CacheProvider<T> extends RemoteKeyValueStore<CacheEntry<T>> {\n type: CacheProviderType\n\n evictAll(sector: CacheSector): Promise<void>\n}\n\nexport abstract class AbstractCacheProvider<T> extends AbstractRemoteKeyValueStore<CacheEntry<T>> implements CacheProvider<T> {\n abstract type: CacheProviderType\n\n abstract evictAll(sector: CacheSector): Promise<void>\n}\n\nexport interface LocalCache<T> extends AbstractCache<T> {\n getValue(namespace: ResourceNamespace, key: ResourceKey, fetch: () => T): T\n\n getValues(namespace: ResourceNamespace, keys: Array<ResourceKey>, fetch: (keys: Array<ResourceKey>) => Array<Entry<T>>): Array<Entry<T>>\n\n setValue(namespace: ResourceNamespace, key: ResourceKey, value: T | undefined): void\n\n setValues(namespace: ResourceNamespace, entries: Array<Entry<T | undefined>>): void\n\n removeAll(sector: CacheSector): void\n}\n\nexport interface LocalCacheProvider<T> extends LocalKeyValueStore<CacheEntry<T>>, CacheProvider<T> {\n removeAll(sector: CacheSector): void\n}\n\nexport abstract class AbstractLocalCacheProvider<T> extends AbstractLocalKeyValueStore<CacheEntry<T>> implements LocalCacheProvider<T> {\n abstract type: CacheProviderType\n\n abstract removeAll(sector: CacheSector): void\n\n async evictAll(sector: CacheSector): Promise<void> {\n this.removeAll(sector)\n }\n}\n\nexport type CacheEntry<T> = {\n value: T\n liveTimestamp: Date | null\n staleTimestamp: Date | null\n}\n\nexport namespace CacheEntry {\n export const isActive = <T>(entry: CacheEntry<T>): boolean => {\n if (isDead(entry) || isStale(entry)) {\n return false\n }\n\n return true\n }\n\n export const isDead = <T>(entry: CacheEntry<T> | undefined): boolean => {\n if (Objects.isNil(entry)) {\n return true\n }\n\n if (Objects.isNil(entry.liveTimestamp)) {\n return false\n }\n\n return Dates.isBefore(entry.liveTimestamp, Dates.now())\n }\n\n export const isAlive = <T>(entry: CacheEntry<T> | undefined): boolean => !isDead(entry)\n\n export const isStale = <T>(entry: CacheEntry<T>): boolean => {\n if (Objects.isNil(entry.staleTimestamp)) {\n return false\n }\n\n return Dates.isBefore(entry.staleTimestamp, Dates.now())\n }\n\n export const of = <T>(value: T) => {\n const entry: CacheEntry<T> = {\n value,\n liveTimestamp: null,\n staleTimestamp: null,\n }\n\n return entry\n }\n\n // JOHN do we want to enforce some kind of minimum liveness threshold?\n export const applyProps = <T>(originalEntry: CacheEntry<T>, props: CacheProps): CacheEntry<T> => {\n let liveTimestamp: Date | null = originalEntry.liveTimestamp\n if (!Objects.isNil(props.timeToLive)) {\n const limit = Dates.addMilliseconds(Dates.now(), Durations.toMilliseconds(props.timeToLive))\n if (Dates.isBefore(limit, liveTimestamp ?? limit)) {\n liveTimestamp = limit\n }\n }\n\n let staleTimestamp: Date | null = originalEntry.staleTimestamp\n if (!Objects.isNil(props.timeToStale)) {\n const limit = Dates.addMilliseconds(Dates.now(), Durations.toMilliseconds(props.timeToStale))\n if (Dates.isBefore(limit, staleTimestamp ?? limit)) {\n staleTimestamp = limit\n }\n }\n\n const limitedEntry: CacheEntry<T> = {\n value: originalEntry.value,\n liveTimestamp,\n staleTimestamp,\n }\n\n return limitedEntry\n }\n}\n\nexport type CacheConfigurationOptions = CacheConfigurationSection & {\n local: CacheConfigurationSection\n}\n\nexport type CacheConfigurationSection = {\n defaults: CacheDefinition\n\n /**\n * These options map from cache name key to configuration. They are a way for the tenant to override the configurations\n * for specific caches from the cache configuration here.\n */\n caches?: Record<string, Partial<CacheDefinition>>\n}\n\nexport type CacheDefinition = {\n options?: CacheOptions\n providers: Array<CacheProviderConfiguration>\n}\n\nexport type CacheProviderType = NominalType<string, 'CacheProviderType'>\nexport type CacheProviderConfiguration = CacheOptions & {\n type: CacheProviderType\n}\n\nexport type CacheConfiguration = CacheConfigurationSection & {\n local: CacheConfigurationSection\n}\n\nexport type CacheProviderRegistry<ContextType extends AbstractApplicationContext> = {\n type: CacheProviderType\n construct: <T>(props: CacheProps, context: ContextType) => CacheProvider<T>\n}\n"],"mappings":"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","names":["CacheProps","CacheKey","CacheSector","namespace","CacheEntry"]}
1
+ {"version":3,"sources":["../src/cache.ts"],"sourcesContent":["import { AbstractLocalKeyValueStore, AbstractRemoteKeyValueStore, LocalKeyValueStore, RemoteKeyValueStore } from '@bessemer/cornerstone/store'\nimport { Arrays, Dates, Durations, Objects, Strings } from '@bessemer/cornerstone'\nimport { Duration } from '@bessemer/cornerstone/duration'\nimport { ResourceKey, ResourceNamespace } from '@bessemer/cornerstone/resource'\nimport { AbstractApplicationContext } from '@bessemer/cornerstone/context'\nimport { NominalType } from '@bessemer/cornerstone/types'\nimport { Entry } from '@bessemer/cornerstone/entry'\nimport { GlobPattern } from '@bessemer/cornerstone/glob'\nimport { Arrayable } from 'type-fest'\nimport Zod, { ZodType } from 'zod'\n\n// JOHN should this even be in cornerstone? especially consider the config types down at the bottom\n\nexport type CacheProps = {\n maxSize: number | null\n timeToLive: Duration\n timeToStale: Duration | null\n}\n\nexport type CacheOptions = Partial<CacheProps>\n\nexport namespace CacheProps {\n const DefaultCacheProps = {\n maxSize: 50000,\n timeToLive: Durations.OneDay,\n timeToStale: Durations.OneHour,\n }\n\n export const buildCacheProps = (options?: CacheOptions): CacheProps => {\n options = options ?? {}\n\n const props = Objects.deepMerge(DefaultCacheProps, options)\n\n if (props.maxSize === null && props.timeToLive === null) {\n throw new Error('Invalid cache configuration, both maxSize and timeToLive are null')\n }\n\n return props\n }\n}\n\nexport namespace CacheKey {\n // We use a hardcoded UUID to represent a unique token value that serves as a flag to disable caching\n const DisableCacheToken = 'f6822c1a-d527-4c65-b9dd-ddc24620b684'\n\n export const disableCaching = (): ResourceNamespace => {\n return DisableCacheToken\n }\n\n export const isDisabled = (key: ResourceNamespace): boolean => {\n return Strings.contains(key, DisableCacheToken)\n }\n}\n\nexport type CacheSector = {\n globs: Array<GlobPattern>\n}\n\nexport namespace CacheSector {\n export const of = (globs: Arrayable<GlobPattern>) => {\n return { globs: Arrays.toArray(globs) }\n }\n\n export const namespace = (namespace: ResourceNamespace, sector: CacheSector): CacheSector => {\n return { globs: ResourceKey.namespaceAll(namespace, sector.globs) }\n }\n}\n\nexport type CacheName = NominalType<string, 'CacheName'>\nexport const CacheNameSchema: ZodType<CacheName> = Zod.string()\n\nexport interface AbstractCache<T> {\n name: CacheName\n}\n\nexport interface Cache<T> extends AbstractCache<T> {\n fetchValue(namespace: ResourceNamespace, key: ResourceKey, fetch: () => Promise<T>): Promise<T>\n\n fetchValues(\n namespace: ResourceNamespace,\n keys: Array<ResourceKey>,\n fetch: (keys: Array<ResourceKey>) => Promise<Array<Entry<T>>>\n ): Promise<Array<Entry<T>>>\n\n writeValue(namespace: ResourceNamespace, key: ResourceKey, value: T | undefined): Promise<void>\n\n writeValues(namespace: ResourceNamespace, entries: Array<Entry<T | undefined>>): Promise<void>\n\n evictAll(sector: CacheSector): Promise<void>\n}\n\nexport interface CacheProvider<T> extends RemoteKeyValueStore<CacheEntry<T>> {\n type: CacheProviderType\n\n evictAll(sector: CacheSector): Promise<void>\n}\n\nexport abstract class AbstractCacheProvider<T> extends AbstractRemoteKeyValueStore<CacheEntry<T>> implements CacheProvider<T> {\n abstract type: CacheProviderType\n\n abstract evictAll(sector: CacheSector): Promise<void>\n}\n\nexport interface LocalCache<T> extends AbstractCache<T> {\n getValue(namespace: ResourceNamespace, key: ResourceKey, fetch: () => T): T\n\n getValues(namespace: ResourceNamespace, keys: Array<ResourceKey>, fetch: (keys: Array<ResourceKey>) => Array<Entry<T>>): Array<Entry<T>>\n\n setValue(namespace: ResourceNamespace, key: ResourceKey, value: T | undefined): void\n\n setValues(namespace: ResourceNamespace, entries: Array<Entry<T | undefined>>): void\n\n removeAll(sector: CacheSector): void\n}\n\nexport interface LocalCacheProvider<T> extends LocalKeyValueStore<CacheEntry<T>>, CacheProvider<T> {\n removeAll(sector: CacheSector): void\n}\n\nexport abstract class AbstractLocalCacheProvider<T> extends AbstractLocalKeyValueStore<CacheEntry<T>> implements LocalCacheProvider<T> {\n abstract type: CacheProviderType\n\n abstract removeAll(sector: CacheSector): void\n\n async evictAll(sector: CacheSector): Promise<void> {\n this.removeAll(sector)\n }\n}\n\nexport type CacheEntry<T> = {\n value: T\n liveTimestamp: Date | null\n staleTimestamp: Date | null\n}\n\nexport namespace CacheEntry {\n export const isActive = <T>(entry: CacheEntry<T>): boolean => {\n if (isDead(entry) || isStale(entry)) {\n return false\n }\n\n return true\n }\n\n export const isDead = <T>(entry: CacheEntry<T> | undefined): boolean => {\n if (Objects.isNil(entry)) {\n return true\n }\n\n if (Objects.isNil(entry.liveTimestamp)) {\n return false\n }\n\n return Dates.isBefore(entry.liveTimestamp, Dates.now())\n }\n\n export const isAlive = <T>(entry: CacheEntry<T> | undefined): boolean => !isDead(entry)\n\n export const isStale = <T>(entry: CacheEntry<T>): boolean => {\n if (Objects.isNil(entry.staleTimestamp)) {\n return false\n }\n\n return Dates.isBefore(entry.staleTimestamp, Dates.now())\n }\n\n export const of = <T>(value: T) => {\n const entry: CacheEntry<T> = {\n value,\n liveTimestamp: null,\n staleTimestamp: null,\n }\n\n return entry\n }\n\n // JOHN do we want to enforce some kind of minimum liveness threshold?\n export const applyProps = <T>(originalEntry: CacheEntry<T>, props: CacheProps): CacheEntry<T> => {\n let liveTimestamp: Date | null = originalEntry.liveTimestamp\n if (!Objects.isNil(props.timeToLive)) {\n const limit = Dates.addMilliseconds(Dates.now(), Durations.toMilliseconds(props.timeToLive))\n if (Dates.isBefore(limit, liveTimestamp ?? limit)) {\n liveTimestamp = limit\n }\n }\n\n let staleTimestamp: Date | null = originalEntry.staleTimestamp\n if (!Objects.isNil(props.timeToStale)) {\n const limit = Dates.addMilliseconds(Dates.now(), Durations.toMilliseconds(props.timeToStale))\n if (Dates.isBefore(limit, staleTimestamp ?? limit)) {\n staleTimestamp = limit\n }\n }\n\n const limitedEntry: CacheEntry<T> = {\n value: originalEntry.value,\n liveTimestamp,\n staleTimestamp,\n }\n\n return limitedEntry\n }\n}\n\nexport type CacheConfigurationOptions = CacheConfigurationSection & {\n local: CacheConfigurationSection\n}\n\nexport type CacheConfigurationSection = {\n defaults: CacheDefinition\n\n /**\n * These options map from cache name key to configuration. They are a way for the tenant to override the configurations\n * for specific caches from the cache configuration here.\n */\n caches?: Record<string, Partial<CacheDefinition>>\n}\n\nexport type CacheDefinition = {\n options?: CacheOptions\n providers: Array<CacheProviderConfiguration>\n}\n\nexport type CacheProviderType = NominalType<string, 'CacheProviderType'>\nexport type CacheProviderConfiguration = CacheOptions & {\n type: CacheProviderType\n}\n\nexport type CacheConfiguration = CacheConfigurationSection & {\n local: CacheConfigurationSection\n}\n\nexport type CacheProviderRegistry<ContextType extends AbstractApplicationContext> = {\n type: CacheProviderType\n construct: <T>(props: CacheProps, context: ContextType) => CacheProvider<T>\n}\n"],"mappings":"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","names":["CacheProps","CacheKey","CacheSector","namespace","CacheEntry"]}
package/dist/content.d.ts CHANGED
@@ -3,7 +3,7 @@ import { NominalType } from '@bessemer/cornerstone/types';
3
3
  import { AbstractApplicationContext } from '@bessemer/cornerstone/context';
4
4
  import { RichTextJson } from '@bessemer/cornerstone/rich-text';
5
5
  import { Tag } from '@bessemer/cornerstone/tag';
6
- import { ZodType } from 'zod';
6
+ import Zod, { ZodType } from 'zod';
7
7
  export type ContentSector = NominalType<string, 'ContentSector'>;
8
8
  export declare const ContentSectorSchema: ZodType<ContentSector>;
9
9
  export type ContentKey = NominalType<string, 'ContentKey'>;
@@ -12,12 +12,12 @@ export type ContentType<Data = unknown> = NominalType<string, ['ContentType', Da
12
12
  export declare const ContentTypeSchema: ZodType<ContentType>;
13
13
  export type ContentReference = Reference<'Content'>;
14
14
  type ContentDataType<Type> = Type extends ContentType<infer Data> ? Data : never;
15
- export declare const ContentDataSchema: import("zod").ZodObject<{
16
- key: ZodType<ContentKey, import("zod").ZodTypeDef, ContentKey>;
17
- type: ZodType<ContentType<unknown>, import("zod").ZodTypeDef, ContentType<unknown>>;
18
- data: import("zod").ZodUnknown;
19
- sector: import("zod").ZodNullable<ZodType<ContentSector, import("zod").ZodTypeDef, ContentSector>>;
20
- }, "strip", import("zod").ZodTypeAny, {
15
+ export declare const ContentDataSchema: Zod.ZodObject<{
16
+ key: Zod.ZodType<ContentKey, Zod.ZodTypeDef, ContentKey>;
17
+ type: Zod.ZodType<ContentType<unknown>, Zod.ZodTypeDef, ContentType<unknown>>;
18
+ data: Zod.ZodUnknown;
19
+ sector: Zod.ZodNullable<Zod.ZodType<ContentSector, Zod.ZodTypeDef, ContentSector>>;
20
+ }, "strip", Zod.ZodTypeAny, {
21
21
  key: string & import("@bessemer/cornerstone/types").NominalTyping<"ContentKey">;
22
22
  type: string & import("@bessemer/cornerstone/types").NominalTyping<["ContentType", unknown]>;
23
23
  sector: ContentSector | null;
@@ -1 +1 @@
1
- {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAA;AAE1E,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAA;AAC/C,OAAO,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAElC,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;AAChE,eAAO,MAAM,mBAAmB,EAAE,OAAO,CAAC,aAAa,CAAgB,CAAA;AAEvE,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;AAC1D,eAAO,MAAM,gBAAgB,EAAE,OAAO,CAAC,UAAU,CAAgB,CAAA;AAEjE,MAAM,MAAM,WAAW,CAAC,IAAI,GAAG,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAA;AACpF,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,WAAW,CAAgB,CAAA;AAEnE,MAAM,MAAM,gBAAgB,GAAG,SAAS,CAAC,SAAS,CAAC,CAAA;AAEnD,KAAK,eAAe,CAAC,IAAI,IAAI,IAAI,SAAS,WAAW,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,CAAA;AAEhF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;EAK5B,CAAA;AAEF,MAAM,MAAM,WAAW,CAAC,IAAI,SAAS,WAAW,GAAG,WAAW,EAAE,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,gBAAgB,CAAC,GAAG;IAC/H,GAAG,EAAE,UAAU,CAAA;IACf,IAAI,EAAE,IAAI,CAAA;IACV,IAAI,EAAE,IAAI,CAAA;IACV,MAAM,EAAE,aAAa,GAAG,IAAI,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,sBAAsB,CAAC,OAAO,SAAS,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;AAEjF,MAAM,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;AAE1E,yBAAiB,mBAAmB,CAAC;IAC5B,MAAM,OAAO,EAAE,kBAA8B,CAAA;IAC7C,MAAM,KAAK,EAAE,kBAA4B,CAAA;IACzC,MAAM,OAAO,EAAE,kBAA8B,CAAA;IAC7C,MAAM,MAAM,EAAE,kBAA6B,CAAA;IAC3C,MAAM,KAAK,EAAE,kBAA4B,CAAA;IACzC,MAAM,OAAO,EAAE,kBAA8B,CAAA;CACrD;AAED,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,YAAY,CAAU,CAAA;AAChE,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,eAAe,CAAC,CAAA;AAE7D,MAAM,WAAW,eAAe,CAAC,WAAW,SAAS,0BAA0B,GAAG,0BAA0B;IAC1G,iBAAiB,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAA;IAE5H,kBAAkB,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAA;IAEpH,qBAAqB,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAA;CAC9H;AAED,MAAM,MAAM,iBAAiB,CAC3B,kBAAkB,SAAS,0BAA0B,GAAG,0BAA0B,EAClF,IAAI,SAAS,WAAW,GAAG,WAAW,IACpC;IACF,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IAClB,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;CAC3F,CAAA;AAGD,eAAO,MAAM,gBAAgB,GAAU,kBAAkB,SAAS,0BAA0B,EAC1F,SAAS,KAAK,CAAC,WAAW,CAAC,EAC3B,aAAa,KAAK,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,EACzD,SAAS,kBAAkB,KAC1B,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAa5B,CAAA;AAED,MAAM,MAAM,iBAAiB,CAAC,IAAI,SAAS,WAAW,GAAG,WAAW,EAAE,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG;IAC9H,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,IAAI,SAAS,WAAW,GAAG,WAAW,EAAE,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,EAC7F,KAAK,UAAU,EACf,MAAM,IAAI,EACV,MAAM,IAAI,EACV,UAAU;IAAE,IAAI,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,aAAa,CAAA;CAAE,KACtD,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAS9B,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,kBAAkB,SAAS,0BAA0B,EAClF,SAAS,KAAK,CAAC,iBAAiB,CAAC,EACjC,cAAc,KAAK,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,KACzD,eAAe,CAAC,kBAAkB,CA2BpC,CAAA"}
package/dist/content.js CHANGED
@@ -1,5 +1,6 @@
1
1
  // src/content.ts
2
- import { Arrays, Objects, References, Tags, Ulids, Zod } from "@bessemer/cornerstone";
2
+ import { Arrays, Objects, References, Tags, Ulids } from "@bessemer/cornerstone";
3
+ import Zod from "zod";
3
4
  var ContentSectorSchema = Zod.string();
4
5
  var ContentKeySchema = Zod.string();
5
6
  var ContentTypeSchema = Zod.string();
@@ -33,7 +34,7 @@ var normalizeContent = async (content, normalizers, context) => {
33
34
  };
34
35
  var staticData = (key, type, data, options) => {
35
36
  return {
36
- reference: References.reference(Ulids.generateString(), "Content"),
37
+ reference: References.reference(Ulids.generate(), "Content"),
37
38
  key,
38
39
  type,
39
40
  data,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/content.ts"],"sourcesContent":["import { Referencable, Reference, ReferenceType } from '@bessemer/cornerstone/reference'\nimport { NominalType } from '@bessemer/cornerstone/types'\nimport { AbstractApplicationContext } from '@bessemer/cornerstone/context'\nimport { Arrays, Objects, References, Tags, Ulids, Zod } from '@bessemer/cornerstone'\nimport { RichTextJson } from '@bessemer/cornerstone/rich-text'\nimport { Tag } from '@bessemer/cornerstone/tag'\nimport { ZodType } from 'zod'\n\nexport type ContentSector = NominalType<string, 'ContentSector'>\nexport const ContentSectorSchema: ZodType<ContentSector> = Zod.string()\n\nexport type ContentKey = NominalType<string, 'ContentKey'>\nexport const ContentKeySchema: ZodType<ContentKey> = Zod.string()\n\nexport type ContentType<Data = unknown> = NominalType<string, ['ContentType', Data]>\nexport const ContentTypeSchema: ZodType<ContentType> = Zod.string()\n\nexport type ContentReference = Reference<'Content'>\n\ntype ContentDataType<Type> = Type extends ContentType<infer Data> ? Data : never\n\nexport const ContentDataSchema = Zod.object({\n key: ContentKeySchema,\n type: ContentTypeSchema,\n data: Zod.unknown(),\n sector: ContentSectorSchema.nullable(),\n})\n\nexport type ContentData<Type extends ContentType = ContentType, Data = ContentDataType<Type>> = Referencable<ContentReference> & {\n key: ContentKey\n type: Type\n data: Data\n sector: ContentSector | null\n}\n\nexport type ContentTypeConstructor<Content extends ContentData> = Content['type']\n\nexport type ContentDisplayType = NominalType<string, 'ContentDisplayType'>\n\nexport namespace ContentDisplayTypes {\n export const Default: ContentDisplayType = 'Default'\n export const Label: ContentDisplayType = 'Label'\n export const Desktop: ContentDisplayType = 'Desktop'\n export const Mobile: ContentDisplayType = 'Mobile'\n export const Modal: ContentDisplayType = 'Modal'\n export const Tooltip: ContentDisplayType = 'Tooltip'\n}\n\nexport const TextContentType: ContentType<RichTextJson> = 'Text'\nexport type TextContent = ContentData<typeof TextContentType>\n\nexport interface ContentProvider<ContextType extends AbstractApplicationContext = AbstractApplicationContext> {\n fetchContentByIds: (references: Array<ReferenceType<ContentReference>>, context: ContextType) => Promise<Array<ContentData>>\n\n fetchContentByKeys: (keys: Array<ContentKey>, tags: Array<Tag>, context: ContextType) => Promise<Array<ContentData>>\n\n fetchContentBySectors: (sectors: Array<ContentSector>, tags: Array<Tag>, context: ContextType) => Promise<Array<ContentData>>\n}\n\nexport type ContentNormalizer<\n ApplicationContext extends AbstractApplicationContext = AbstractApplicationContext,\n Type extends ContentData = ContentData\n> = {\n type: Type['type']\n normalize: (data: Array<ContentData>, context: ApplicationContext) => Promise<Array<Type>>\n}\n\n// TODO might be more efficient to put the normalizers in a map at some point\nexport const normalizeContent = async <ApplicationContext extends AbstractApplicationContext>(\n content: Array<ContentData>,\n normalizers: Array<ContentNormalizer<ApplicationContext>>,\n context: ApplicationContext\n): Promise<Array<ContentData>> => {\n const groupedContent = Arrays.groupBy(content, (it) => it.type)\n const normalizedGroupedContent = Object.entries(groupedContent).map(async ([type, values]) => {\n const normalizer = normalizers.find((it) => it.type === type)\n if (Objects.isNil(normalizer)) {\n return values\n }\n\n return await normalizer.normalize(values, context)\n })\n\n const normalizedContent = (await Promise.all(normalizedGroupedContent)).flatMap((it) => it)\n return normalizedContent\n}\n\nexport type StaticContentData<Type extends ContentType = ContentType, Data = ContentDataType<Type>> = ContentData<Type, Data> & {\n tags: Array<Tag>\n}\n\nexport const staticData = <Type extends ContentType = ContentType, Data = ContentDataType<Type>>(\n key: ContentKey,\n type: Type,\n data: Data,\n options?: { tags?: Array<Tag>; sector?: ContentSector }\n): StaticContentData<Type, Data> => {\n return {\n reference: References.reference(Ulids.generateString(), 'Content'),\n key,\n type,\n data,\n tags: options?.tags ?? [],\n sector: options?.sector ?? null,\n }\n}\n\nexport const staticProvider = <ApplicationContext extends AbstractApplicationContext>(\n content: Array<StaticContentData>,\n normalizers?: Array<ContentNormalizer<ApplicationContext>>\n): ContentProvider<ApplicationContext> => {\n return {\n async fetchContentByIds(references: Array<ReferenceType<ContentReference>>, context: ApplicationContext): Promise<Array<ContentData>> {\n const matchingContent = content.filter((it) => Arrays.contains(references, it.reference))\n return normalizeContent(matchingContent, normalizers ?? [], context)\n },\n async fetchContentByKeys(keys: Array<ContentKey>, tags: Array<Tag>, context: ApplicationContext): Promise<Array<ContentData>> {\n const matchingContent = content.filter((it) => Arrays.contains(keys, it.key))\n\n const resolvedContent = Object.values(Arrays.groupBy(matchingContent, (it) => it.key)).map((it) => {\n const resolvedContent = Tags.resolveBy(it, (it) => it.tags ?? [], tags)\n return Arrays.first(resolvedContent)!\n })\n\n return normalizeContent(resolvedContent, normalizers ?? [], context)\n },\n async fetchContentBySectors(sectors: Array<ContentSector>, tags: Array<Tag>, context: ApplicationContext): Promise<Array<ContentData>> {\n const matchingContent = content.filter((it) => Objects.isPresent(it.sector)).filter((it) => Arrays.contains(sectors, it.sector!))\n\n const resolvedContent = Object.values(Arrays.groupBy(matchingContent, (it) => it.key)).map((it) => {\n const resolvedContent = Tags.resolveBy(it, (it) => it.tags ?? [], tags)\n return Arrays.first(resolvedContent)!\n })\n\n return normalizeContent(resolvedContent, normalizers ?? [], context)\n },\n }\n}\n"],"mappings":";AAGA,SAAS,QAAQ,SAAS,YAAY,MAAM,OAAO,WAAW;AAMvD,IAAM,sBAA8C,IAAI,OAAO;AAG/D,IAAM,mBAAwC,IAAI,OAAO;AAGzD,IAAM,oBAA0C,IAAI,OAAO;AAM3D,IAAM,oBAAoB,IAAI,OAAO;AAAA,EAC1C,KAAK;AAAA,EACL,MAAM;AAAA,EACN,MAAM,IAAI,QAAQ;AAAA,EAClB,QAAQ,oBAAoB,SAAS;AACvC,CAAC;AAaM,IAAU;AAAA,CAAV,CAAUA,yBAAV;AACE,EAAMA,qBAAA,UAA8B;AACpC,EAAMA,qBAAA,QAA4B;AAClC,EAAMA,qBAAA,UAA8B;AACpC,EAAMA,qBAAA,SAA6B;AACnC,EAAMA,qBAAA,QAA4B;AAClC,EAAMA,qBAAA,UAA8B;AAAA,GAN5B;AASV,IAAM,kBAA6C;AAoBnD,IAAM,mBAAmB,OAC9B,SACA,aACA,YACgC;AAChC,QAAM,iBAAiB,OAAO,QAAQ,SAAS,CAAC,OAAO,GAAG,IAAI;AAC9D,QAAM,2BAA2B,OAAO,QAAQ,cAAc,EAAE,IAAI,OAAO,CAAC,MAAM,MAAM,MAAM;AAC5F,UAAM,aAAa,YAAY,KAAK,CAAC,OAAO,GAAG,SAAS,IAAI;AAC5D,QAAI,QAAQ,MAAM,UAAU,GAAG;AAC7B,aAAO;AAAA,IACT;AAEA,WAAO,MAAM,WAAW,UAAU,QAAQ,OAAO;AAAA,EACnD,CAAC;AAED,QAAM,qBAAqB,MAAM,QAAQ,IAAI,wBAAwB,GAAG,QAAQ,CAAC,OAAO,EAAE;AAC1F,SAAO;AACT;AAMO,IAAM,aAAa,CACxB,KACA,MACA,MACA,YACkC;AAClC,SAAO;AAAA,IACL,WAAW,WAAW,UAAU,MAAM,eAAe,GAAG,SAAS;AAAA,IACjE;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM,SAAS,QAAQ,CAAC;AAAA,IACxB,QAAQ,SAAS,UAAU;AAAA,EAC7B;AACF;AAEO,IAAM,iBAAiB,CAC5B,SACA,gBACwC;AACxC,SAAO;AAAA,IACL,MAAM,kBAAkB,YAAoD,SAA0D;AACpI,YAAM,kBAAkB,QAAQ,OAAO,CAAC,OAAO,OAAO,SAAS,YAAY,GAAG,SAAS,CAAC;AACxF,aAAO,iBAAiB,iBAAiB,eAAe,CAAC,GAAG,OAAO;AAAA,IACrE;AAAA,IACA,MAAM,mBAAmB,MAAyB,MAAkB,SAA0D;AAC5H,YAAM,kBAAkB,QAAQ,OAAO,CAAC,OAAO,OAAO,SAAS,MAAM,GAAG,GAAG,CAAC;AAE5E,YAAM,kBAAkB,OAAO,OAAO,OAAO,QAAQ,iBAAiB,CAAC,OAAO,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO;AACjG,cAAMC,mBAAkB,KAAK,UAAU,IAAI,CAACC,QAAOA,IAAG,QAAQ,CAAC,GAAG,IAAI;AACtE,eAAO,OAAO,MAAMD,gBAAe;AAAA,MACrC,CAAC;AAED,aAAO,iBAAiB,iBAAiB,eAAe,CAAC,GAAG,OAAO;AAAA,IACrE;AAAA,IACA,MAAM,sBAAsB,SAA+B,MAAkB,SAA0D;AACrI,YAAM,kBAAkB,QAAQ,OAAO,CAAC,OAAO,QAAQ,UAAU,GAAG,MAAM,CAAC,EAAE,OAAO,CAAC,OAAO,OAAO,SAAS,SAAS,GAAG,MAAO,CAAC;AAEhI,YAAM,kBAAkB,OAAO,OAAO,OAAO,QAAQ,iBAAiB,CAAC,OAAO,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO;AACjG,cAAMA,mBAAkB,KAAK,UAAU,IAAI,CAACC,QAAOA,IAAG,QAAQ,CAAC,GAAG,IAAI;AACtE,eAAO,OAAO,MAAMD,gBAAe;AAAA,MACrC,CAAC;AAED,aAAO,iBAAiB,iBAAiB,eAAe,CAAC,GAAG,OAAO;AAAA,IACrE;AAAA,EACF;AACF;","names":["ContentDisplayTypes","resolvedContent","it"]}
1
+ {"version":3,"sources":["../src/content.ts"],"sourcesContent":["import { Referencable, Reference, ReferenceType } from '@bessemer/cornerstone/reference'\nimport { NominalType } from '@bessemer/cornerstone/types'\nimport { AbstractApplicationContext } from '@bessemer/cornerstone/context'\nimport { Arrays, Objects, References, Tags, Ulids } from '@bessemer/cornerstone'\nimport { RichTextJson } from '@bessemer/cornerstone/rich-text'\nimport { Tag } from '@bessemer/cornerstone/tag'\nimport Zod, { ZodType } from 'zod'\n\nexport type ContentSector = NominalType<string, 'ContentSector'>\nexport const ContentSectorSchema: ZodType<ContentSector> = Zod.string()\n\nexport type ContentKey = NominalType<string, 'ContentKey'>\nexport const ContentKeySchema: ZodType<ContentKey> = Zod.string()\n\nexport type ContentType<Data = unknown> = NominalType<string, ['ContentType', Data]>\nexport const ContentTypeSchema: ZodType<ContentType> = Zod.string()\n\nexport type ContentReference = Reference<'Content'>\n\ntype ContentDataType<Type> = Type extends ContentType<infer Data> ? Data : never\n\nexport const ContentDataSchema = Zod.object({\n key: ContentKeySchema,\n type: ContentTypeSchema,\n data: Zod.unknown(),\n sector: ContentSectorSchema.nullable(),\n})\n\nexport type ContentData<Type extends ContentType = ContentType, Data = ContentDataType<Type>> = Referencable<ContentReference> & {\n key: ContentKey\n type: Type\n data: Data\n sector: ContentSector | null\n}\n\nexport type ContentTypeConstructor<Content extends ContentData> = Content['type']\n\nexport type ContentDisplayType = NominalType<string, 'ContentDisplayType'>\n\nexport namespace ContentDisplayTypes {\n export const Default: ContentDisplayType = 'Default'\n export const Label: ContentDisplayType = 'Label'\n export const Desktop: ContentDisplayType = 'Desktop'\n export const Mobile: ContentDisplayType = 'Mobile'\n export const Modal: ContentDisplayType = 'Modal'\n export const Tooltip: ContentDisplayType = 'Tooltip'\n}\n\nexport const TextContentType: ContentType<RichTextJson> = 'Text'\nexport type TextContent = ContentData<typeof TextContentType>\n\nexport interface ContentProvider<ContextType extends AbstractApplicationContext = AbstractApplicationContext> {\n fetchContentByIds: (references: Array<ReferenceType<ContentReference>>, context: ContextType) => Promise<Array<ContentData>>\n\n fetchContentByKeys: (keys: Array<ContentKey>, tags: Array<Tag>, context: ContextType) => Promise<Array<ContentData>>\n\n fetchContentBySectors: (sectors: Array<ContentSector>, tags: Array<Tag>, context: ContextType) => Promise<Array<ContentData>>\n}\n\nexport type ContentNormalizer<\n ApplicationContext extends AbstractApplicationContext = AbstractApplicationContext,\n Type extends ContentData = ContentData\n> = {\n type: Type['type']\n normalize: (data: Array<ContentData>, context: ApplicationContext) => Promise<Array<Type>>\n}\n\n// TODO might be more efficient to put the normalizers in a map at some point\nexport const normalizeContent = async <ApplicationContext extends AbstractApplicationContext>(\n content: Array<ContentData>,\n normalizers: Array<ContentNormalizer<ApplicationContext>>,\n context: ApplicationContext\n): Promise<Array<ContentData>> => {\n const groupedContent = Arrays.groupBy(content, (it) => it.type)\n const normalizedGroupedContent = Object.entries(groupedContent).map(async ([type, values]) => {\n const normalizer = normalizers.find((it) => it.type === type)\n if (Objects.isNil(normalizer)) {\n return values\n }\n\n return await normalizer.normalize(values, context)\n })\n\n const normalizedContent = (await Promise.all(normalizedGroupedContent)).flatMap((it) => it)\n return normalizedContent\n}\n\nexport type StaticContentData<Type extends ContentType = ContentType, Data = ContentDataType<Type>> = ContentData<Type, Data> & {\n tags: Array<Tag>\n}\n\nexport const staticData = <Type extends ContentType = ContentType, Data = ContentDataType<Type>>(\n key: ContentKey,\n type: Type,\n data: Data,\n options?: { tags?: Array<Tag>; sector?: ContentSector }\n): StaticContentData<Type, Data> => {\n return {\n reference: References.reference(Ulids.generate(), 'Content'),\n key,\n type,\n data,\n tags: options?.tags ?? [],\n sector: options?.sector ?? null,\n }\n}\n\nexport const staticProvider = <ApplicationContext extends AbstractApplicationContext>(\n content: Array<StaticContentData>,\n normalizers?: Array<ContentNormalizer<ApplicationContext>>\n): ContentProvider<ApplicationContext> => {\n return {\n async fetchContentByIds(references: Array<ReferenceType<ContentReference>>, context: ApplicationContext): Promise<Array<ContentData>> {\n const matchingContent = content.filter((it) => Arrays.contains(references, it.reference))\n return normalizeContent(matchingContent, normalizers ?? [], context)\n },\n async fetchContentByKeys(keys: Array<ContentKey>, tags: Array<Tag>, context: ApplicationContext): Promise<Array<ContentData>> {\n const matchingContent = content.filter((it) => Arrays.contains(keys, it.key))\n\n const resolvedContent = Object.values(Arrays.groupBy(matchingContent, (it) => it.key)).map((it) => {\n const resolvedContent = Tags.resolveBy(it, (it) => it.tags ?? [], tags)\n return Arrays.first(resolvedContent)!\n })\n\n return normalizeContent(resolvedContent, normalizers ?? [], context)\n },\n async fetchContentBySectors(sectors: Array<ContentSector>, tags: Array<Tag>, context: ApplicationContext): Promise<Array<ContentData>> {\n const matchingContent = content.filter((it) => Objects.isPresent(it.sector)).filter((it) => Arrays.contains(sectors, it.sector!))\n\n const resolvedContent = Object.values(Arrays.groupBy(matchingContent, (it) => it.key)).map((it) => {\n const resolvedContent = Tags.resolveBy(it, (it) => it.tags ?? [], tags)\n return Arrays.first(resolvedContent)!\n })\n\n return normalizeContent(resolvedContent, normalizers ?? [], context)\n },\n }\n}\n"],"mappings":"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","names":["ContentDisplayTypes","resolvedContent","it"]}
@@ -1,7 +1,7 @@
1
1
  import { TaggedType } from '@bessemer/cornerstone/types';
2
2
  import { ZodType } from 'zod';
3
3
  export type DataSize = TaggedType<number, 'DataSize'>;
4
- export declare const DataSizeSchema: ZodType<DataSize>;
4
+ export declare const Schema: ZodType<DataSize>;
5
5
  export declare const fromBytes: (value: number) => DataSize;
6
6
  export declare const toBytes: (byte: DataSize) => number;
7
7
  export declare const fromKilobytes: (value: number) => DataSize;
@@ -1 +1 @@
1
- {"version":3,"file":"data-size.d.ts","sourceRoot":"","sources":["../src/data-size.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAY,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAElC,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;AACrD,eAAO,MAAM,cAAc,EAAE,OAAO,CAAC,QAAQ,CAAuB,CAAA;AAEpE,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,QAEzC,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,MAAM,QAAQ,KAAG,MAExC,CAAA;AAGD,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,QAE7C,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,MAAM,QAAQ,KAAG,MAE5C,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,QAE7C,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,MAAM,QAAQ,KAAG,MAE5C,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,QAE7C,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,MAAM,QAAQ,KAAG,MAE5C,CAAA;AAGD,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,QAE7C,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,MAAM,QAAQ,KAAG,MAE5C,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,QAE7C,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,MAAM,QAAQ,KAAG,MAE5C,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,QAE7C,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,MAAM,QAAQ,KAAG,MAE5C,CAAA"}
1
+ {"version":3,"file":"data-size.d.ts","sourceRoot":"","sources":["../src/data-size.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAY,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAElC,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;AACrD,eAAO,MAAM,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAuB,CAAA;AAE5D,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,QAEzC,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,MAAM,QAAQ,KAAG,MAExC,CAAA;AAGD,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,QAE7C,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,MAAM,QAAQ,KAAG,MAE5C,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,QAE7C,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,MAAM,QAAQ,KAAG,MAE5C,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,QAE7C,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,MAAM,QAAQ,KAAG,MAE5C,CAAA;AAGD,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,QAE7C,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,MAAM,QAAQ,KAAG,MAE5C,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,QAE7C,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,MAAM,QAAQ,KAAG,MAE5C,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,QAE7C,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,MAAM,QAAQ,KAAG,MAE5C,CAAA"}
package/dist/data-size.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // src/data-size.ts
2
2
  import Zod from "zod";
3
- var DataSizeSchema = Zod.number();
3
+ var Schema = Zod.number();
4
4
  var fromBytes = (value) => {
5
5
  return value;
6
6
  };
@@ -44,7 +44,7 @@ var toGibibytes = (byte) => {
44
44
  return toMebibytes(byte) / 1024;
45
45
  };
46
46
  export {
47
- DataSizeSchema,
47
+ Schema,
48
48
  fromBytes,
49
49
  fromGibibytes,
50
50
  fromGigabytes,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/data-size.ts"],"sourcesContent":["import { TaggedType } from '@bessemer/cornerstone/types'\nimport Zod, { ZodType } from 'zod'\n\nexport type DataSize = TaggedType<number, 'DataSize'>\nexport const DataSizeSchema: ZodType<DataSize> = Zod.number() as any\n\nexport const fromBytes = (value: number): DataSize => {\n return value as DataSize\n}\n\nexport const toBytes = (byte: DataSize): number => {\n return byte\n}\n\n// === SI (Decimal) Units ===\nexport const fromKilobytes = (value: number): DataSize => {\n return fromBytes(value * 1000)\n}\n\nexport const toKilobytes = (byte: DataSize): number => {\n return toBytes(byte) / 1000\n}\n\nexport const fromMegabytes = (value: number): DataSize => {\n return fromKilobytes(value * 1000)\n}\n\nexport const toMegabytes = (byte: DataSize): number => {\n return toKilobytes(byte) / 1000\n}\n\nexport const fromGigabytes = (value: number): DataSize => {\n return fromMegabytes(value * 1000)\n}\n\nexport const toGigabytes = (byte: DataSize): number => {\n return toMegabytes(byte) / 1000\n}\n\n// === IEC (Binary) Units ===\nexport const fromKibibytes = (value: number): DataSize => {\n return fromBytes(value * 1024)\n}\n\nexport const toKibibytes = (byte: DataSize): number => {\n return toBytes(byte) / 1024\n}\n\nexport const fromMebibytes = (value: number): DataSize => {\n return fromKibibytes(value * 1024)\n}\n\nexport const toMebibytes = (byte: DataSize): number => {\n return toKibibytes(byte) / 1024\n}\n\nexport const fromGibibytes = (value: number): DataSize => {\n return fromMebibytes(value * 1024)\n}\n\nexport const toGibibytes = (byte: DataSize): number => {\n return toMebibytes(byte) / 1024\n}\n"],"mappings":";AACA,OAAO,SAAsB;AAGtB,IAAM,iBAAoC,IAAI,OAAO;AAErD,IAAM,YAAY,CAAC,UAA4B;AACpD,SAAO;AACT;AAEO,IAAM,UAAU,CAAC,SAA2B;AACjD,SAAO;AACT;AAGO,IAAM,gBAAgB,CAAC,UAA4B;AACxD,SAAO,UAAU,QAAQ,GAAI;AAC/B;AAEO,IAAM,cAAc,CAAC,SAA2B;AACrD,SAAO,QAAQ,IAAI,IAAI;AACzB;AAEO,IAAM,gBAAgB,CAAC,UAA4B;AACxD,SAAO,cAAc,QAAQ,GAAI;AACnC;AAEO,IAAM,cAAc,CAAC,SAA2B;AACrD,SAAO,YAAY,IAAI,IAAI;AAC7B;AAEO,IAAM,gBAAgB,CAAC,UAA4B;AACxD,SAAO,cAAc,QAAQ,GAAI;AACnC;AAEO,IAAM,cAAc,CAAC,SAA2B;AACrD,SAAO,YAAY,IAAI,IAAI;AAC7B;AAGO,IAAM,gBAAgB,CAAC,UAA4B;AACxD,SAAO,UAAU,QAAQ,IAAI;AAC/B;AAEO,IAAM,cAAc,CAAC,SAA2B;AACrD,SAAO,QAAQ,IAAI,IAAI;AACzB;AAEO,IAAM,gBAAgB,CAAC,UAA4B;AACxD,SAAO,cAAc,QAAQ,IAAI;AACnC;AAEO,IAAM,cAAc,CAAC,SAA2B;AACrD,SAAO,YAAY,IAAI,IAAI;AAC7B;AAEO,IAAM,gBAAgB,CAAC,UAA4B;AACxD,SAAO,cAAc,QAAQ,IAAI;AACnC;AAEO,IAAM,cAAc,CAAC,SAA2B;AACrD,SAAO,YAAY,IAAI,IAAI;AAC7B;","names":[]}
1
+ {"version":3,"sources":["../src/data-size.ts"],"sourcesContent":["import { TaggedType } from '@bessemer/cornerstone/types'\nimport Zod, { ZodType } from 'zod'\n\nexport type DataSize = TaggedType<number, 'DataSize'>\nexport const Schema: ZodType<DataSize> = Zod.number() as any\n\nexport const fromBytes = (value: number): DataSize => {\n return value as DataSize\n}\n\nexport const toBytes = (byte: DataSize): number => {\n return byte\n}\n\n// === SI (Decimal) Units ===\nexport const fromKilobytes = (value: number): DataSize => {\n return fromBytes(value * 1000)\n}\n\nexport const toKilobytes = (byte: DataSize): number => {\n return toBytes(byte) / 1000\n}\n\nexport const fromMegabytes = (value: number): DataSize => {\n return fromKilobytes(value * 1000)\n}\n\nexport const toMegabytes = (byte: DataSize): number => {\n return toKilobytes(byte) / 1000\n}\n\nexport const fromGigabytes = (value: number): DataSize => {\n return fromMegabytes(value * 1000)\n}\n\nexport const toGigabytes = (byte: DataSize): number => {\n return toMegabytes(byte) / 1000\n}\n\n// === IEC (Binary) Units ===\nexport const fromKibibytes = (value: number): DataSize => {\n return fromBytes(value * 1024)\n}\n\nexport const toKibibytes = (byte: DataSize): number => {\n return toBytes(byte) / 1024\n}\n\nexport const fromMebibytes = (value: number): DataSize => {\n return fromKibibytes(value * 1024)\n}\n\nexport const toMebibytes = (byte: DataSize): number => {\n return toKibibytes(byte) / 1024\n}\n\nexport const fromGibibytes = (value: number): DataSize => {\n return fromMebibytes(value * 1024)\n}\n\nexport const toGibibytes = (byte: DataSize): number => {\n return toMebibytes(byte) / 1024\n}\n"],"mappings":";AACA,OAAO,SAAsB;AAGtB,IAAM,SAA4B,IAAI,OAAO;AAE7C,IAAM,YAAY,CAAC,UAA4B;AACpD,SAAO;AACT;AAEO,IAAM,UAAU,CAAC,SAA2B;AACjD,SAAO;AACT;AAGO,IAAM,gBAAgB,CAAC,UAA4B;AACxD,SAAO,UAAU,QAAQ,GAAI;AAC/B;AAEO,IAAM,cAAc,CAAC,SAA2B;AACrD,SAAO,QAAQ,IAAI,IAAI;AACzB;AAEO,IAAM,gBAAgB,CAAC,UAA4B;AACxD,SAAO,cAAc,QAAQ,GAAI;AACnC;AAEO,IAAM,cAAc,CAAC,SAA2B;AACrD,SAAO,YAAY,IAAI,IAAI;AAC7B;AAEO,IAAM,gBAAgB,CAAC,UAA4B;AACxD,SAAO,cAAc,QAAQ,GAAI;AACnC;AAEO,IAAM,cAAc,CAAC,SAA2B;AACrD,SAAO,YAAY,IAAI,IAAI;AAC7B;AAGO,IAAM,gBAAgB,CAAC,UAA4B;AACxD,SAAO,UAAU,QAAQ,IAAI;AAC/B;AAEO,IAAM,cAAc,CAAC,SAA2B;AACrD,SAAO,QAAQ,IAAI,IAAI;AACzB;AAEO,IAAM,gBAAgB,CAAC,UAA4B;AACxD,SAAO,cAAc,QAAQ,IAAI;AACnC;AAEO,IAAM,cAAc,CAAC,SAA2B;AACrD,SAAO,YAAY,IAAI,IAAI;AAC7B;AAEO,IAAM,gBAAgB,CAAC,UAA4B;AACxD,SAAO,cAAc,QAAQ,IAAI;AACnC;AAEO,IAAM,cAAc,CAAC,SAA2B;AACrD,SAAO,YAAY,IAAI,IAAI;AAC7B;","names":[]}
package/dist/date.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { addHours as _addHours, addMilliseconds as _addMilliseconds, isAfter as _isAfter, isBefore as _isBefore } from 'date-fns';
2
2
  import { Duration } from '@bessemer/cornerstone/duration';
3
3
  import Zod from 'zod';
4
- export declare const buildSchema: (fieldName: string) => Zod.ZodEffects<Zod.ZodUnion<[Zod.ZodString, Zod.ZodDate]>, Date, string | Date>;
4
+ export declare const Schema: Zod.ZodEffects<Zod.ZodUnion<[Zod.ZodString, Zod.ZodDate]>, Date, string | Date>;
5
5
  export declare const isDate: (value?: any) => value is Date;
6
6
  export declare const now: () => Date;
7
7
  export declare const of: (dateString: string) => Date;
@@ -1 +1 @@
1
- {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../src/date.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,SAAS,EAAE,eAAe,IAAI,gBAAgB,EAAE,OAAO,IAAI,QAAQ,EAAE,QAAQ,IAAI,SAAS,EAAY,MAAM,UAAU,CAAA;AAE3I,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAA;AAEzD,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,eAAO,MAAM,WAAW,GAAI,WAAW,MAAM,oFAqB5C,CAAA;AAED,eAAO,MAAM,MAAM,gCAAU,CAAA;AAE7B,eAAO,MAAM,GAAG,QAAO,IAEtB,CAAA;AAED,eAAO,MAAM,EAAE,GAAI,YAAY,MAAM,KAAG,IAEvC,CAAA;AAED,eAAO,MAAM,eAAe,yBAAmB,CAAA;AAC/C,eAAO,MAAM,QAAQ,kBAAY,CAAA;AACjC,eAAO,MAAM,QAAQ,kBAAY,CAAA;AACjC,eAAO,MAAM,OAAO,iBAAW,CAAA;AAE/B,eAAO,MAAM,WAAW,GAAI,MAAM,IAAI,EAAE,UAAU,QAAQ,KAAG,IAAiE,CAAA"}
1
+ {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../src/date.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,SAAS,EAAE,eAAe,IAAI,gBAAgB,EAAE,OAAO,IAAI,QAAQ,EAAE,QAAQ,IAAI,SAAS,EAAY,MAAM,UAAU,CAAA;AAE3I,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAA;AAEzD,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,eAAO,MAAM,MAAM,iFAYjB,CAAA;AAEF,eAAO,MAAM,MAAM,gCAAU,CAAA;AAE7B,eAAO,MAAM,GAAG,QAAO,IAEtB,CAAA;AAED,eAAO,MAAM,EAAE,GAAI,YAAY,MAAM,KAAG,IAEvC,CAAA;AAED,eAAO,MAAM,eAAe,yBAAmB,CAAA;AAC/C,eAAO,MAAM,QAAQ,kBAAY,CAAA;AACjC,eAAO,MAAM,QAAQ,kBAAY,CAAA;AACjC,eAAO,MAAM,OAAO,iBAAW,CAAA;AAE/B,eAAO,MAAM,WAAW,GAAI,MAAM,IAAI,EAAE,UAAU,QAAQ,KAAG,IAAiE,CAAA"}
package/dist/date.js CHANGED
@@ -3,25 +3,16 @@ import { addHours as _addHours, addMilliseconds as _addMilliseconds, isAfter as
3
3
  import { isDate as _isDate } from "lodash-es";
4
4
  import { Durations } from "@bessemer/cornerstone";
5
5
  import Zod from "zod";
6
- var buildSchema = (fieldName) => {
7
- return Zod.union([
8
- Zod.string({
9
- required_error: `${fieldName} is required`
10
- }).trim().regex(
11
- /^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:\d{2})?)?$/,
12
- `${fieldName} is an invalid Date. Use YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS.sssZ`
13
- ),
14
- Zod.date({
15
- required_error: `${fieldName} is required`
16
- })
17
- ]).transform((isoString) => {
18
- const date = new Date(isoString);
19
- if (isNaN(date.getTime())) {
20
- throw new Error("Invalid date");
21
- }
22
- return date;
23
- });
24
- };
6
+ var Schema = Zod.union([
7
+ Zod.string().trim().regex(/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:\d{2})?)?$/, `Invalid Date. Use YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS.sssZ`),
8
+ Zod.date()
9
+ ]).transform((isoString) => {
10
+ const date = new Date(isoString);
11
+ if (isNaN(date.getTime())) {
12
+ throw new Error("Invalid date");
13
+ }
14
+ return date;
15
+ });
25
16
  var isDate = _isDate;
26
17
  var now = () => {
27
18
  return /* @__PURE__ */ new Date();
@@ -35,10 +26,10 @@ var isBefore = _isBefore;
35
26
  var isAfter = _isAfter;
36
27
  var addDuration = (date, duration) => addMilliseconds(date, Durations.toMilliseconds(duration));
37
28
  export {
29
+ Schema,
38
30
  addDuration,
39
31
  addHours,
40
32
  addMilliseconds,
41
- buildSchema,
42
33
  isAfter,
43
34
  isBefore,
44
35
  isDate,