@bessemer/cornerstone 0.5.83 → 0.5.85

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cache.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { AbstractLocalKeyValueStore, AbstractRemoteKeyValueStore, LocalKeyValueStore, RemoteKeyValueStore } from '@bessemer/cornerstone/store';
2
2
  import { Duration } from '@bessemer/cornerstone/duration';
3
- import { ResourceKey, ResourceNamespace } from '@bessemer/cornerstone/resource';
3
+ import { ResourceKey, ResourceNamespace } from '@bessemer/cornerstone/resource-key';
4
4
  import { AbstractApplicationContext } from '@bessemer/cornerstone/context';
5
5
  import { NominalType } from '@bessemer/cornerstone/types';
6
6
  import { RecordEntry } from '@bessemer/cornerstone/entry';
@@ -16,10 +16,6 @@ export type CacheOptions = Partial<CacheProps>;
16
16
  export declare namespace CacheProps {
17
17
  const buildCacheProps: (options?: CacheOptions) => CacheProps;
18
18
  }
19
- export declare namespace CacheKey {
20
- const disableCaching: () => ResourceNamespace;
21
- const isDisabled: (key: ResourceNamespace) => boolean;
22
- }
23
19
  export type CacheSector = {
24
20
  globs: Array<GlobPattern>;
25
21
  };
@@ -31,16 +27,22 @@ export declare namespace CacheSector {
31
27
  }
32
28
  export type CacheName = NominalType<string, 'CacheName'>;
33
29
  export declare const CacheNameSchema: ZodType<CacheName>;
34
- export interface AbstractCache<T> {
35
- name: CacheName;
36
- }
37
30
  export interface Cache<T> extends AbstractCache<T> {
38
- fetchValue(namespace: ResourceNamespace, key: ResourceKey, fetch: () => Promise<T>): Promise<T>;
39
- fetchValues(namespace: ResourceNamespace, keys: Array<ResourceKey>, fetch: (keys: Array<ResourceKey>) => Promise<Array<RecordEntry<T>>>): Promise<Array<RecordEntry<T>>>;
40
- writeValue(namespace: ResourceNamespace, key: ResourceKey, value: T | undefined): Promise<void>;
41
- writeValues(namespace: ResourceNamespace, entries: Array<RecordEntry<T | undefined>>): Promise<void>;
31
+ name: CacheName;
32
+ fetchValue(key: ResourceKey, fetch: () => Promise<T>): Promise<T>;
33
+ fetchValues(keys: Array<ResourceKey>, fetch: (keys: Array<ResourceKey>) => Promise<Array<RecordEntry<T>>>): Promise<Array<RecordEntry<T>>>;
34
+ writeValue(key: ResourceKey, value: T | undefined): Promise<void>;
35
+ writeValues(entries: Array<RecordEntry<T | undefined>>): Promise<void>;
42
36
  evictAll(sector: CacheSector): Promise<void>;
43
37
  }
38
+ export declare abstract class AbstractCache<T> implements Cache<T> {
39
+ abstract name: CacheName;
40
+ fetchValue: (key: ResourceKey, fetch: () => Promise<T>) => Promise<T>;
41
+ abstract fetchValues(keys: Array<ResourceKey>, fetch: (keys: Array<ResourceKey>) => Promise<RecordEntry<T>[]>): Promise<RecordEntry<T>[]>;
42
+ writeValue: (key: ResourceKey, value: T | undefined) => Promise<void>;
43
+ abstract writeValues(entries: RecordEntry<T | undefined>[]): Promise<void>;
44
+ abstract evictAll(sector: CacheSector): Promise<void>;
45
+ }
44
46
  export interface CacheProvider<T> extends RemoteKeyValueStore<CacheEntry<T>> {
45
47
  type: CacheProviderType;
46
48
  evictAll(sector: CacheSector): Promise<void>;
@@ -49,11 +51,12 @@ export declare abstract class AbstractCacheProvider<T> extends AbstractRemoteKey
49
51
  abstract type: CacheProviderType;
50
52
  abstract evictAll(sector: CacheSector): Promise<void>;
51
53
  }
52
- export interface LocalCache<T> extends AbstractCache<T> {
53
- getValue(namespace: ResourceNamespace, key: ResourceKey, fetch: () => T): T;
54
- getValues(namespace: ResourceNamespace, keys: Array<ResourceKey>, fetch: (keys: Array<ResourceKey>) => Array<RecordEntry<T>>): Array<RecordEntry<T>>;
55
- setValue(namespace: ResourceNamespace, key: ResourceKey, value: T | undefined): void;
56
- setValues(namespace: ResourceNamespace, entries: Array<RecordEntry<T | undefined>>): void;
54
+ export interface LocalCache<T> {
55
+ name: CacheName;
56
+ getValue(key: ResourceKey, fetch: () => T): T;
57
+ getValues(keys: Array<ResourceKey>, fetch: (keys: Array<ResourceKey>) => Array<RecordEntry<T>>): Array<RecordEntry<T>>;
58
+ setValue(key: ResourceKey, value: T | undefined): void;
59
+ setValues(entries: Array<RecordEntry<T | undefined>>): void;
57
60
  removeAll(sector: CacheSector): void;
58
61
  }
59
62
  export interface LocalCacheProvider<T> extends LocalKeyValueStore<CacheEntry<T>>, CacheProvider<T> {
@@ -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":"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"}
package/dist/cache.js CHANGED
@@ -1,12 +1,11 @@
1
1
  // src/cache.ts
2
2
  import { AbstractLocalKeyValueStore, AbstractRemoteKeyValueStore } from "@bessemer/cornerstone/store";
3
3
  import { OneDay, OneHour, toMilliseconds } from "@bessemer/cornerstone/duration";
4
- import { ResourceKey } from "@bessemer/cornerstone/resource";
5
4
  import Zod from "zod";
6
5
  import { deepMerge, isNil } from "@bessemer/cornerstone/object";
7
- import { contains } from "@bessemer/cornerstone/string";
8
6
  import { toArray } from "@bessemer/cornerstone/array";
9
7
  import { addMilliseconds, isBefore, now } from "@bessemer/cornerstone/date";
8
+ import { Arrays, Entries, ResourceKeys } from "@bessemer/cornerstone/index";
10
9
  var CacheProps;
11
10
  ((CacheProps2) => {
12
11
  const DefaultCacheProps = {
@@ -23,26 +22,27 @@ var CacheProps;
23
22
  return props;
24
23
  };
25
24
  })(CacheProps || (CacheProps = {}));
26
- var CacheKey;
27
- ((CacheKey2) => {
28
- const DisableCacheToken = "f6822c1a-d527-4c65-b9dd-ddc24620b684";
29
- CacheKey2.disableCaching = () => {
30
- return DisableCacheToken;
31
- };
32
- CacheKey2.isDisabled = (key) => {
33
- return contains(key, DisableCacheToken);
34
- };
35
- })(CacheKey || (CacheKey = {}));
36
25
  var CacheSector;
37
26
  ((CacheSector2) => {
38
27
  CacheSector2.of = (globs) => {
39
28
  return { globs: toArray(globs) };
40
29
  };
41
30
  CacheSector2.namespace = (namespace2, sector) => {
42
- return { globs: ResourceKey.namespaceAll(namespace2, sector.globs) };
31
+ return { globs: ResourceKeys.applyNamespaceAll(namespace2, sector.globs) };
43
32
  };
44
33
  })(CacheSector || (CacheSector = {}));
45
34
  var CacheNameSchema = Zod.string();
35
+ var AbstractCache = class {
36
+ fetchValue = async (key, fetch) => {
37
+ const results = await this.fetchValues([key], async () => {
38
+ return [Entries.of(key, await fetch())];
39
+ });
40
+ return Arrays.first(results)[1];
41
+ };
42
+ writeValue = async (key, value) => {
43
+ await this.writeValues([Entries.of(key, value)]);
44
+ };
45
+ };
46
46
  var AbstractCacheProvider = class extends AbstractRemoteKeyValueStore {
47
47
  };
48
48
  var AbstractLocalCacheProvider = class extends AbstractLocalKeyValueStore {
@@ -106,10 +106,10 @@ var CacheEntry;
106
106
  };
107
107
  })(CacheEntry || (CacheEntry = {}));
108
108
  export {
109
+ AbstractCache,
109
110
  AbstractCacheProvider,
110
111
  AbstractLocalCacheProvider,
111
112
  CacheEntry,
112
- CacheKey,
113
113
  CacheNameSchema,
114
114
  CacheProps,
115
115
  CacheSector
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 { Duration, OneDay, OneHour, toMilliseconds } from '@bessemer/cornerstone/duration'\nimport { ResourceKey, ResourceNamespace } from '@bessemer/cornerstone/resource'\nimport { AbstractApplicationContext } from '@bessemer/cornerstone/context'\nimport { NominalType } from '@bessemer/cornerstone/types'\nimport { RecordEntry } from '@bessemer/cornerstone/entry'\nimport { GlobPattern } from '@bessemer/cornerstone/glob'\nimport { Arrayable } from 'type-fest'\nimport Zod, { ZodType } from 'zod'\nimport { deepMerge, isNil } from '@bessemer/cornerstone/object'\nimport { contains } from '@bessemer/cornerstone/string'\nimport { toArray } from '@bessemer/cornerstone/array'\nimport { addMilliseconds, isBefore, now } from '@bessemer/cornerstone/date'\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: OneDay,\n timeToStale: OneHour,\n }\n\n export const buildCacheProps = (options?: CacheOptions): CacheProps => {\n options = options ?? {}\n\n const props = 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 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: 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<RecordEntry<T>>>\n ): Promise<Array<RecordEntry<T>>>\n\n writeValue(namespace: ResourceNamespace, key: ResourceKey, value: T | undefined): Promise<void>\n\n writeValues(namespace: ResourceNamespace, entries: Array<RecordEntry<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<RecordEntry<T>>): Array<RecordEntry<T>>\n\n setValue(namespace: ResourceNamespace, key: ResourceKey, value: T | undefined): void\n\n setValues(namespace: ResourceNamespace, entries: Array<RecordEntry<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 (isNil(entry)) {\n return true\n }\n\n if (isNil(entry.liveTimestamp)) {\n return false\n }\n\n return isBefore(entry.liveTimestamp, 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 (isNil(entry.staleTimestamp)) {\n return false\n }\n\n return isBefore(entry.staleTimestamp, 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 (!isNil(props.timeToLive)) {\n const limit = addMilliseconds(now(), toMilliseconds(props.timeToLive))\n if (isBefore(limit, liveTimestamp ?? limit)) {\n liveTimestamp = limit\n }\n }\n\n let staleTimestamp: Date | null = originalEntry.staleTimestamp\n if (!isNil(props.timeToStale)) {\n const limit = addMilliseconds(now(), toMilliseconds(props.timeToStale))\n if (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 { Duration, OneDay, OneHour, toMilliseconds } from '@bessemer/cornerstone/duration'\nimport { ResourceKey, ResourceNamespace } from '@bessemer/cornerstone/resource-key'\nimport { AbstractApplicationContext } from '@bessemer/cornerstone/context'\nimport { NominalType } from '@bessemer/cornerstone/types'\nimport { RecordEntry } from '@bessemer/cornerstone/entry'\nimport { GlobPattern } from '@bessemer/cornerstone/glob'\nimport { Arrayable } from 'type-fest'\nimport Zod, { ZodType } from 'zod'\nimport { deepMerge, isNil } from '@bessemer/cornerstone/object'\nimport { toArray } from '@bessemer/cornerstone/array'\nimport { addMilliseconds, isBefore, now } from '@bessemer/cornerstone/date'\nimport { Arrays, Entries, ResourceKeys } from '@bessemer/cornerstone/index'\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: OneDay,\n timeToStale: OneHour,\n }\n\n export const buildCacheProps = (options?: CacheOptions): CacheProps => {\n options = options ?? {}\n\n const props = 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 type CacheSector = {\n globs: Array<GlobPattern>\n}\n\nexport namespace CacheSector {\n export const of = (globs: Arrayable<GlobPattern>) => {\n return { globs: toArray(globs) }\n }\n\n export const namespace = (namespace: ResourceNamespace, sector: CacheSector): CacheSector => {\n return { globs: ResourceKeys.applyNamespaceAll(namespace, sector.globs) }\n }\n}\n\nexport type CacheName = NominalType<string, 'CacheName'>\nexport const CacheNameSchema: ZodType<CacheName> = Zod.string()\n\nexport interface Cache<T> extends AbstractCache<T> {\n name: CacheName\n\n fetchValue(key: ResourceKey, fetch: () => Promise<T>): Promise<T>\n\n fetchValues(keys: Array<ResourceKey>, fetch: (keys: Array<ResourceKey>) => Promise<Array<RecordEntry<T>>>): Promise<Array<RecordEntry<T>>>\n\n writeValue(key: ResourceKey, value: T | undefined): Promise<void>\n\n writeValues(entries: Array<RecordEntry<T | undefined>>): Promise<void>\n\n evictAll(sector: CacheSector): Promise<void>\n}\n\nexport abstract class AbstractCache<T> implements Cache<T> {\n abstract name: CacheName\n\n fetchValue = async (key: ResourceKey, fetch: () => Promise<T>): Promise<T> => {\n const results = await this.fetchValues([key], async () => {\n return [Entries.of(key, await fetch())]\n })\n\n return Arrays.first(results)![1]\n }\n\n abstract fetchValues(keys: Array<ResourceKey>, fetch: (keys: Array<ResourceKey>) => Promise<RecordEntry<T>[]>): Promise<RecordEntry<T>[]>\n\n writeValue = async (key: ResourceKey, value: T | undefined): Promise<void> => {\n await this.writeValues([Entries.of(key, value)])\n }\n\n abstract writeValues(entries: RecordEntry<T | undefined>[]): Promise<void>\n\n abstract 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> {\n name: CacheName\n\n getValue(key: ResourceKey, fetch: () => T): T\n\n getValues(keys: Array<ResourceKey>, fetch: (keys: Array<ResourceKey>) => Array<RecordEntry<T>>): Array<RecordEntry<T>>\n\n setValue(key: ResourceKey, value: T | undefined): void\n\n setValues(entries: Array<RecordEntry<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 (isNil(entry)) {\n return true\n }\n\n if (isNil(entry.liveTimestamp)) {\n return false\n }\n\n return isBefore(entry.liveTimestamp, 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 (isNil(entry.staleTimestamp)) {\n return false\n }\n\n return isBefore(entry.staleTimestamp, 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 (!isNil(props.timeToLive)) {\n const limit = addMilliseconds(now(), toMilliseconds(props.timeToLive))\n if (isBefore(limit, liveTimestamp ?? limit)) {\n liveTimestamp = limit\n }\n }\n\n let staleTimestamp: Date | null = originalEntry.staleTimestamp\n if (!isNil(props.timeToStale)) {\n const limit = addMilliseconds(now(), toMilliseconds(props.timeToStale))\n if (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","CacheSector","namespace","CacheEntry"]}
package/dist/error.d.ts CHANGED
@@ -1,3 +1,4 @@
1
- export declare const isError: (value: any) => value is Error;
1
+ export declare const isError: (value: unknown) => value is Error;
2
+ export declare const getCausalChain: (error: Error) => Array<Error>;
2
3
  export declare const findInCausalChain: (error: Error, predicate: (error: Error) => boolean) => Error | undefined;
3
4
  //# sourceMappingURL=error.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,OAAO,gCAAW,CAAA;AAE/B,eAAO,MAAM,iBAAiB,GAAI,OAAO,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,KAAG,KAAK,GAAG,SAU9F,CAAA"}
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,KAEjD,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,OAAO,KAAK,KAAG,KAAK,CAAC,KAAK,CAexD,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,OAAO,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,KAAG,KAAK,GAAG,SAE9F,CAAA"}
package/dist/error.js CHANGED
@@ -1,18 +1,26 @@
1
1
  // src/error.ts
2
- import { isError as _isError } from "lodash-es";
3
2
  import { isPresent } from "@bessemer/cornerstone/object";
4
- var isError = _isError;
5
- var findInCausalChain = (error, predicate) => {
6
- if (predicate(error)) {
7
- return error;
8
- }
9
- if (isPresent(error.cause) && error.cause instanceof Error) {
10
- return findInCausalChain(error.cause, predicate);
3
+ var isError = (value) => {
4
+ return value instanceof Error;
5
+ };
6
+ var getCausalChain = (error) => {
7
+ const chain = [];
8
+ let current = error;
9
+ while (true) {
10
+ chain.push(current);
11
+ if (!isPresent(current.cause) || !isError(current.cause)) {
12
+ break;
13
+ }
14
+ current = current.cause;
11
15
  }
12
- return void 0;
16
+ return chain;
17
+ };
18
+ var findInCausalChain = (error, predicate) => {
19
+ return getCausalChain(error).find(predicate);
13
20
  };
14
21
  export {
15
22
  findInCausalChain,
23
+ getCausalChain,
16
24
  isError
17
25
  };
18
26
  //# sourceMappingURL=error.js.map
package/dist/error.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/error.ts"],"sourcesContent":["import { isError as _isError } from 'lodash-es'\nimport { isPresent } from '@bessemer/cornerstone/object'\nimport { Throwable } from '@bessemer/cornerstone/types'\n\nexport const isError = _isError\n\nexport const findInCausalChain = (error: Error, predicate: (error: Error) => boolean): Error | undefined => {\n if (predicate(error)) {\n return error\n }\n\n if (isPresent(error.cause) && error.cause instanceof Error) {\n return findInCausalChain(error.cause, predicate)\n }\n\n return undefined\n}\n\nconst serializeError = (error: Throwable): any => {\n if (!isPresent(error)) {\n return undefined\n }\n\n if (!isError(error)) {\n return error\n }\n\n const cause = isPresent(error.cause) ? serializeError(error.cause) : undefined\n\n const serialized = {\n name: error.name,\n message: error.message,\n stack: error.stack,\n cause,\n }\n\n return serialized\n}\n"],"mappings":";AAAA,SAAS,WAAW,gBAAgB;AACpC,SAAS,iBAAiB;AAGnB,IAAM,UAAU;AAEhB,IAAM,oBAAoB,CAAC,OAAc,cAA4D;AAC1G,MAAI,UAAU,KAAK,GAAG;AACpB,WAAO;AAAA,EACT;AAEA,MAAI,UAAU,MAAM,KAAK,KAAK,MAAM,iBAAiB,OAAO;AAC1D,WAAO,kBAAkB,MAAM,OAAO,SAAS;AAAA,EACjD;AAEA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../src/error.ts"],"sourcesContent":["import { isPresent } from '@bessemer/cornerstone/object'\nimport { Throwable } from '@bessemer/cornerstone/types'\n\nexport const isError = (value: unknown): value is Error => {\n return value instanceof Error\n}\n\nexport const getCausalChain = (error: Error): Array<Error> => {\n const chain: Array<Error> = []\n let current: Error = error\n\n while (true) {\n chain.push(current)\n\n if (!isPresent(current.cause) || !isError(current.cause)) {\n break\n }\n\n current = current.cause\n }\n\n return chain\n}\n\nexport const findInCausalChain = (error: Error, predicate: (error: Error) => boolean): Error | undefined => {\n return getCausalChain(error).find(predicate)\n}\n\nconst serializeError = (error: Throwable): any => {\n if (!isPresent(error)) {\n return undefined\n }\n\n if (!isError(error)) {\n return error\n }\n\n const cause = isPresent(error.cause) ? serializeError(error.cause) : undefined\n\n const serialized = {\n name: error.name,\n message: error.message,\n stack: error.stack,\n cause,\n }\n\n return serialized\n}\n"],"mappings":";AAAA,SAAS,iBAAiB;AAGnB,IAAM,UAAU,CAAC,UAAmC;AACzD,SAAO,iBAAiB;AAC1B;AAEO,IAAM,iBAAiB,CAAC,UAA+B;AAC5D,QAAM,QAAsB,CAAC;AAC7B,MAAI,UAAiB;AAErB,SAAO,MAAM;AACX,UAAM,KAAK,OAAO;AAElB,QAAI,CAAC,UAAU,QAAQ,KAAK,KAAK,CAAC,QAAQ,QAAQ,KAAK,GAAG;AACxD;AAAA,IACF;AAEA,cAAU,QAAQ;AAAA,EACpB;AAEA,SAAO;AACT;AAEO,IAAM,oBAAoB,CAAC,OAAc,cAA4D;AAC1G,SAAO,eAAe,KAAK,EAAE,KAAK,SAAS;AAC7C;","names":[]}
package/dist/index.d.ts CHANGED
@@ -53,5 +53,6 @@ import * as CountryCodes from '@bessemer/cornerstone/intl/country-code';
53
53
  import * as CountrySubdivisionCodes from '@bessemer/cornerstone/intl/country-subdivision-code';
54
54
  import * as LanguageCodes from '@bessemer/cornerstone/intl/language-code';
55
55
  import * as Locales from '@bessemer/cornerstone/intl/locale';
56
- export { Objects, Functions, Arrays, Strings, Async, AsyncValues, Maths, Maps, Sets, Dates, Comparators, Equalitors, Durations, Uris, Urls, Loggers, Errors, ErrorEvents, Assertions, Uuids, Ulids, Entries, Hashes, Crypto, Globs, Ranges, ObjectPaths, TypePaths, ObjectDiffs, ZodUtil, Tags, Promises, References, Signatures, Eithers, Results, Lazy, Patches, Content, Combinables, Properties, RichTexts, Retry, Stores, Misc, Json, AspectRatios, DataSizes, MimeTypes, CurrencyCodes, MonetaryAmounts, CountryCodes, CountrySubdivisionCodes, LanguageCodes, Locales, };
56
+ import * as ResourceKeys from '@bessemer/cornerstone/resource-key';
57
+ export { Objects, Functions, Arrays, Strings, Async, AsyncValues, Maths, Maps, Sets, Dates, Comparators, Equalitors, Durations, Uris, Urls, Loggers, Errors, ErrorEvents, Assertions, Uuids, Ulids, Entries, Hashes, Crypto, Globs, Ranges, ObjectPaths, TypePaths, ObjectDiffs, ZodUtil, Tags, Promises, References, Signatures, Eithers, Results, Lazy, Patches, Content, Combinables, Properties, RichTexts, Retry, Stores, Misc, Json, AspectRatios, DataSizes, MimeTypes, CurrencyCodes, MonetaryAmounts, CountryCodes, CountrySubdivisionCodes, LanguageCodes, Locales, ResourceKeys, };
57
58
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -54,6 +54,7 @@ import * as CountryCodes from "@bessemer/cornerstone/intl/country-code";
54
54
  import * as CountrySubdivisionCodes from "@bessemer/cornerstone/intl/country-subdivision-code";
55
55
  import * as LanguageCodes from "@bessemer/cornerstone/intl/language-code";
56
56
  import * as Locales from "@bessemer/cornerstone/intl/locale";
57
+ import * as ResourceKeys from "@bessemer/cornerstone/resource-key";
57
58
  export {
58
59
  Arrays,
59
60
  AspectRatios,
@@ -96,6 +97,7 @@ export {
96
97
  Properties,
97
98
  Ranges,
98
99
  References,
100
+ ResourceKeys,
99
101
  Results,
100
102
  Retry,
101
103
  RichTexts,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import * as Objects from '@bessemer/cornerstone/object'\nimport * as Functions from '@bessemer/cornerstone/function'\nimport * as Arrays from '@bessemer/cornerstone/array'\nimport * as Strings from '@bessemer/cornerstone/string'\nimport * as Async from '@bessemer/cornerstone/async'\nimport * as AsyncValues from '@bessemer/cornerstone/async-value'\nimport * as Maths from '@bessemer/cornerstone/math'\nimport * as Maps from '@bessemer/cornerstone/map'\nimport * as Sets from '@bessemer/cornerstone/set'\nimport * as Dates from '@bessemer/cornerstone/date'\nimport * as Comparators from '@bessemer/cornerstone/comparator'\nimport * as Equalitors from '@bessemer/cornerstone/equalitor'\nimport * as Durations from '@bessemer/cornerstone/duration'\nimport * as Uris from '@bessemer/cornerstone/uri'\nimport * as Urls from '@bessemer/cornerstone/url'\nimport * as Loggers from '@bessemer/cornerstone/logger'\nimport * as Errors from '@bessemer/cornerstone/error'\nimport * as ErrorEvents from '@bessemer/cornerstone/error-event'\nimport * as Assertions from '@bessemer/cornerstone/assertion'\nimport * as Uuids from '@bessemer/cornerstone/uuid'\nimport * as Ulids from '@bessemer/cornerstone/ulid'\nimport * as Entries from '@bessemer/cornerstone/entry'\nimport * as Hashes from '@bessemer/cornerstone/hash'\nimport * as Crypto from '@bessemer/cornerstone/crypto'\nimport * as Globs from '@bessemer/cornerstone/glob'\nimport * as Ranges from '@bessemer/cornerstone/range'\nimport * as ObjectPaths from '@bessemer/cornerstone/object/object-path'\nimport * as TypePaths from '@bessemer/cornerstone/object/type-path'\nimport * as ObjectDiffs from '@bessemer/cornerstone/object/object-diff'\n\nimport * as ZodUtil from '@bessemer/cornerstone/zod-util'\nimport * as Tags from '@bessemer/cornerstone/tag'\nimport * as Promises from '@bessemer/cornerstone/promise'\nimport * as References from '@bessemer/cornerstone/reference'\nimport * as Signatures from '@bessemer/cornerstone/signature'\nimport * as Eithers from '@bessemer/cornerstone/either'\nimport * as Results from '@bessemer/cornerstone/result'\nimport * as Lazy from '@bessemer/cornerstone/lazy'\nimport * as Patches from '@bessemer/cornerstone/patch'\nimport * as Content from '@bessemer/cornerstone/content'\nimport * as Combinables from '@bessemer/cornerstone/combinable'\nimport * as Properties from '@bessemer/cornerstone/property'\nimport * as RichTexts from '@bessemer/cornerstone/rich-text'\nimport * as Retry from '@bessemer/cornerstone/retry'\nimport * as Stores from '@bessemer/cornerstone/store'\nimport * as Misc from '@bessemer/cornerstone/misc'\nimport * as Json from '@bessemer/cornerstone/json'\nimport * as AspectRatios from '@bessemer/cornerstone/aspect-ratio'\nimport * as DataSizes from '@bessemer/cornerstone/data-size'\nimport * as MimeTypes from '@bessemer/cornerstone/mime-type'\nimport * as MonetaryAmounts from '@bessemer/cornerstone/monetary-amount'\nimport * as CurrencyCodes from '@bessemer/cornerstone/intl/currency-code'\nimport * as CountryCodes from '@bessemer/cornerstone/intl/country-code'\nimport * as CountrySubdivisionCodes from '@bessemer/cornerstone/intl/country-subdivision-code'\nimport * as LanguageCodes from '@bessemer/cornerstone/intl/language-code'\nimport * as Locales from '@bessemer/cornerstone/intl/locale'\n\nexport {\n Objects,\n Functions,\n Arrays,\n Strings,\n Async,\n AsyncValues,\n Maths,\n Maps,\n Sets,\n Dates,\n Comparators,\n Equalitors,\n Durations,\n Uris,\n Urls,\n Loggers,\n Errors,\n ErrorEvents,\n Assertions,\n Uuids,\n Ulids,\n Entries,\n Hashes,\n Crypto,\n Globs,\n Ranges,\n ObjectPaths,\n TypePaths,\n ObjectDiffs,\n ZodUtil,\n Tags,\n Promises,\n References,\n Signatures,\n Eithers,\n Results,\n Lazy,\n Patches,\n Content,\n Combinables,\n Properties,\n RichTexts,\n Retry,\n Stores,\n Misc,\n Json,\n AspectRatios,\n DataSizes,\n MimeTypes,\n CurrencyCodes,\n MonetaryAmounts,\n CountryCodes,\n CountrySubdivisionCodes,\n LanguageCodes,\n Locales,\n}\n"],"mappings":";AAAA,YAAY,aAAa;AACzB,YAAY,eAAe;AAC3B,YAAY,YAAY;AACxB,YAAY,aAAa;AACzB,YAAY,WAAW;AACvB,YAAY,iBAAiB;AAC7B,YAAY,WAAW;AACvB,YAAY,UAAU;AACtB,YAAY,UAAU;AACtB,YAAY,WAAW;AACvB,YAAY,iBAAiB;AAC7B,YAAY,gBAAgB;AAC5B,YAAY,eAAe;AAC3B,YAAY,UAAU;AACtB,YAAY,UAAU;AACtB,YAAY,aAAa;AACzB,YAAY,YAAY;AACxB,YAAY,iBAAiB;AAC7B,YAAY,gBAAgB;AAC5B,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,aAAa;AACzB,YAAY,YAAY;AACxB,YAAY,YAAY;AACxB,YAAY,WAAW;AACvB,YAAY,YAAY;AACxB,YAAY,iBAAiB;AAC7B,YAAY,eAAe;AAC3B,YAAY,iBAAiB;AAE7B,YAAY,aAAa;AACzB,YAAY,UAAU;AACtB,YAAY,cAAc;AAC1B,YAAY,gBAAgB;AAC5B,YAAY,gBAAgB;AAC5B,YAAY,aAAa;AACzB,YAAY,aAAa;AACzB,YAAY,UAAU;AACtB,YAAY,aAAa;AACzB,YAAY,aAAa;AACzB,YAAY,iBAAiB;AAC7B,YAAY,gBAAgB;AAC5B,YAAY,eAAe;AAC3B,YAAY,WAAW;AACvB,YAAY,YAAY;AACxB,YAAY,UAAU;AACtB,YAAY,UAAU;AACtB,YAAY,kBAAkB;AAC9B,YAAY,eAAe;AAC3B,YAAY,eAAe;AAC3B,YAAY,qBAAqB;AACjC,YAAY,mBAAmB;AAC/B,YAAY,kBAAkB;AAC9B,YAAY,6BAA6B;AACzC,YAAY,mBAAmB;AAC/B,YAAY,aAAa;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import * as Objects from '@bessemer/cornerstone/object'\nimport * as Functions from '@bessemer/cornerstone/function'\nimport * as Arrays from '@bessemer/cornerstone/array'\nimport * as Strings from '@bessemer/cornerstone/string'\nimport * as Async from '@bessemer/cornerstone/async'\nimport * as AsyncValues from '@bessemer/cornerstone/async-value'\nimport * as Maths from '@bessemer/cornerstone/math'\nimport * as Maps from '@bessemer/cornerstone/map'\nimport * as Sets from '@bessemer/cornerstone/set'\nimport * as Dates from '@bessemer/cornerstone/date'\nimport * as Comparators from '@bessemer/cornerstone/comparator'\nimport * as Equalitors from '@bessemer/cornerstone/equalitor'\nimport * as Durations from '@bessemer/cornerstone/duration'\nimport * as Uris from '@bessemer/cornerstone/uri'\nimport * as Urls from '@bessemer/cornerstone/url'\nimport * as Loggers from '@bessemer/cornerstone/logger'\nimport * as Errors from '@bessemer/cornerstone/error'\nimport * as ErrorEvents from '@bessemer/cornerstone/error-event'\nimport * as Assertions from '@bessemer/cornerstone/assertion'\nimport * as Uuids from '@bessemer/cornerstone/uuid'\nimport * as Ulids from '@bessemer/cornerstone/ulid'\nimport * as Entries from '@bessemer/cornerstone/entry'\nimport * as Hashes from '@bessemer/cornerstone/hash'\nimport * as Crypto from '@bessemer/cornerstone/crypto'\nimport * as Globs from '@bessemer/cornerstone/glob'\nimport * as Ranges from '@bessemer/cornerstone/range'\nimport * as ObjectPaths from '@bessemer/cornerstone/object/object-path'\nimport * as TypePaths from '@bessemer/cornerstone/object/type-path'\nimport * as ObjectDiffs from '@bessemer/cornerstone/object/object-diff'\n\nimport * as ZodUtil from '@bessemer/cornerstone/zod-util'\nimport * as Tags from '@bessemer/cornerstone/tag'\nimport * as Promises from '@bessemer/cornerstone/promise'\nimport * as References from '@bessemer/cornerstone/reference'\nimport * as Signatures from '@bessemer/cornerstone/signature'\nimport * as Eithers from '@bessemer/cornerstone/either'\nimport * as Results from '@bessemer/cornerstone/result'\nimport * as Lazy from '@bessemer/cornerstone/lazy'\nimport * as Patches from '@bessemer/cornerstone/patch'\nimport * as Content from '@bessemer/cornerstone/content'\nimport * as Combinables from '@bessemer/cornerstone/combinable'\nimport * as Properties from '@bessemer/cornerstone/property'\nimport * as RichTexts from '@bessemer/cornerstone/rich-text'\nimport * as Retry from '@bessemer/cornerstone/retry'\nimport * as Stores from '@bessemer/cornerstone/store'\nimport * as Misc from '@bessemer/cornerstone/misc'\nimport * as Json from '@bessemer/cornerstone/json'\nimport * as AspectRatios from '@bessemer/cornerstone/aspect-ratio'\nimport * as DataSizes from '@bessemer/cornerstone/data-size'\nimport * as MimeTypes from '@bessemer/cornerstone/mime-type'\nimport * as MonetaryAmounts from '@bessemer/cornerstone/monetary-amount'\nimport * as CurrencyCodes from '@bessemer/cornerstone/intl/currency-code'\nimport * as CountryCodes from '@bessemer/cornerstone/intl/country-code'\nimport * as CountrySubdivisionCodes from '@bessemer/cornerstone/intl/country-subdivision-code'\nimport * as LanguageCodes from '@bessemer/cornerstone/intl/language-code'\nimport * as Locales from '@bessemer/cornerstone/intl/locale'\nimport * as ResourceKeys from '@bessemer/cornerstone/resource-key'\n\nexport {\n Objects,\n Functions,\n Arrays,\n Strings,\n Async,\n AsyncValues,\n Maths,\n Maps,\n Sets,\n Dates,\n Comparators,\n Equalitors,\n Durations,\n Uris,\n Urls,\n Loggers,\n Errors,\n ErrorEvents,\n Assertions,\n Uuids,\n Ulids,\n Entries,\n Hashes,\n Crypto,\n Globs,\n Ranges,\n ObjectPaths,\n TypePaths,\n ObjectDiffs,\n ZodUtil,\n Tags,\n Promises,\n References,\n Signatures,\n Eithers,\n Results,\n Lazy,\n Patches,\n Content,\n Combinables,\n Properties,\n RichTexts,\n Retry,\n Stores,\n Misc,\n Json,\n AspectRatios,\n DataSizes,\n MimeTypes,\n CurrencyCodes,\n MonetaryAmounts,\n CountryCodes,\n CountrySubdivisionCodes,\n LanguageCodes,\n Locales,\n ResourceKeys,\n}\n"],"mappings":";AAAA,YAAY,aAAa;AACzB,YAAY,eAAe;AAC3B,YAAY,YAAY;AACxB,YAAY,aAAa;AACzB,YAAY,WAAW;AACvB,YAAY,iBAAiB;AAC7B,YAAY,WAAW;AACvB,YAAY,UAAU;AACtB,YAAY,UAAU;AACtB,YAAY,WAAW;AACvB,YAAY,iBAAiB;AAC7B,YAAY,gBAAgB;AAC5B,YAAY,eAAe;AAC3B,YAAY,UAAU;AACtB,YAAY,UAAU;AACtB,YAAY,aAAa;AACzB,YAAY,YAAY;AACxB,YAAY,iBAAiB;AAC7B,YAAY,gBAAgB;AAC5B,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,aAAa;AACzB,YAAY,YAAY;AACxB,YAAY,YAAY;AACxB,YAAY,WAAW;AACvB,YAAY,YAAY;AACxB,YAAY,iBAAiB;AAC7B,YAAY,eAAe;AAC3B,YAAY,iBAAiB;AAE7B,YAAY,aAAa;AACzB,YAAY,UAAU;AACtB,YAAY,cAAc;AAC1B,YAAY,gBAAgB;AAC5B,YAAY,gBAAgB;AAC5B,YAAY,aAAa;AACzB,YAAY,aAAa;AACzB,YAAY,UAAU;AACtB,YAAY,aAAa;AACzB,YAAY,aAAa;AACzB,YAAY,iBAAiB;AAC7B,YAAY,gBAAgB;AAC5B,YAAY,eAAe;AAC3B,YAAY,WAAW;AACvB,YAAY,YAAY;AACxB,YAAY,UAAU;AACtB,YAAY,UAAU;AACtB,YAAY,kBAAkB;AAC9B,YAAY,eAAe;AAC3B,YAAY,eAAe;AAC3B,YAAY,qBAAqB;AACjC,YAAY,mBAAmB;AAC/B,YAAY,kBAAkB;AAC9B,YAAY,6BAA6B;AACzC,YAAY,mBAAmB;AAC/B,YAAY,aAAa;AACzB,YAAY,kBAAkB;","names":[]}
package/dist/map.d.ts CHANGED
@@ -1,4 +1,7 @@
1
1
  import { Entry } from '@bessemer/cornerstone/entry';
2
+ import { Dictionary } from '@bessemer/cornerstone/types';
3
+ export declare const from: <ValueType>(record: Dictionary<ValueType>) => Map<string, ValueType>;
4
+ export declare const fromEntries: <KeyType extends string | number | symbol, ValueType>(entries: Array<Entry<KeyType, ValueType>>) => Map<KeyType, ValueType>;
2
5
  export declare const groupBy: <CollectionType, KeyType>(iterable: Iterable<CollectionType>, mapper: (it: CollectionType) => KeyType) => Map<KeyType, Array<CollectionType>>;
3
6
  export declare const fuse: <KeyType, FuseType, ValueType>(target: Map<KeyType, FuseType>, valuesMap: Map<FuseType, ValueType>) => Map<KeyType, ValueType>;
4
7
  export declare const mapKeys: <KeyType, ValueType, NewKeyType>(target: Map<KeyType, ValueType>, mapper: (key: KeyType) => NewKeyType) => Map<NewKeyType, ValueType>;
package/dist/map.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../src/map.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../src/map.ts"],"names":[],"mappings":"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"}
package/dist/map.js CHANGED
@@ -2,6 +2,12 @@
2
2
  import { concatenate as arrayConcatenate } from "@bessemer/cornerstone/array";
3
3
  import { assert, assertPresent } from "@bessemer/cornerstone/assertion";
4
4
  import { Objects } from "@bessemer/cornerstone/index";
5
+ var from = (record) => {
6
+ return fromEntries(Object.entries(record));
7
+ };
8
+ var fromEntries = (entries) => {
9
+ return collect(entries, (it) => it);
10
+ };
5
11
  var groupBy = (iterable, mapper) => {
6
12
  return collect(
7
13
  iterable,
@@ -108,6 +114,8 @@ export {
108
114
  concatenateInto,
109
115
  filter,
110
116
  filterFrom,
117
+ from,
118
+ fromEntries,
111
119
  fuse,
112
120
  groupBy,
113
121
  map,
package/dist/map.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/map.ts"],"sourcesContent":["import { Entry } from '@bessemer/cornerstone/entry'\nimport { concatenate as arrayConcatenate } from '@bessemer/cornerstone/array'\nimport { assert, assertPresent } from '@bessemer/cornerstone/assertion'\nimport { Objects } from '@bessemer/cornerstone/index'\n\nexport const groupBy = <CollectionType, KeyType>(\n iterable: Iterable<CollectionType>,\n mapper: (it: CollectionType) => KeyType\n): Map<KeyType, Array<CollectionType>> => {\n return collect(\n iterable,\n (it) => [mapper(it), [it]],\n (_, first, second) => arrayConcatenate(first, second)\n )\n}\n\nexport const fuse = <KeyType, FuseType, ValueType>(target: Map<KeyType, FuseType>, valuesMap: Map<FuseType, ValueType>): Map<KeyType, ValueType> => {\n return mapValues(target, (value) => {\n const newValue = valuesMap.get(value)\n assertPresent(newValue, () => `Maps.fuse - Encountered missing linkage: ${value}`)\n return newValue\n })\n}\n\nexport const mapKeys = <KeyType, ValueType, NewKeyType>(\n target: Map<KeyType, ValueType>,\n mapper: (key: KeyType) => NewKeyType\n): Map<NewKeyType, ValueType> => {\n return map(target, ([key, value]) => [mapper(key), value])\n}\n\nexport const mapValues = <KeyType, ValueType, NewValueType>(\n target: Map<KeyType, ValueType>,\n mapper: (value: ValueType) => NewValueType\n): Map<KeyType, NewValueType> => {\n return map(target, ([key, value]) => [key, mapper(value)])\n}\n\nexport const map = <KeyType, ValueType, NewKeyType, NewValueType>(\n target: Map<KeyType, ValueType>,\n mapper: (entry: Entry<KeyType, ValueType>) => Entry<NewKeyType, NewValueType>\n): Map<NewKeyType, NewValueType> => {\n return collect(target.entries(), mapper, (key) => {\n throw new Error(`Maps.transform - Encountered illegal duplicate collection value: ${key}`)\n })\n}\n\nexport const collectKeys = <CollectionType, KeyType>(\n iterable: Iterable<CollectionType>,\n mapper: (it: CollectionType) => KeyType\n): Map<KeyType, CollectionType> => {\n return collect(\n iterable,\n (it) => [mapper(it), it],\n (key) => {\n throw new Error(`Maps.collectKeys - Encountered illegal duplicate collection value: ${key}`)\n }\n )\n}\n\nexport const collectValues = <CollectionType, ValueType>(\n iterable: Iterable<CollectionType>,\n mapper: (it: CollectionType) => ValueType\n): Map<CollectionType, ValueType> => {\n return collect(\n iterable,\n (it) => [it, mapper(it)],\n (key) => {\n throw new Error(`Maps.mapValues - Encountered illegal duplicate collection value: ${key}`)\n }\n )\n}\n\nexport function collect<CollectionType, KeyType, ValueType>(\n iterable: Iterable<CollectionType>,\n mapEntry: (it: CollectionType) => Entry<KeyType, ValueType>\n): Map<KeyType, ValueType>\nexport function collect<CollectionType, KeyType, ValueType>(\n iterable: Iterable<CollectionType>,\n mapEntry: (it: CollectionType) => Entry<KeyType, ValueType>,\n reducer: (key: KeyType, first: ValueType, second: ValueType) => ValueType\n): Map<KeyType, ValueType>\nexport function collect<CollectionType, KeyType, ValueType>(\n iterable: Iterable<CollectionType>,\n mapEntry: (it: CollectionType) => Entry<KeyType, ValueType>,\n reducer?: (key: KeyType, first: ValueType, second: ValueType) => ValueType\n): Map<KeyType, ValueType> {\n const result = new Map<KeyType, ValueType>()\n\n for (const item of iterable) {\n const [key, value] = mapEntry(item)\n\n if (result.has(key)) {\n if (Objects.isNil(reducer)) {\n throw new Error(`Maps.collect - Encountered illegal duplicate collection key: ${key}`)\n }\n\n const existingValue = result.get(key)!\n const reducedValue = reducer(key, existingValue, value)\n result.set(key, reducedValue)\n } else {\n result.set(key, value)\n }\n }\n\n return result\n}\n\nexport const append = <KeyType, ValueType>(map: Map<KeyType, ValueType>, ...values: Array<Entry<KeyType, ValueType>>): Map<KeyType, ValueType> => {\n const result = new Map(map.entries())\n appendInto(result, ...values)\n return result\n}\n\nexport const appendInto = <KeyType, ValueType>(map: Map<KeyType, ValueType>, ...values: Array<Entry<KeyType, ValueType>>): void => {\n for (const [key, value] of values) {\n assert(!map.has(key), () => `Maps.append - Encountered illegal duplicate key: ${key}`)\n map.set(key, value)\n }\n}\n\nexport const concatenate = <KeyType, ValueType>(map: Map<KeyType, ValueType>, ...values: Array<Map<KeyType, ValueType>>): Map<KeyType, ValueType> => {\n const result = new Map(map)\n concatenateInto(result, ...values)\n return result\n}\n\nexport const concatenateInto = <KeyType, ValueType>(map: Map<KeyType, ValueType>, ...values: Array<Map<KeyType, ValueType>>): void => {\n for (const otherMap of values) {\n for (const [key, value] of otherMap) {\n assert(!map.has(key), () => `Maps.concatenate - Encountered illegal duplicate key: ${key}`)\n map.set(key, value)\n }\n }\n}\n\nexport const filter = <KeyType, ValueType>(\n map: Map<KeyType, ValueType>,\n predicate: (entry: Entry<KeyType, ValueType>) => boolean\n): Map<KeyType, ValueType> => {\n const result = new Map(map)\n filterFrom(result, predicate)\n return result\n}\n\nexport const filterFrom = <KeyType, ValueType>(map: Map<KeyType, ValueType>, predicate: (entry: Entry<KeyType, ValueType>) => boolean): void => {\n for (const entry of map) {\n if (!predicate(entry)) {\n map.delete(entry[0])\n }\n }\n}\n"],"mappings":"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","names":["map"]}
1
+ {"version":3,"sources":["../src/map.ts"],"sourcesContent":["import { Entry } from '@bessemer/cornerstone/entry'\nimport { concatenate as arrayConcatenate } from '@bessemer/cornerstone/array'\nimport { assert, assertPresent } from '@bessemer/cornerstone/assertion'\nimport { Objects } from '@bessemer/cornerstone/index'\nimport { Dictionary } from '@bessemer/cornerstone/types'\n\nexport const from = <ValueType>(record: Dictionary<ValueType>): Map<string, ValueType> => {\n return fromEntries(Object.entries(record))\n}\n\nexport const fromEntries = <KeyType extends string | number | symbol, ValueType>(\n entries: Array<Entry<KeyType, ValueType>>\n): Map<KeyType, ValueType> => {\n return collect(entries, (it) => it)\n}\n\nexport const groupBy = <CollectionType, KeyType>(\n iterable: Iterable<CollectionType>,\n mapper: (it: CollectionType) => KeyType\n): Map<KeyType, Array<CollectionType>> => {\n return collect(\n iterable,\n (it) => [mapper(it), [it]],\n (_, first, second) => arrayConcatenate(first, second)\n )\n}\n\nexport const fuse = <KeyType, FuseType, ValueType>(target: Map<KeyType, FuseType>, valuesMap: Map<FuseType, ValueType>): Map<KeyType, ValueType> => {\n return mapValues(target, (value) => {\n const newValue = valuesMap.get(value)\n assertPresent(newValue, () => `Maps.fuse - Encountered missing linkage: ${value}`)\n return newValue\n })\n}\n\nexport const mapKeys = <KeyType, ValueType, NewKeyType>(\n target: Map<KeyType, ValueType>,\n mapper: (key: KeyType) => NewKeyType\n): Map<NewKeyType, ValueType> => {\n return map(target, ([key, value]) => [mapper(key), value])\n}\n\nexport const mapValues = <KeyType, ValueType, NewValueType>(\n target: Map<KeyType, ValueType>,\n mapper: (value: ValueType) => NewValueType\n): Map<KeyType, NewValueType> => {\n return map(target, ([key, value]) => [key, mapper(value)])\n}\n\nexport const map = <KeyType, ValueType, NewKeyType, NewValueType>(\n target: Map<KeyType, ValueType>,\n mapper: (entry: Entry<KeyType, ValueType>) => Entry<NewKeyType, NewValueType>\n): Map<NewKeyType, NewValueType> => {\n return collect(target.entries(), mapper, (key) => {\n throw new Error(`Maps.transform - Encountered illegal duplicate collection value: ${key}`)\n })\n}\n\nexport const collectKeys = <CollectionType, KeyType>(\n iterable: Iterable<CollectionType>,\n mapper: (it: CollectionType) => KeyType\n): Map<KeyType, CollectionType> => {\n return collect(\n iterable,\n (it) => [mapper(it), it],\n (key) => {\n throw new Error(`Maps.collectKeys - Encountered illegal duplicate collection value: ${key}`)\n }\n )\n}\n\nexport const collectValues = <CollectionType, ValueType>(\n iterable: Iterable<CollectionType>,\n mapper: (it: CollectionType) => ValueType\n): Map<CollectionType, ValueType> => {\n return collect(\n iterable,\n (it) => [it, mapper(it)],\n (key) => {\n throw new Error(`Maps.mapValues - Encountered illegal duplicate collection value: ${key}`)\n }\n )\n}\n\nexport function collect<CollectionType, KeyType, ValueType>(\n iterable: Iterable<CollectionType>,\n mapEntry: (it: CollectionType) => Entry<KeyType, ValueType>\n): Map<KeyType, ValueType>\nexport function collect<CollectionType, KeyType, ValueType>(\n iterable: Iterable<CollectionType>,\n mapEntry: (it: CollectionType) => Entry<KeyType, ValueType>,\n reducer: (key: KeyType, first: ValueType, second: ValueType) => ValueType\n): Map<KeyType, ValueType>\nexport function collect<CollectionType, KeyType, ValueType>(\n iterable: Iterable<CollectionType>,\n mapEntry: (it: CollectionType) => Entry<KeyType, ValueType>,\n reducer?: (key: KeyType, first: ValueType, second: ValueType) => ValueType\n): Map<KeyType, ValueType> {\n const result = new Map<KeyType, ValueType>()\n\n for (const item of iterable) {\n const [key, value] = mapEntry(item)\n\n if (result.has(key)) {\n if (Objects.isNil(reducer)) {\n throw new Error(`Maps.collect - Encountered illegal duplicate collection key: ${key}`)\n }\n\n const existingValue = result.get(key)!\n const reducedValue = reducer(key, existingValue, value)\n result.set(key, reducedValue)\n } else {\n result.set(key, value)\n }\n }\n\n return result\n}\n\nexport const append = <KeyType, ValueType>(map: Map<KeyType, ValueType>, ...values: Array<Entry<KeyType, ValueType>>): Map<KeyType, ValueType> => {\n const result = new Map(map.entries())\n appendInto(result, ...values)\n return result\n}\n\nexport const appendInto = <KeyType, ValueType>(map: Map<KeyType, ValueType>, ...values: Array<Entry<KeyType, ValueType>>): void => {\n for (const [key, value] of values) {\n assert(!map.has(key), () => `Maps.append - Encountered illegal duplicate key: ${key}`)\n map.set(key, value)\n }\n}\n\nexport const concatenate = <KeyType, ValueType>(map: Map<KeyType, ValueType>, ...values: Array<Map<KeyType, ValueType>>): Map<KeyType, ValueType> => {\n const result = new Map(map)\n concatenateInto(result, ...values)\n return result\n}\n\nexport const concatenateInto = <KeyType, ValueType>(map: Map<KeyType, ValueType>, ...values: Array<Map<KeyType, ValueType>>): void => {\n for (const otherMap of values) {\n for (const [key, value] of otherMap) {\n assert(!map.has(key), () => `Maps.concatenate - Encountered illegal duplicate key: ${key}`)\n map.set(key, value)\n }\n }\n}\n\nexport const filter = <KeyType, ValueType>(\n map: Map<KeyType, ValueType>,\n predicate: (entry: Entry<KeyType, ValueType>) => boolean\n): Map<KeyType, ValueType> => {\n const result = new Map(map)\n filterFrom(result, predicate)\n return result\n}\n\nexport const filterFrom = <KeyType, ValueType>(map: Map<KeyType, ValueType>, predicate: (entry: Entry<KeyType, ValueType>) => boolean): void => {\n for (const entry of map) {\n if (!predicate(entry)) {\n map.delete(entry[0])\n }\n }\n}\n"],"mappings":"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","names":["map"]}
@@ -1,6 +1,7 @@
1
1
  import { NominalType } from '@bessemer/cornerstone/types';
2
2
  import Zod from 'zod';
3
3
  import { InferTypePath, ParseTypePath, TypePathConcreteType, TypePathGet, TypePathSelector, TypePathType, WildcardSelector } from '@bessemer/cornerstone/object/type-path-type';
4
+ import { Result } from '@bessemer/cornerstone/result';
4
5
  export type TypePath<T extends TypePathType = TypePathType> = NominalType<TypePathConcreteType, ['TypePath', T]>;
5
6
  export declare const of: <T extends TypePathConcreteType>(value: T) => TypePath<InferTypePath<T>>;
6
7
  export declare const fromString: <T extends string>(path: T) => TypePath<ParseTypePath<T>>;
@@ -8,5 +9,6 @@ export declare const Schema: Zod.ZodPipe<Zod.ZodUnion<readonly [Zod.ZodArray<Zod
8
9
  export declare const getValue: <T extends TypePathType, N>(path: TypePath<T>, object: N) => TypePathGet<T, N>;
9
10
  export declare const isWildcardSelector: (selector: TypePathSelector) => selector is WildcardSelector;
10
11
  export declare const matches: <MatchingPath extends TypePathType>(targetPath: TypePath, matchingPath: TypePath<MatchingPath>) => targetPath is TypePath<MatchingPath>;
12
+ export declare const intersectAny: (targetPath: TypePath, intersectingPath: TypePath) => Result<TypePath>;
11
13
  export declare const intersect: <TargetPath extends TypePathType, IntersectingPath extends TypePathType>(targetPath: TypePath<TargetPath>, intersectingPath: TypePath<IntersectingPath>) => TypePath;
12
14
  //# sourceMappingURL=type-path.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"type-path.d.ts","sourceRoot":"","sources":["../../src/object/type-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAEzD,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAEL,aAAa,EAEb,aAAa,EACb,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EACjB,MAAM,6CAA6C,CAAA;AAKpD,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,IAAI,WAAW,CAAC,oBAAoB,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAA;AAEhH,eAAO,MAAM,EAAE,GAAI,CAAC,SAAS,oBAAoB,EAAE,OAAO,CAAC,KAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAEtF,CAAA;AAKD,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,MAAM,EAAE,MAAM,CAAC,KAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAmE/E,CAAA;AAED,eAAO,MAAM,MAAM,+IAMjB,CAAA;AAEF,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,YAAY,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAgClG,CAAA;AAsDD,eAAO,MAAM,kBAAkB,GAAI,UAAU,gBAAgB,KAAG,QAAQ,IAAI,gBAE3E,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,YAAY,SAAS,YAAY,EACvD,YAAY,QAAQ,EACpB,cAAc,QAAQ,CAAC,YAAY,CAAC,KACnC,UAAU,IAAI,QAAQ,CAAC,YAAY,CA8CrC,CAAA;AAGD,eAAO,MAAM,SAAS,GAAI,UAAU,SAAS,YAAY,EAAE,gBAAgB,SAAS,YAAY,EAC9F,YAAY,QAAQ,CAAC,UAAU,CAAC,EAChC,kBAAkB,QAAQ,CAAC,gBAAgB,CAAC,KAC3C,QAkEF,CAAA"}
1
+ {"version":3,"file":"type-path.d.ts","sourceRoot":"","sources":["../../src/object/type-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAEzD,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAEL,aAAa,EAEb,aAAa,EACb,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EACjB,MAAM,6CAA6C,CAAA;AAIpD,OAAO,EAAW,MAAM,EAAW,MAAM,8BAA8B,CAAA;AAEvE,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,IAAI,WAAW,CAAC,oBAAoB,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAA;AAEhH,eAAO,MAAM,EAAE,GAAI,CAAC,SAAS,oBAAoB,EAAE,OAAO,CAAC,KAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAEtF,CAAA;AAKD,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,MAAM,EAAE,MAAM,CAAC,KAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAmE/E,CAAA;AAED,eAAO,MAAM,MAAM,+IAMjB,CAAA;AAEF,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,YAAY,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAgClG,CAAA;AAsDD,eAAO,MAAM,kBAAkB,GAAI,UAAU,gBAAgB,KAAG,QAAQ,IAAI,gBAE3E,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,YAAY,SAAS,YAAY,EACvD,YAAY,QAAQ,EACpB,cAAc,QAAQ,CAAC,YAAY,CAAC,KACnC,UAAU,IAAI,QAAQ,CAAC,YAAY,CA8CrC,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,YAAY,QAAQ,EAAE,kBAAkB,QAAQ,KAAG,MAAM,CAAC,QAAQ,CA0D9F,CAAA;AAGD,eAAO,MAAM,SAAS,GAAI,UAAU,SAAS,YAAY,EAAE,gBAAgB,SAAS,YAAY,EAC9F,YAAY,QAAQ,CAAC,UAAU,CAAC,EAChC,kBAAkB,QAAQ,CAAC,gBAAgB,CAAC,KAC3C,QAOF,CAAA"}
@@ -4,6 +4,7 @@ import Zod from "zod";
4
4
  import { isNil, isObject } from "@bessemer/cornerstone/object";
5
5
  import { isNumber } from "@bessemer/cornerstone/math";
6
6
  import { contains, containsAll, isEmpty, only } from "@bessemer/cornerstone/array";
7
+ import { failure, success } from "@bessemer/cornerstone/result";
7
8
  var of = (value) => {
8
9
  return value;
9
10
  };
@@ -179,69 +180,68 @@ var matches = (targetPath, matchingPath) => {
179
180
  }
180
181
  return true;
181
182
  };
182
- var intersect = (targetPath, intersectingPath) => {
183
- assert(targetPath.length >= intersectingPath.length, () => `TypePath: ${intersectingPath} can't intersect target TypePath: ${targetPath}`);
183
+ var intersectAny = (targetPath, intersectingPath) => {
184
+ if (targetPath.length < intersectingPath.length) {
185
+ return failure(new Error(`TypePath: ${intersectingPath} can't intersect target TypePath: ${targetPath}`));
186
+ }
184
187
  let index = 0;
185
188
  let result = [];
186
189
  for (const targetPathSelector of targetPath) {
187
190
  const intersectingPathSelector = intersectingPath[index];
191
+ const makeError = () => new Error(`Path mismatch when intersecting. targetPath: ${targetPathSelector} does not match intersectingPath: ${intersectingPathSelector}`);
188
192
  if (isNil(intersectingPathSelector)) {
189
- return of(result);
193
+ return success(of(result));
190
194
  } else if (isWildcardSelector(intersectingPathSelector)) {
191
195
  result.push(targetPathSelector);
192
196
  } else if (isWildcardSelector(targetPathSelector)) {
193
- throw new Error(
194
- `Path mismatch when intersecting. targetPath: ${targetPathSelector} does not match intersectingPath: ${intersectingPathSelector}`
195
- );
197
+ return failure(makeError());
196
198
  } else if (Array.isArray(intersectingPathSelector)) {
197
199
  if (Array.isArray(targetPathSelector)) {
198
200
  const filteredTargetPaths = targetPathSelector.filter((it) => contains(intersectingPathSelector, it));
199
201
  if (isEmpty(filteredTargetPaths)) {
200
- throw new Error(
201
- `Path mismatch when intersecting. targetPath: ${targetPathSelector} does not match intersectingPath: ${intersectingPathSelector}`
202
- );
202
+ return failure(makeError());
203
203
  }
204
204
  result.push(filteredTargetPaths);
205
205
  } else {
206
206
  if (!contains(intersectingPathSelector, Number(targetPathSelector))) {
207
- throw new Error(
208
- `Path mismatch when intersecting. targetPath: ${targetPathSelector} does not match intersectingPath: ${intersectingPathSelector}`
209
- );
207
+ return failure(makeError());
210
208
  }
211
209
  result.push(targetPathSelector);
212
210
  }
213
211
  } else {
214
212
  if (Array.isArray(targetPathSelector)) {
215
213
  if (targetPathSelector.length !== 1) {
216
- throw new Error(
217
- `Path mismatch when intersecting. targetPath: ${targetPathSelector} does not match intersectingPath: ${intersectingPathSelector}`
218
- );
214
+ return failure(makeError());
219
215
  }
220
216
  const targetPathSelectorIndex = only(targetPathSelector);
221
217
  if (targetPathSelectorIndex !== Number(intersectingPathSelector)) {
222
- throw new Error(
223
- `Path mismatch when intersecting. targetPath: ${targetPathSelector} does not match intersectingPath: ${intersectingPathSelector}`
224
- );
218
+ return failure(makeError());
225
219
  }
226
220
  result.push(targetPathSelector);
227
221
  } else {
228
222
  if (targetPathSelector !== intersectingPathSelector) {
229
- throw new Error(
230
- `Path mismatch when intersecting. targetPath: ${targetPathSelector} does not match intersectingPath: ${intersectingPathSelector}`
231
- );
223
+ return failure(makeError());
232
224
  }
233
225
  result.push(targetPathSelector);
234
226
  }
235
227
  }
236
228
  index++;
237
229
  }
238
- return of(result);
230
+ return success(of(result));
231
+ };
232
+ var intersect = (targetPath, intersectingPath) => {
233
+ const result = intersectAny(targetPath, intersectingPath);
234
+ if (!result.isSuccess) {
235
+ throw result.value;
236
+ }
237
+ return result.value;
239
238
  };
240
239
  export {
241
240
  Schema,
242
241
  fromString,
243
242
  getValue,
244
243
  intersect,
244
+ intersectAny,
245
245
  isWildcardSelector,
246
246
  matches,
247
247
  of
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/object/type-path.ts"],"sourcesContent":["import { NominalType } from '@bessemer/cornerstone/types'\nimport { assert } from '@bessemer/cornerstone/assertion'\nimport Zod from 'zod'\nimport {\n IndexSelector,\n InferTypePath,\n NameSelector,\n ParseTypePath,\n TypePathConcreteType,\n TypePathGet,\n TypePathSelector,\n TypePathType,\n WildcardSelector,\n} from '@bessemer/cornerstone/object/type-path-type'\nimport { isNil, isObject } from '@bessemer/cornerstone/object'\nimport { isNumber } from '@bessemer/cornerstone/math'\nimport { contains, containsAll, isEmpty, only } from '@bessemer/cornerstone/array'\n\nexport type TypePath<T extends TypePathType = TypePathType> = NominalType<TypePathConcreteType, ['TypePath', T]>\n\nexport const of = <T extends TypePathConcreteType>(value: T): TypePath<InferTypePath<T>> => {\n return value as TypePath<InferTypePath<T>>\n}\n\nconst TypePathRegex =\n /^(?:[a-zA-Z_$][a-zA-Z0-9_$]*|\\*|\\d+|\\[\\s*(?:\\*|\\d+(?:\\s*,\\s*\\d+)*)\\s*])(?:\\.(?:[a-zA-Z_$][a-zA-Z0-9_$]*|\\*|\\d+)|\\[\\s*(?:\\*|\\d+(?:\\s*,\\s*\\d+)*)\\s*])*$|^$/\n\nexport const fromString = <T extends string>(path: T): TypePath<ParseTypePath<T>> => {\n assert(TypePathRegex.test(path), () => `Unable to parse TypePath from string: ${path}`)\n\n if (path === '') {\n return [] as TypePath<ParseTypePath<T>>\n }\n\n const segments: Array<string | Array<string | number>> = []\n let current = ''\n let i = 0\n\n while (i < path.length) {\n const char = path[i]\n\n if (char === '.') {\n if (current) {\n segments.push(current)\n current = ''\n }\n i++\n } else if (char === '[') {\n if (current) {\n segments.push(current)\n current = ''\n }\n\n // Find the matching closing bracket\n let bracketContent = ''\n i++ // Skip opening bracket\n let depth = 1\n\n while (i < path.length && depth > 0) {\n const bracketChar = path[i]\n if (bracketChar === '[') {\n depth++\n } else if (bracketChar === ']') {\n depth--\n }\n\n if (depth > 0) {\n bracketContent += bracketChar\n }\n i++\n }\n\n if (bracketContent === '*') {\n segments.push('*')\n } else {\n const indices = bracketContent\n .split(',')\n .map((s) => s.trim())\n .map((s) => parseInt(s, 10))\n\n segments.push(indices)\n }\n } else {\n current += char\n i++\n }\n }\n\n // Add any remaining current segment\n if (current) {\n segments.push(current)\n }\n\n return segments as TypePath<ParseTypePath<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 getValue = <T extends TypePathType, N>(path: TypePath<T>, object: N): TypePathGet<T, N> => {\n let current: unknown = object\n let collectorMode = false\n\n for (const selector of path) {\n if (isNil(current)) {\n return undefined as TypePathGet<T, N>\n }\n\n if (collectorMode) {\n if (!Array.isArray(current)) {\n throw new Error('Illegal State - in collectorMode but current value is not an Array')\n }\n\n const result = current.flatMap((it) => {\n const [value, isCollecting] = evaluateSelector(selector, it)\n if (isCollecting) {\n return value\n } else {\n return [value]\n }\n })\n\n current = result\n } else {\n const [result, isCollecting] = evaluateSelector(selector, current)\n current = result\n collectorMode = isCollecting\n }\n }\n\n return current as TypePathGet<T, N>\n}\n\nconst evaluateSelector = (selector: TypePathSelector, current: unknown): [unknown, boolean] => {\n if (isWildcardSelector(selector)) {\n return evaluateWildcardSelector(current)\n }\n\n if (Array.isArray(selector)) {\n return evaluateIndexSelector(selector as IndexSelector, current)\n }\n\n return evaluateNameSelector(selector, current)\n}\n\nconst evaluateNameSelector = (selector: NameSelector, current: unknown): [unknown, boolean] => {\n if (Array.isArray(current)) {\n const numberSelector = Number(selector)\n assert(isNumber(numberSelector), () => `Can't apply non-numeric selector: ${selector} to array: ${current}`)\n return evaluateIndexSelector([numberSelector], current)\n }\n\n if (!isObject(current)) {\n return [undefined, false]\n }\n\n return [current[selector], false]\n}\n\nconst evaluateWildcardSelector = (current: unknown): [unknown, boolean] => {\n if (Array.isArray(current)) {\n return [current, true]\n }\n\n if (isObject(current)) {\n throw new Error('Wildcard operations on Objects is not yet supported')\n }\n\n throw new Error(`Unable to apply wildcard operator to value: ${current}`)\n}\n\nconst evaluateIndexSelector = (selector: IndexSelector, current: unknown): [unknown, boolean] => {\n if (!Array.isArray(current)) {\n throw new Error(`Unable to apply index operator to value: ${current}`)\n }\n\n if (selector.length === 1) {\n return [current[only(selector)], false]\n }\n\n const indexSelector = selector as IndexSelector\n const result = indexSelector.map((it) => current[it])\n return [result, true]\n}\n\nexport const isWildcardSelector = (selector: TypePathSelector): selector is WildcardSelector => {\n return selector === '*'\n}\n\nexport const matches = <MatchingPath extends TypePathType>(\n targetPath: TypePath,\n matchingPath: TypePath<MatchingPath>\n): targetPath is TypePath<MatchingPath> => {\n if (targetPath.length < matchingPath.length) {\n return false\n }\n\n let index = 0\n for (const targetPathSelector of targetPath) {\n const matchingPathSelector = matchingPath[index]\n\n if (isNil(matchingPathSelector)) {\n return true\n } else if (isWildcardSelector(matchingPathSelector)) {\n // Matching path wildcards always match - they're wild\n } else if (isWildcardSelector(targetPathSelector)) {\n return false\n } else if (Array.isArray(matchingPathSelector)) {\n if (Array.isArray(targetPathSelector)) {\n if (!containsAll(matchingPathSelector, targetPathSelector)) {\n return false\n }\n } else {\n if (!contains(matchingPathSelector, Number(targetPathSelector))) {\n return false\n }\n }\n } else {\n if (Array.isArray(targetPathSelector)) {\n if (targetPathSelector.length !== 1) {\n return false\n }\n\n const targetPathSelectorIndex = only(targetPathSelector)\n if (targetPathSelectorIndex !== Number(matchingPathSelector)) {\n return false\n }\n } else {\n if (targetPathSelector !== matchingPathSelector) {\n return false\n }\n }\n }\n\n index++\n }\n\n return true\n}\n\n// JOHN this needs to do a type resolution step...\nexport const intersect = <TargetPath extends TypePathType, IntersectingPath extends TypePathType>(\n targetPath: TypePath<TargetPath>,\n intersectingPath: TypePath<IntersectingPath>\n): TypePath => {\n assert(targetPath.length >= intersectingPath.length, () => `TypePath: ${intersectingPath} can't intersect target TypePath: ${targetPath}`)\n\n let index = 0\n let result: TypePathConcreteType = []\n for (const targetPathSelector of targetPath) {\n const intersectingPathSelector = intersectingPath[index]\n\n if (isNil(intersectingPathSelector)) {\n return of(result)\n } else if (isWildcardSelector(intersectingPathSelector)) {\n result.push(targetPathSelector)\n } else if (isWildcardSelector(targetPathSelector)) {\n throw new Error(\n `Path mismatch when intersecting. targetPath: ${targetPathSelector} does not match intersectingPath: ${intersectingPathSelector}`\n )\n } else if (Array.isArray(intersectingPathSelector)) {\n if (Array.isArray(targetPathSelector)) {\n const filteredTargetPaths = targetPathSelector.filter((it) => contains(intersectingPathSelector, it))\n if (isEmpty(filteredTargetPaths)) {\n throw new Error(\n `Path mismatch when intersecting. targetPath: ${targetPathSelector} does not match intersectingPath: ${intersectingPathSelector}`\n )\n }\n\n result.push(filteredTargetPaths)\n } else {\n if (!contains(intersectingPathSelector, Number(targetPathSelector))) {\n throw new Error(\n `Path mismatch when intersecting. targetPath: ${targetPathSelector} does not match intersectingPath: ${intersectingPathSelector}`\n )\n }\n\n result.push(targetPathSelector)\n }\n } else {\n if (Array.isArray(targetPathSelector)) {\n if (targetPathSelector.length !== 1) {\n throw new Error(\n `Path mismatch when intersecting. targetPath: ${targetPathSelector} does not match intersectingPath: ${intersectingPathSelector}`\n )\n }\n\n const targetPathSelectorIndex = only(targetPathSelector)\n if (targetPathSelectorIndex !== Number(intersectingPathSelector)) {\n throw new Error(\n `Path mismatch when intersecting. targetPath: ${targetPathSelector} does not match intersectingPath: ${intersectingPathSelector}`\n )\n }\n\n result.push(targetPathSelector)\n } else {\n if (targetPathSelector !== intersectingPathSelector) {\n throw new Error(\n `Path mismatch when intersecting. targetPath: ${targetPathSelector} does not match intersectingPath: ${intersectingPathSelector}`\n )\n }\n\n result.push(targetPathSelector)\n }\n }\n\n index++\n }\n\n return of(result)\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/object/type-path.ts"],"sourcesContent":["import { NominalType } from '@bessemer/cornerstone/types'\nimport { assert } from '@bessemer/cornerstone/assertion'\nimport Zod from 'zod'\nimport {\n IndexSelector,\n InferTypePath,\n NameSelector,\n ParseTypePath,\n TypePathConcreteType,\n TypePathGet,\n TypePathSelector,\n TypePathType,\n WildcardSelector,\n} from '@bessemer/cornerstone/object/type-path-type'\nimport { isNil, isObject } from '@bessemer/cornerstone/object'\nimport { isNumber } from '@bessemer/cornerstone/math'\nimport { contains, containsAll, isEmpty, only } from '@bessemer/cornerstone/array'\nimport { failure, Result, success } from '@bessemer/cornerstone/result'\n\nexport type TypePath<T extends TypePathType = TypePathType> = NominalType<TypePathConcreteType, ['TypePath', T]>\n\nexport const of = <T extends TypePathConcreteType>(value: T): TypePath<InferTypePath<T>> => {\n return value as TypePath<InferTypePath<T>>\n}\n\nconst TypePathRegex =\n /^(?:[a-zA-Z_$][a-zA-Z0-9_$]*|\\*|\\d+|\\[\\s*(?:\\*|\\d+(?:\\s*,\\s*\\d+)*)\\s*])(?:\\.(?:[a-zA-Z_$][a-zA-Z0-9_$]*|\\*|\\d+)|\\[\\s*(?:\\*|\\d+(?:\\s*,\\s*\\d+)*)\\s*])*$|^$/\n\nexport const fromString = <T extends string>(path: T): TypePath<ParseTypePath<T>> => {\n assert(TypePathRegex.test(path), () => `Unable to parse TypePath from string: ${path}`)\n\n if (path === '') {\n return [] as TypePath<ParseTypePath<T>>\n }\n\n const segments: Array<string | Array<string | number>> = []\n let current = ''\n let i = 0\n\n while (i < path.length) {\n const char = path[i]\n\n if (char === '.') {\n if (current) {\n segments.push(current)\n current = ''\n }\n i++\n } else if (char === '[') {\n if (current) {\n segments.push(current)\n current = ''\n }\n\n // Find the matching closing bracket\n let bracketContent = ''\n i++ // Skip opening bracket\n let depth = 1\n\n while (i < path.length && depth > 0) {\n const bracketChar = path[i]\n if (bracketChar === '[') {\n depth++\n } else if (bracketChar === ']') {\n depth--\n }\n\n if (depth > 0) {\n bracketContent += bracketChar\n }\n i++\n }\n\n if (bracketContent === '*') {\n segments.push('*')\n } else {\n const indices = bracketContent\n .split(',')\n .map((s) => s.trim())\n .map((s) => parseInt(s, 10))\n\n segments.push(indices)\n }\n } else {\n current += char\n i++\n }\n }\n\n // Add any remaining current segment\n if (current) {\n segments.push(current)\n }\n\n return segments as TypePath<ParseTypePath<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 getValue = <T extends TypePathType, N>(path: TypePath<T>, object: N): TypePathGet<T, N> => {\n let current: unknown = object\n let collectorMode = false\n\n for (const selector of path) {\n if (isNil(current)) {\n return undefined as TypePathGet<T, N>\n }\n\n if (collectorMode) {\n if (!Array.isArray(current)) {\n throw new Error('Illegal State - in collectorMode but current value is not an Array')\n }\n\n const result = current.flatMap((it) => {\n const [value, isCollecting] = evaluateSelector(selector, it)\n if (isCollecting) {\n return value\n } else {\n return [value]\n }\n })\n\n current = result\n } else {\n const [result, isCollecting] = evaluateSelector(selector, current)\n current = result\n collectorMode = isCollecting\n }\n }\n\n return current as TypePathGet<T, N>\n}\n\nconst evaluateSelector = (selector: TypePathSelector, current: unknown): [unknown, boolean] => {\n if (isWildcardSelector(selector)) {\n return evaluateWildcardSelector(current)\n }\n\n if (Array.isArray(selector)) {\n return evaluateIndexSelector(selector as IndexSelector, current)\n }\n\n return evaluateNameSelector(selector, current)\n}\n\nconst evaluateNameSelector = (selector: NameSelector, current: unknown): [unknown, boolean] => {\n if (Array.isArray(current)) {\n const numberSelector = Number(selector)\n assert(isNumber(numberSelector), () => `Can't apply non-numeric selector: ${selector} to array: ${current}`)\n return evaluateIndexSelector([numberSelector], current)\n }\n\n if (!isObject(current)) {\n return [undefined, false]\n }\n\n return [current[selector], false]\n}\n\nconst evaluateWildcardSelector = (current: unknown): [unknown, boolean] => {\n if (Array.isArray(current)) {\n return [current, true]\n }\n\n if (isObject(current)) {\n throw new Error('Wildcard operations on Objects is not yet supported')\n }\n\n throw new Error(`Unable to apply wildcard operator to value: ${current}`)\n}\n\nconst evaluateIndexSelector = (selector: IndexSelector, current: unknown): [unknown, boolean] => {\n if (!Array.isArray(current)) {\n throw new Error(`Unable to apply index operator to value: ${current}`)\n }\n\n if (selector.length === 1) {\n return [current[only(selector)], false]\n }\n\n const indexSelector = selector as IndexSelector\n const result = indexSelector.map((it) => current[it])\n return [result, true]\n}\n\nexport const isWildcardSelector = (selector: TypePathSelector): selector is WildcardSelector => {\n return selector === '*'\n}\n\nexport const matches = <MatchingPath extends TypePathType>(\n targetPath: TypePath,\n matchingPath: TypePath<MatchingPath>\n): targetPath is TypePath<MatchingPath> => {\n if (targetPath.length < matchingPath.length) {\n return false\n }\n\n let index = 0\n for (const targetPathSelector of targetPath) {\n const matchingPathSelector = matchingPath[index]\n\n if (isNil(matchingPathSelector)) {\n return true\n } else if (isWildcardSelector(matchingPathSelector)) {\n // Matching path wildcards always match - they're wild\n } else if (isWildcardSelector(targetPathSelector)) {\n return false\n } else if (Array.isArray(matchingPathSelector)) {\n if (Array.isArray(targetPathSelector)) {\n if (!containsAll(matchingPathSelector, targetPathSelector)) {\n return false\n }\n } else {\n if (!contains(matchingPathSelector, Number(targetPathSelector))) {\n return false\n }\n }\n } else {\n if (Array.isArray(targetPathSelector)) {\n if (targetPathSelector.length !== 1) {\n return false\n }\n\n const targetPathSelectorIndex = only(targetPathSelector)\n if (targetPathSelectorIndex !== Number(matchingPathSelector)) {\n return false\n }\n } else {\n if (targetPathSelector !== matchingPathSelector) {\n return false\n }\n }\n }\n\n index++\n }\n\n return true\n}\n\nexport const intersectAny = (targetPath: TypePath, intersectingPath: TypePath): Result<TypePath> => {\n if (targetPath.length < intersectingPath.length) {\n return failure(new Error(`TypePath: ${intersectingPath} can't intersect target TypePath: ${targetPath}`))\n }\n\n let index = 0\n let result: TypePathConcreteType = []\n for (const targetPathSelector of targetPath) {\n const intersectingPathSelector = intersectingPath[index]\n const makeError = () =>\n new Error(`Path mismatch when intersecting. targetPath: ${targetPathSelector} does not match intersectingPath: ${intersectingPathSelector}`)\n\n if (isNil(intersectingPathSelector)) {\n return success(of(result))\n } else if (isWildcardSelector(intersectingPathSelector)) {\n result.push(targetPathSelector)\n } else if (isWildcardSelector(targetPathSelector)) {\n return failure(makeError())\n } else if (Array.isArray(intersectingPathSelector)) {\n if (Array.isArray(targetPathSelector)) {\n const filteredTargetPaths = targetPathSelector.filter((it) => contains(intersectingPathSelector, it))\n if (isEmpty(filteredTargetPaths)) {\n return failure(makeError())\n }\n\n result.push(filteredTargetPaths)\n } else {\n if (!contains(intersectingPathSelector, Number(targetPathSelector))) {\n return failure(makeError())\n }\n\n result.push(targetPathSelector)\n }\n } else {\n if (Array.isArray(targetPathSelector)) {\n if (targetPathSelector.length !== 1) {\n return failure(makeError())\n }\n\n const targetPathSelectorIndex = only(targetPathSelector)\n if (targetPathSelectorIndex !== Number(intersectingPathSelector)) {\n return failure(makeError())\n }\n\n result.push(targetPathSelector)\n } else {\n if (targetPathSelector !== intersectingPathSelector) {\n return failure(makeError())\n }\n\n result.push(targetPathSelector)\n }\n }\n\n index++\n }\n\n return success(of(result))\n}\n\n// JOHN this needs to do a type resolution step...\nexport const intersect = <TargetPath extends TypePathType, IntersectingPath extends TypePathType>(\n targetPath: TypePath<TargetPath>,\n intersectingPath: TypePath<IntersectingPath>\n): TypePath => {\n const result = intersectAny(targetPath, intersectingPath)\n if (!result.isSuccess) {\n throw result.value\n }\n\n return result.value\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,12 @@
1
+ import { TaggedType } from '@bessemer/cornerstone/types';
2
+ import Zod from 'zod';
3
+ export type ResourceKey = string;
4
+ export type ResourceNamespace = TaggedType<string, 'ResourceNamespace'>;
5
+ export declare const namespace: (value: string) => ResourceNamespace;
6
+ export declare const ResourceNamespaceSchema: Zod.ZodPipe<Zod.ZodString, Zod.ZodTransform<ResourceNamespace, string>>;
7
+ export declare const applyNamespace: (name: ResourceNamespace, key: ResourceKey) => ResourceKey;
8
+ export declare const applyNamespaceAll: (name: ResourceNamespace, keys: Array<ResourceKey>) => Array<ResourceKey>;
9
+ export declare const stripNamespace: (name: ResourceNamespace, key: ResourceKey) => ResourceKey;
10
+ export declare const stripNamespaceAll: (name: ResourceNamespace, keys: Array<ResourceKey>) => Array<ResourceKey>;
11
+ export declare const extendNamespace: (...names: Array<ResourceNamespace>) => ResourceNamespace;
12
+ //# sourceMappingURL=resource-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-key.d.ts","sourceRoot":"","sources":["../src/resource-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,GAAG,MAAM,KAAK,CAAA;AAGrB,MAAM,MAAM,WAAW,GAAG,MAAM,CAAA;AAIhC,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;AAEvE,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,iBAEzC,CAAA;AAED,eAAO,MAAM,uBAAuB,yEAAoC,CAAA;AAExE,eAAO,MAAM,cAAc,GAAI,MAAM,iBAAiB,EAAE,KAAK,WAAW,KAAG,WAE1E,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,MAAM,iBAAiB,EAAE,MAAM,KAAK,CAAC,WAAW,CAAC,KAAG,KAAK,CAAC,WAAW,CAEtG,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,MAAM,iBAAiB,EAAE,KAAK,WAAW,KAAG,WAE1E,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,MAAM,iBAAiB,EAAE,MAAM,KAAK,CAAC,WAAW,CAAC,KAAG,KAAK,CAAC,WAAW,CAEtG,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,GAAG,OAAO,KAAK,CAAC,iBAAiB,CAAC,KAAG,iBAEpE,CAAA"}
@@ -0,0 +1,33 @@
1
+ // src/resource-key.ts
2
+ import Zod from "zod";
3
+ import { removeStart } from "@bessemer/cornerstone/string";
4
+ var ResourceNamespaceSeparator = "/";
5
+ var namespace = (value) => {
6
+ return value;
7
+ };
8
+ var ResourceNamespaceSchema = Zod.string().transform(namespace);
9
+ var applyNamespace = (name, key) => {
10
+ return `${name}${ResourceNamespaceSeparator}${key}`;
11
+ };
12
+ var applyNamespaceAll = (name, keys) => {
13
+ return keys.map((it) => applyNamespace(name, it));
14
+ };
15
+ var stripNamespace = (name, key) => {
16
+ return removeStart(key, `${name}${ResourceNamespaceSeparator}`);
17
+ };
18
+ var stripNamespaceAll = (name, keys) => {
19
+ return keys.map((it) => stripNamespace(name, it));
20
+ };
21
+ var extendNamespace = (...names) => {
22
+ return namespace(names.join(ResourceNamespaceSeparator));
23
+ };
24
+ export {
25
+ ResourceNamespaceSchema,
26
+ applyNamespace,
27
+ applyNamespaceAll,
28
+ extendNamespace,
29
+ namespace,
30
+ stripNamespace,
31
+ stripNamespaceAll
32
+ };
33
+ //# sourceMappingURL=resource-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource-key.ts"],"sourcesContent":["import { TaggedType } from '@bessemer/cornerstone/types'\nimport Zod from 'zod'\nimport { removeStart } from '@bessemer/cornerstone/string'\n\nexport type ResourceKey = string\n\nconst ResourceNamespaceSeparator = '/'\n\nexport type ResourceNamespace = TaggedType<string, 'ResourceNamespace'>\n\nexport const namespace = (value: string): ResourceNamespace => {\n return value as ResourceNamespace\n}\n\nexport const ResourceNamespaceSchema = Zod.string().transform(namespace)\n\nexport const applyNamespace = (name: ResourceNamespace, key: ResourceKey): ResourceKey => {\n return `${name}${ResourceNamespaceSeparator}${key}`\n}\n\nexport const applyNamespaceAll = (name: ResourceNamespace, keys: Array<ResourceKey>): Array<ResourceKey> => {\n return keys.map((it) => applyNamespace(name, it))\n}\n\nexport const stripNamespace = (name: ResourceNamespace, key: ResourceKey): ResourceKey => {\n return removeStart(key, `${name}${ResourceNamespaceSeparator}`)\n}\n\nexport const stripNamespaceAll = (name: ResourceNamespace, keys: Array<ResourceKey>): Array<ResourceKey> => {\n return keys.map((it) => stripNamespace(name, it))\n}\n\nexport const extendNamespace = (...names: Array<ResourceNamespace>): ResourceNamespace => {\n return namespace(names.join(ResourceNamespaceSeparator))\n}\n"],"mappings":";AACA,OAAO,SAAS;AAChB,SAAS,mBAAmB;AAI5B,IAAM,6BAA6B;AAI5B,IAAM,YAAY,CAAC,UAAqC;AAC7D,SAAO;AACT;AAEO,IAAM,0BAA0B,IAAI,OAAO,EAAE,UAAU,SAAS;AAEhE,IAAM,iBAAiB,CAAC,MAAyB,QAAkC;AACxF,SAAO,GAAG,IAAI,GAAG,0BAA0B,GAAG,GAAG;AACnD;AAEO,IAAM,oBAAoB,CAAC,MAAyB,SAAiD;AAC1G,SAAO,KAAK,IAAI,CAAC,OAAO,eAAe,MAAM,EAAE,CAAC;AAClD;AAEO,IAAM,iBAAiB,CAAC,MAAyB,QAAkC;AACxF,SAAO,YAAY,KAAK,GAAG,IAAI,GAAG,0BAA0B,EAAE;AAChE;AAEO,IAAM,oBAAoB,CAAC,MAAyB,SAAiD;AAC1G,SAAO,KAAK,IAAI,CAAC,OAAO,eAAe,MAAM,EAAE,CAAC;AAClD;AAEO,IAAM,kBAAkB,IAAI,UAAuD;AACxF,SAAO,UAAU,MAAM,KAAK,0BAA0B,CAAC;AACzD;","names":[]}
package/dist/store.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { ResourceKey } from '@bessemer/cornerstone/resource';
1
+ import { ResourceKey } from '@bessemer/cornerstone/resource-key';
2
2
  import { RecordEntry } from '@bessemer/cornerstone/entry';
3
3
  export interface LocalStore<T> {
4
4
  setValue: (value: T | undefined) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAC5D,OAAO,EAAM,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAI7D,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,KAAK,IAAI,CAAA;IACxC,QAAQ,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;CAC9B;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,SAAS,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,KAAK,IAAI,CAAA;IAC/D,QAAQ,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,KAAK,IAAI,CAAA;IAE1D,UAAU,EAAE,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;IACvC,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9D,QAAQ,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,CAAC,GAAG,SAAS,CAAA;CAC9C;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,UAAU,EAAE,MAAM,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAA;CACzC;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC,WAAW,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1E,UAAU,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAErE,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACzE,UAAU,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAA;CACzD;AAED,8BAAsB,2BAA2B,CAAC,CAAC,CAAE,YAAW,mBAAmB,CAAC,CAAC,CAAC;IACpF,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAEnF,UAAU,GAAU,KAAK,WAAW,EAAE,OAAO,CAAC,GAAG,SAAS,KAAG,OAAO,CAAC,IAAI,CAAC,CAEzE;IAED,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAElF,UAAU,GAAU,KAAK,WAAW,KAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAE5D;CACF;AAED,8BAAsB,0BAA0B,CAAC,CAAC,CAAE,SAAQ,2BAA2B,CAAC,CAAC,CAAE,YAAW,kBAAkB,CAAC,CAAC,CAAC;IACzH,QAAQ,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,KAAK,IAAI,CAAA;IAExE,QAAQ,GAAI,KAAK,WAAW,EAAE,OAAO,CAAC,GAAG,SAAS,KAAG,IAAI,CAExD;IAED,QAAQ,CAAC,UAAU,EAAE,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;IAChD,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;IAEvE,QAAQ,GAAI,KAAK,WAAW,KAAG,CAAC,GAAG,SAAS,CAE3C;IAED,WAAW,GAAU,MAAM,KAAK,CAAC,WAAW,CAAC,KAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAE7E;IAED,WAAW,GAAU,SAAS,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,KAAG,OAAO,CAAC,IAAI,CAAC,CAE9E;CACF;AAED,eAAO,MAAM,OAAO,GAAI,CAAC,OAAK,kBAAkB,CAAC,CAAC,CAsBjD,CAAA"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
package/dist/store.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/store.ts"],"sourcesContent":["import { ResourceKey } from '@bessemer/cornerstone/resource'\nimport { of, RecordEntry } from '@bessemer/cornerstone/entry'\nimport { first } from '@bessemer/cornerstone/array'\nimport { isNil, isPresent } from '@bessemer/cornerstone/object'\n\nexport interface LocalStore<T> {\n setValue: (value: T | undefined) => void\n getValue: () => T | undefined\n}\n\nexport interface LocalKeyValueStore<T> {\n setValues: (entries: Array<RecordEntry<T | undefined>>) => void\n setValue: (key: ResourceKey, value: T | undefined) => void\n\n getEntries: () => Array<RecordEntry<T>>\n getValues: (keys: Array<ResourceKey>) => Array<RecordEntry<T>>\n getValue: (key: ResourceKey) => T | undefined\n}\n\nexport interface RemoteStore<T> {\n writeValue: (value: T | undefined) => Promise<void>\n fetchValue: () => Promise<T | undefined>\n}\n\nexport interface RemoteKeyValueStore<T> {\n writeValues: (entries: Array<RecordEntry<T | undefined>>) => Promise<void>\n writeValue: (key: ResourceKey, value: T | undefined) => Promise<void>\n\n fetchValues: (keys: Array<ResourceKey>) => Promise<Array<RecordEntry<T>>>\n fetchValue: (key: ResourceKey) => Promise<T | undefined>\n}\n\nexport abstract class AbstractRemoteKeyValueStore<T> implements RemoteKeyValueStore<T> {\n abstract writeValues: (entries: Array<RecordEntry<T | undefined>>) => Promise<void>\n\n writeValue = async (key: ResourceKey, value: T | undefined): Promise<void> => {\n await this.writeValues([of(key, value)])\n }\n\n abstract fetchValues: (keys: Array<ResourceKey>) => Promise<Array<RecordEntry<T>>>\n\n fetchValue = async (key: ResourceKey): Promise<T | undefined> => {\n return first(await this.fetchValues([key]))?.[1]\n }\n}\n\nexport abstract class AbstractLocalKeyValueStore<T> extends AbstractRemoteKeyValueStore<T> implements LocalKeyValueStore<T> {\n abstract setValues: (entries: Array<RecordEntry<T | undefined>>) => void\n\n setValue = (key: ResourceKey, value: T | undefined): void => {\n this.setValues([of(key, value)])\n }\n\n abstract getEntries: () => Array<RecordEntry<T>>\n abstract getValues: (keys: Array<ResourceKey>) => Array<RecordEntry<T>>\n\n getValue = (key: ResourceKey): T | undefined => {\n return first(this.getValues([key]))?.[1]\n }\n\n fetchValues = async (keys: Array<ResourceKey>): Promise<Array<RecordEntry<T>>> => {\n return this.getValues(keys)\n }\n\n writeValues = async (entries: Array<RecordEntry<T | undefined>>): Promise<void> => {\n this.setValues(entries)\n }\n}\n\nexport const fromMap = <T>(): LocalKeyValueStore<T> => {\n const map = new Map<string, T>()\n\n return new (class extends AbstractLocalKeyValueStore<T> {\n override getEntries = (): Array<RecordEntry<T>> => {\n return Array.from(map.entries())\n }\n\n override setValues = (entries: RecordEntry<T | undefined>[]): void => {\n entries.forEach(([key, value]) => {\n if (isNil(value)) {\n map.delete(key)\n } else {\n map.set(key, value)\n }\n })\n }\n\n override getValues = (keys: Array<ResourceKey>): Array<RecordEntry<T>> => {\n return keys.map((key) => of(key, map.get(key)!)).filter((it) => isPresent(it[1]))\n }\n })()\n}\n"],"mappings":";AACA,SAAS,UAAuB;AAChC,SAAS,aAAa;AACtB,SAAS,OAAO,iBAAiB;AA6B1B,IAAe,8BAAf,MAAgF;AAAA,EAGrF,aAAa,OAAO,KAAkB,UAAwC;AAC5E,UAAM,KAAK,YAAY,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC;AAAA,EACzC;AAAA,EAIA,aAAa,OAAO,QAA6C;AAC/D,WAAO,MAAM,MAAM,KAAK,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AAAA,EACjD;AACF;AAEO,IAAe,6BAAf,cAAqD,4BAAgE;AAAA,EAG1H,WAAW,CAAC,KAAkB,UAA+B;AAC3D,SAAK,UAAU,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC;AAAA,EACjC;AAAA,EAKA,WAAW,CAAC,QAAoC;AAC9C,WAAO,MAAM,KAAK,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AAAA,EACzC;AAAA,EAEA,cAAc,OAAO,SAA6D;AAChF,WAAO,KAAK,UAAU,IAAI;AAAA,EAC5B;AAAA,EAEA,cAAc,OAAO,YAA8D;AACjF,SAAK,UAAU,OAAO;AAAA,EACxB;AACF;AAEO,IAAM,UAAU,MAAgC;AACrD,QAAM,MAAM,oBAAI,IAAe;AAE/B,SAAO,IAAK,cAAc,2BAA8B;AAAA,IAC7C,aAAa,MAA6B;AACjD,aAAO,MAAM,KAAK,IAAI,QAAQ,CAAC;AAAA,IACjC;AAAA,IAES,YAAY,CAAC,YAAgD;AACpE,cAAQ,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAChC,YAAI,MAAM,KAAK,GAAG;AAChB,cAAI,OAAO,GAAG;AAAA,QAChB,OAAO;AACL,cAAI,IAAI,KAAK,KAAK;AAAA,QACpB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAES,YAAY,CAAC,SAAoD;AACxE,aAAO,KAAK,IAAI,CAAC,QAAQ,GAAG,KAAK,IAAI,IAAI,GAAG,CAAE,CAAC,EAAE,OAAO,CAAC,OAAO,UAAU,GAAG,CAAC,CAAC,CAAC;AAAA,IAClF;AAAA,EACF,EAAG;AACL;","names":[]}
1
+ {"version":3,"sources":["../src/store.ts"],"sourcesContent":["import { ResourceKey } from '@bessemer/cornerstone/resource-key'\nimport { of, RecordEntry } from '@bessemer/cornerstone/entry'\nimport { first } from '@bessemer/cornerstone/array'\nimport { isNil, isPresent } from '@bessemer/cornerstone/object'\n\nexport interface LocalStore<T> {\n setValue: (value: T | undefined) => void\n getValue: () => T | undefined\n}\n\nexport interface LocalKeyValueStore<T> {\n setValues: (entries: Array<RecordEntry<T | undefined>>) => void\n setValue: (key: ResourceKey, value: T | undefined) => void\n\n getEntries: () => Array<RecordEntry<T>>\n getValues: (keys: Array<ResourceKey>) => Array<RecordEntry<T>>\n getValue: (key: ResourceKey) => T | undefined\n}\n\nexport interface RemoteStore<T> {\n writeValue: (value: T | undefined) => Promise<void>\n fetchValue: () => Promise<T | undefined>\n}\n\nexport interface RemoteKeyValueStore<T> {\n writeValues: (entries: Array<RecordEntry<T | undefined>>) => Promise<void>\n writeValue: (key: ResourceKey, value: T | undefined) => Promise<void>\n\n fetchValues: (keys: Array<ResourceKey>) => Promise<Array<RecordEntry<T>>>\n fetchValue: (key: ResourceKey) => Promise<T | undefined>\n}\n\nexport abstract class AbstractRemoteKeyValueStore<T> implements RemoteKeyValueStore<T> {\n abstract writeValues: (entries: Array<RecordEntry<T | undefined>>) => Promise<void>\n\n writeValue = async (key: ResourceKey, value: T | undefined): Promise<void> => {\n await this.writeValues([of(key, value)])\n }\n\n abstract fetchValues: (keys: Array<ResourceKey>) => Promise<Array<RecordEntry<T>>>\n\n fetchValue = async (key: ResourceKey): Promise<T | undefined> => {\n return first(await this.fetchValues([key]))?.[1]\n }\n}\n\nexport abstract class AbstractLocalKeyValueStore<T> extends AbstractRemoteKeyValueStore<T> implements LocalKeyValueStore<T> {\n abstract setValues: (entries: Array<RecordEntry<T | undefined>>) => void\n\n setValue = (key: ResourceKey, value: T | undefined): void => {\n this.setValues([of(key, value)])\n }\n\n abstract getEntries: () => Array<RecordEntry<T>>\n abstract getValues: (keys: Array<ResourceKey>) => Array<RecordEntry<T>>\n\n getValue = (key: ResourceKey): T | undefined => {\n return first(this.getValues([key]))?.[1]\n }\n\n fetchValues = async (keys: Array<ResourceKey>): Promise<Array<RecordEntry<T>>> => {\n return this.getValues(keys)\n }\n\n writeValues = async (entries: Array<RecordEntry<T | undefined>>): Promise<void> => {\n this.setValues(entries)\n }\n}\n\nexport const fromMap = <T>(): LocalKeyValueStore<T> => {\n const map = new Map<string, T>()\n\n return new (class extends AbstractLocalKeyValueStore<T> {\n override getEntries = (): Array<RecordEntry<T>> => {\n return Array.from(map.entries())\n }\n\n override setValues = (entries: RecordEntry<T | undefined>[]): void => {\n entries.forEach(([key, value]) => {\n if (isNil(value)) {\n map.delete(key)\n } else {\n map.set(key, value)\n }\n })\n }\n\n override getValues = (keys: Array<ResourceKey>): Array<RecordEntry<T>> => {\n return keys.map((key) => of(key, map.get(key)!)).filter((it) => isPresent(it[1]))\n }\n })()\n}\n"],"mappings":";AACA,SAAS,UAAuB;AAChC,SAAS,aAAa;AACtB,SAAS,OAAO,iBAAiB;AA6B1B,IAAe,8BAAf,MAAgF;AAAA,EAGrF,aAAa,OAAO,KAAkB,UAAwC;AAC5E,UAAM,KAAK,YAAY,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC;AAAA,EACzC;AAAA,EAIA,aAAa,OAAO,QAA6C;AAC/D,WAAO,MAAM,MAAM,KAAK,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AAAA,EACjD;AACF;AAEO,IAAe,6BAAf,cAAqD,4BAAgE;AAAA,EAG1H,WAAW,CAAC,KAAkB,UAA+B;AAC3D,SAAK,UAAU,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC;AAAA,EACjC;AAAA,EAKA,WAAW,CAAC,QAAoC;AAC9C,WAAO,MAAM,KAAK,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AAAA,EACzC;AAAA,EAEA,cAAc,OAAO,SAA6D;AAChF,WAAO,KAAK,UAAU,IAAI;AAAA,EAC5B;AAAA,EAEA,cAAc,OAAO,YAA8D;AACjF,SAAK,UAAU,OAAO;AAAA,EACxB;AACF;AAEO,IAAM,UAAU,MAAgC;AACrD,QAAM,MAAM,oBAAI,IAAe;AAE/B,SAAO,IAAK,cAAc,2BAA8B;AAAA,IAC7C,aAAa,MAA6B;AACjD,aAAO,MAAM,KAAK,IAAI,QAAQ,CAAC;AAAA,IACjC;AAAA,IAES,YAAY,CAAC,YAAgD;AACpE,cAAQ,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAChC,YAAI,MAAM,KAAK,GAAG;AAChB,cAAI,OAAO,GAAG;AAAA,QAChB,OAAO;AACL,cAAI,IAAI,KAAK,KAAK;AAAA,QACpB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAES,YAAY,CAAC,SAAoD;AACxE,aAAO,KAAK,IAAI,CAAC,QAAQ,GAAG,KAAK,IAAI,IAAI,GAAG,CAAE,CAAC,EAAE,OAAO,CAAC,OAAO,UAAU,GAAG,CAAC,CAAC,CAAC;AAAA,IAClF;AAAA,EACF,EAAG;AACL;","names":[]}
@@ -1,5 +1,5 @@
1
1
  import Zod, { ZodType } from 'zod';
2
- import { ResourceKey } from '@bessemer/cornerstone/resource';
2
+ import { ResourceKey } from '@bessemer/cornerstone/resource-key';
3
3
  import { Result } from '@bessemer/cornerstone/result';
4
4
  export declare const parse: <T extends ZodType>(type: T, data: unknown) => Result<Zod.infer<T>>;
5
5
  export declare const parseOrThrow: <T extends ZodType>(type: T, data: unknown) => Zod.infer<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"zod-util.d.ts","sourceRoot":"","sources":["../src/zod-util.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAE5D,OAAO,EAA4B,MAAM,EAAW,MAAM,8BAA8B,CAAA;AAGxF,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,OAAO,KAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAOpF,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,OAAO,KAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAEnF,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,MAAM,KAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAOvF,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,MAAM,KAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAItF,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,4KAE5C,CAAA;AAED,eAAO,MAAM,GAAG,QAAO,OAAO,CAAC,WAAW,CAEzC,CAAA"}
1
+ {"version":3,"file":"zod-util.d.ts","sourceRoot":"","sources":["../src/zod-util.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAA;AAEhE,OAAO,EAA4B,MAAM,EAAW,MAAM,8BAA8B,CAAA;AAGxF,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,OAAO,KAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAOpF,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,OAAO,KAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAEnF,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,MAAM,KAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAOvF,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,MAAM,KAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAItF,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,4KAE5C,CAAA;AAED,eAAO,MAAM,GAAG,QAAO,OAAO,CAAC,WAAW,CAEzC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/zod-util.ts"],"sourcesContent":["import Zod, { ZodType } from 'zod'\nimport { ResourceKey } from '@bessemer/cornerstone/resource'\nimport { parse as jsonParse } from '@bessemer/cornerstone/json'\nimport { failure, getValueOrThrow, Result, success } from '@bessemer/cornerstone/result'\nimport { Assertions } from '@bessemer/cornerstone/index'\n\nexport const parse = <T extends ZodType>(type: T, data: unknown): Result<Zod.infer<T>> => {\n const result = type.safeParse(data)\n if (result.success) {\n return success(result.data)\n } else {\n return failure(result.error)\n }\n}\n\nexport const parseOrThrow = <T extends ZodType>(type: T, data: unknown): Zod.infer<T> => {\n return getValueOrThrow(parse(type, data))\n}\n\nexport const parseJson = <T extends ZodType>(type: T, data: string): Result<Zod.infer<T>> => {\n const result = jsonParse(data)\n if (!result.isSuccess) {\n return result\n }\n\n return parse(type, result.value)\n}\n\nexport const parseJsonOrThrow = <T extends ZodType>(type: T, data: string): Zod.infer<T> => {\n const result = parseJson(type, data)\n Assertions.assert(result.isSuccess)\n return result.value\n}\n\nexport const arrayable = <T>(type: ZodType<T>) => {\n return Zod.union([type, Zod.array(type)])\n}\n\nexport const key = (): ZodType<ResourceKey> => {\n return Zod.string()\n}\n"],"mappings":";AAAA,OAAO,SAAsB;AAE7B,SAAS,SAAS,iBAAiB;AACnC,SAAS,SAAS,iBAAyB,eAAe;AAC1D,SAAS,kBAAkB;AAEpB,IAAM,QAAQ,CAAoB,MAAS,SAAwC;AACxF,QAAM,SAAS,KAAK,UAAU,IAAI;AAClC,MAAI,OAAO,SAAS;AAClB,WAAO,QAAQ,OAAO,IAAI;AAAA,EAC5B,OAAO;AACL,WAAO,QAAQ,OAAO,KAAK;AAAA,EAC7B;AACF;AAEO,IAAM,eAAe,CAAoB,MAAS,SAAgC;AACvF,SAAO,gBAAgB,MAAM,MAAM,IAAI,CAAC;AAC1C;AAEO,IAAM,YAAY,CAAoB,MAAS,SAAuC;AAC3F,QAAM,SAAS,UAAU,IAAI;AAC7B,MAAI,CAAC,OAAO,WAAW;AACrB,WAAO;AAAA,EACT;AAEA,SAAO,MAAM,MAAM,OAAO,KAAK;AACjC;AAEO,IAAM,mBAAmB,CAAoB,MAAS,SAA+B;AAC1F,QAAM,SAAS,UAAU,MAAM,IAAI;AACnC,aAAW,OAAO,OAAO,SAAS;AAClC,SAAO,OAAO;AAChB;AAEO,IAAM,YAAY,CAAI,SAAqB;AAChD,SAAO,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,IAAI,CAAC,CAAC;AAC1C;AAEO,IAAM,MAAM,MAA4B;AAC7C,SAAO,IAAI,OAAO;AACpB;","names":[]}
1
+ {"version":3,"sources":["../src/zod-util.ts"],"sourcesContent":["import Zod, { ZodType } from 'zod'\nimport { ResourceKey } from '@bessemer/cornerstone/resource-key'\nimport { parse as jsonParse } from '@bessemer/cornerstone/json'\nimport { failure, getValueOrThrow, Result, success } from '@bessemer/cornerstone/result'\nimport { Assertions } from '@bessemer/cornerstone/index'\n\nexport const parse = <T extends ZodType>(type: T, data: unknown): Result<Zod.infer<T>> => {\n const result = type.safeParse(data)\n if (result.success) {\n return success(result.data)\n } else {\n return failure(result.error)\n }\n}\n\nexport const parseOrThrow = <T extends ZodType>(type: T, data: unknown): Zod.infer<T> => {\n return getValueOrThrow(parse(type, data))\n}\n\nexport const parseJson = <T extends ZodType>(type: T, data: string): Result<Zod.infer<T>> => {\n const result = jsonParse(data)\n if (!result.isSuccess) {\n return result\n }\n\n return parse(type, result.value)\n}\n\nexport const parseJsonOrThrow = <T extends ZodType>(type: T, data: string): Zod.infer<T> => {\n const result = parseJson(type, data)\n Assertions.assert(result.isSuccess)\n return result.value\n}\n\nexport const arrayable = <T>(type: ZodType<T>) => {\n return Zod.union([type, Zod.array(type)])\n}\n\nexport const key = (): ZodType<ResourceKey> => {\n return Zod.string()\n}\n"],"mappings":";AAAA,OAAO,SAAsB;AAE7B,SAAS,SAAS,iBAAiB;AACnC,SAAS,SAAS,iBAAyB,eAAe;AAC1D,SAAS,kBAAkB;AAEpB,IAAM,QAAQ,CAAoB,MAAS,SAAwC;AACxF,QAAM,SAAS,KAAK,UAAU,IAAI;AAClC,MAAI,OAAO,SAAS;AAClB,WAAO,QAAQ,OAAO,IAAI;AAAA,EAC5B,OAAO;AACL,WAAO,QAAQ,OAAO,KAAK;AAAA,EAC7B;AACF;AAEO,IAAM,eAAe,CAAoB,MAAS,SAAgC;AACvF,SAAO,gBAAgB,MAAM,MAAM,IAAI,CAAC;AAC1C;AAEO,IAAM,YAAY,CAAoB,MAAS,SAAuC;AAC3F,QAAM,SAAS,UAAU,IAAI;AAC7B,MAAI,CAAC,OAAO,WAAW;AACrB,WAAO;AAAA,EACT;AAEA,SAAO,MAAM,MAAM,OAAO,KAAK;AACjC;AAEO,IAAM,mBAAmB,CAAoB,MAAS,SAA+B;AAC1F,QAAM,SAAS,UAAU,MAAM,IAAI;AACnC,aAAW,OAAO,OAAO,SAAS;AAClC,SAAO,OAAO;AAChB;AAEO,IAAM,YAAY,CAAI,SAAqB;AAChD,SAAO,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,IAAI,CAAC,CAAC;AAC1C;AAEO,IAAM,MAAM,MAA4B;AAC7C,SAAO,IAAI,OAAO;AACpB;","names":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bessemer/cornerstone",
3
3
  "type": "module",
4
- "version": "0.5.83",
4
+ "version": "0.5.85",
5
5
  "module": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
7
7
  "sideEffects": false,
@@ -1,13 +0,0 @@
1
- import { NominalType } from '@bessemer/cornerstone/types';
2
- import { ZodType } from 'zod';
3
- export type ResourceKey = string;
4
- export type ResourceNamespace = NominalType<string, 'ResourceNamespace'>;
5
- export declare const ResourceNamespaceSchema: ZodType<ResourceNamespace>;
6
- export declare namespace ResourceKey {
7
- const namespace: (namespace: ResourceNamespace, key: ResourceKey) => ResourceKey;
8
- const namespaceAll: (namespace: ResourceNamespace, keys: Array<ResourceKey>) => Array<ResourceKey>;
9
- const stripNamespace: (namespace: ResourceNamespace, key: ResourceKey) => ResourceKey;
10
- const stripNamespaceAll: (namespace: ResourceNamespace, keys: Array<ResourceKey>) => Array<ResourceKey>;
11
- const extendNamespace: (...namespaces: Array<ResourceNamespace>) => ResourceNamespace;
12
- }
13
- //# sourceMappingURL=resource.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAY,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAGlC,MAAM,MAAM,WAAW,GAAG,MAAM,CAAA;AAEhC,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;AACxE,eAAO,MAAM,uBAAuB,EAAE,OAAO,CAAC,iBAAiB,CAAgB,CAAA;AAE/E,yBAAiB,WAAW,CAAC;IAGpB,MAAM,SAAS,GAAI,WAAW,iBAAiB,EAAE,KAAK,WAAW,KAAG,WAE1E,CAAA;IAEM,MAAM,YAAY,GAAI,WAAW,iBAAiB,EAAE,MAAM,KAAK,CAAC,WAAW,CAAC,KAAG,KAAK,CAAC,WAAW,CAEtG,CAAA;IAEM,MAAM,cAAc,GAAI,WAAW,iBAAiB,EAAE,KAAK,WAAW,KAAG,WAE/E,CAAA;IAEM,MAAM,iBAAiB,GAAI,WAAW,iBAAiB,EAAE,MAAM,KAAK,CAAC,WAAW,CAAC,KAAG,KAAK,CAAC,WAAW,CAE3G,CAAA;IAEM,MAAM,eAAe,GAAI,GAAG,YAAY,KAAK,CAAC,iBAAiB,CAAC,KAAG,iBAEzE,CAAA;CACF"}
package/dist/resource.js DELETED
@@ -1,28 +0,0 @@
1
- // src/resource.ts
2
- import Zod from "zod";
3
- import { removeStart } from "@bessemer/cornerstone/string";
4
- var ResourceNamespaceSchema = Zod.string();
5
- var ResourceKey;
6
- ((ResourceKey2) => {
7
- const ResourceNamespaceSeparator = "/";
8
- ResourceKey2.namespace = (namespace2, key) => {
9
- return `${namespace2}${ResourceNamespaceSeparator}${key}`;
10
- };
11
- ResourceKey2.namespaceAll = (namespace2, keys) => {
12
- return keys.map((it) => ResourceKey2.namespace(namespace2, it));
13
- };
14
- ResourceKey2.stripNamespace = (namespace2, key) => {
15
- return removeStart(key, `${namespace2}${ResourceNamespaceSeparator}`);
16
- };
17
- ResourceKey2.stripNamespaceAll = (namespace2, keys) => {
18
- return keys.map((it) => ResourceKey2.stripNamespace(namespace2, it));
19
- };
20
- ResourceKey2.extendNamespace = (...namespaces) => {
21
- return namespaces.join(ResourceNamespaceSeparator);
22
- };
23
- })(ResourceKey || (ResourceKey = {}));
24
- export {
25
- ResourceKey,
26
- ResourceNamespaceSchema
27
- };
28
- //# sourceMappingURL=resource.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/resource.ts"],"sourcesContent":["import { NominalType } from '@bessemer/cornerstone/types'\nimport Zod, { ZodType } from 'zod'\nimport { removeStart } from '@bessemer/cornerstone/string'\n\nexport type ResourceKey = string\n\nexport type ResourceNamespace = NominalType<string, 'ResourceNamespace'>\nexport const ResourceNamespaceSchema: ZodType<ResourceNamespace> = Zod.string()\n\nexport namespace ResourceKey {\n const ResourceNamespaceSeparator = '/'\n\n export const namespace = (namespace: ResourceNamespace, key: ResourceKey): ResourceKey => {\n return `${namespace}${ResourceNamespaceSeparator}${key}`\n }\n\n export const namespaceAll = (namespace: ResourceNamespace, keys: Array<ResourceKey>): Array<ResourceKey> => {\n return keys.map((it) => ResourceKey.namespace(namespace, it))\n }\n\n export const stripNamespace = (namespace: ResourceNamespace, key: ResourceKey): ResourceKey => {\n return removeStart(key, `${namespace}${ResourceNamespaceSeparator}`)\n }\n\n export const stripNamespaceAll = (namespace: ResourceNamespace, keys: Array<ResourceKey>): Array<ResourceKey> => {\n return keys.map((it) => ResourceKey.stripNamespace(namespace, it))\n }\n\n export const extendNamespace = (...namespaces: Array<ResourceNamespace>): ResourceNamespace => {\n return namespaces.join(ResourceNamespaceSeparator)\n }\n}\n"],"mappings":";AACA,OAAO,SAAsB;AAC7B,SAAS,mBAAmB;AAKrB,IAAM,0BAAsD,IAAI,OAAO;AAEvE,IAAU;AAAA,CAAV,CAAUA,iBAAV;AACL,QAAM,6BAA6B;AAE5B,EAAMA,aAAA,YAAY,CAACC,YAA8B,QAAkC;AACxF,WAAO,GAAGA,UAAS,GAAG,0BAA0B,GAAG,GAAG;AAAA,EACxD;AAEO,EAAMD,aAAA,eAAe,CAACC,YAA8B,SAAiD;AAC1G,WAAO,KAAK,IAAI,CAAC,OAAOD,aAAY,UAAUC,YAAW,EAAE,CAAC;AAAA,EAC9D;AAEO,EAAMD,aAAA,iBAAiB,CAACC,YAA8B,QAAkC;AAC7F,WAAO,YAAY,KAAK,GAAGA,UAAS,GAAG,0BAA0B,EAAE;AAAA,EACrE;AAEO,EAAMD,aAAA,oBAAoB,CAACC,YAA8B,SAAiD;AAC/G,WAAO,KAAK,IAAI,CAAC,OAAOD,aAAY,eAAeC,YAAW,EAAE,CAAC;AAAA,EACnE;AAEO,EAAMD,aAAA,kBAAkB,IAAI,eAA4D;AAC7F,WAAO,WAAW,KAAK,0BAA0B;AAAA,EACnD;AAAA,GArBe;","names":["ResourceKey","namespace"]}