@bessemer/cornerstone 0.5.62 → 0.5.64

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/dist/array.d.ts +23 -30
  2. package/dist/array.d.ts.map +1 -1
  3. package/dist/array.js +108 -58
  4. package/dist/array.js.map +1 -1
  5. package/dist/assertion.d.ts +1 -7
  6. package/dist/assertion.d.ts.map +1 -1
  7. package/dist/assertion.js +9 -46
  8. package/dist/assertion.js.map +1 -1
  9. package/dist/async-value.js +2 -2
  10. package/dist/async-value.js.map +1 -1
  11. package/dist/async.d.ts.map +1 -1
  12. package/dist/async.js +2 -2
  13. package/dist/async.js.map +1 -1
  14. package/dist/cache.d.ts +5 -5
  15. package/dist/cache.d.ts.map +1 -1
  16. package/dist/cache.js +21 -17
  17. package/dist/cache.js.map +1 -1
  18. package/dist/combinable.d.ts.map +1 -1
  19. package/dist/combinable.js +5 -4
  20. package/dist/combinable.js.map +1 -1
  21. package/dist/comparator.d.ts.map +1 -1
  22. package/dist/comparator.js +9 -8
  23. package/dist/comparator.js.map +1 -1
  24. package/dist/content.d.ts +2 -2
  25. package/dist/date.d.ts +1 -1
  26. package/dist/date.d.ts.map +1 -1
  27. package/dist/date.js +5 -4
  28. package/dist/date.js.map +1 -1
  29. package/dist/either.d.ts +0 -1
  30. package/dist/either.d.ts.map +1 -1
  31. package/dist/either.js +2 -3
  32. package/dist/either.js.map +1 -1
  33. package/dist/entry.d.ts +9 -7
  34. package/dist/entry.d.ts.map +1 -1
  35. package/dist/entry.js +5 -1
  36. package/dist/entry.js.map +1 -1
  37. package/dist/equalitor.d.ts +2 -1
  38. package/dist/equalitor.d.ts.map +1 -1
  39. package/dist/equalitor.js +6 -2
  40. package/dist/equalitor.js.map +1 -1
  41. package/dist/error-event.d.ts +5 -0
  42. package/dist/error-event.d.ts.map +1 -1
  43. package/dist/error-event.js +45 -12
  44. package/dist/error-event.js.map +1 -1
  45. package/dist/error.d.ts.map +1 -1
  46. package/dist/error.js +2 -2
  47. package/dist/error.js.map +1 -1
  48. package/dist/expression/array-expression.js +1 -1
  49. package/dist/expression/array-expression.js.map +1 -1
  50. package/dist/index.d.ts +2 -1
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +2 -0
  53. package/dist/index.js.map +1 -1
  54. package/dist/json.d.ts.map +1 -1
  55. package/dist/json.js +3 -3
  56. package/dist/json.js.map +1 -1
  57. package/dist/logger.d.ts.map +1 -1
  58. package/dist/logger.js +10 -9
  59. package/dist/logger.js.map +1 -1
  60. package/dist/map.d.ts +18 -0
  61. package/dist/map.d.ts.map +1 -0
  62. package/dist/map.js +110 -0
  63. package/dist/map.js.map +1 -0
  64. package/dist/math.d.ts +1 -1
  65. package/dist/math.d.ts.map +1 -1
  66. package/dist/math.js +4 -7
  67. package/dist/math.js.map +1 -1
  68. package/dist/misc.d.ts.map +1 -1
  69. package/dist/misc.js +4 -3
  70. package/dist/misc.js.map +1 -1
  71. package/dist/monetary-amount.d.ts +8 -2
  72. package/dist/monetary-amount.d.ts.map +1 -1
  73. package/dist/monetary-amount.js +23 -6
  74. package/dist/monetary-amount.js.map +1 -1
  75. package/dist/object.d.ts +5 -16
  76. package/dist/object.d.ts.map +1 -1
  77. package/dist/object.js +64 -19
  78. package/dist/object.js.map +1 -1
  79. package/dist/patch.d.ts.map +1 -1
  80. package/dist/patch.js +6 -5
  81. package/dist/patch.js.map +1 -1
  82. package/dist/property.d.ts.map +1 -1
  83. package/dist/property.js +5 -4
  84. package/dist/property.js.map +1 -1
  85. package/dist/range.d.ts +3 -1
  86. package/dist/range.d.ts.map +1 -1
  87. package/dist/range.js +2 -2
  88. package/dist/range.js.map +1 -1
  89. package/dist/reference.d.ts +1 -2
  90. package/dist/reference.d.ts.map +1 -1
  91. package/dist/reference.js +13 -10
  92. package/dist/reference.js.map +1 -1
  93. package/dist/resource.d.ts.map +1 -1
  94. package/dist/resource.js +2 -2
  95. package/dist/resource.js.map +1 -1
  96. package/dist/result.d.ts.map +1 -1
  97. package/dist/result.js +6 -5
  98. package/dist/result.js.map +1 -1
  99. package/dist/retry.d.ts.map +1 -1
  100. package/dist/retry.js +14 -9
  101. package/dist/retry.js.map +1 -1
  102. package/dist/rich-text.js +2 -2
  103. package/dist/rich-text.js.map +1 -1
  104. package/dist/signature.d.ts +3 -2
  105. package/dist/signature.d.ts.map +1 -1
  106. package/dist/signature.js +6 -4
  107. package/dist/signature.js.map +1 -1
  108. package/dist/sql/sql-expression-parser.d.ts.map +1 -1
  109. package/dist/sql/sql-expression-parser.js +24 -8
  110. package/dist/sql/sql-expression-parser.js.map +1 -1
  111. package/dist/store.d.ts +13 -13
  112. package/dist/store.d.ts.map +1 -1
  113. package/dist/store.js +9 -7
  114. package/dist/store.js.map +1 -1
  115. package/dist/string.d.ts.map +1 -1
  116. package/dist/string.js +3 -4
  117. package/dist/string.js.map +1 -1
  118. package/dist/tag.d.ts.map +1 -1
  119. package/dist/tag.js +12 -12
  120. package/dist/tag.js.map +1 -1
  121. package/dist/uri.d.ts.map +1 -1
  122. package/dist/uri.js +52 -50
  123. package/dist/uri.js.map +1 -1
  124. package/dist/url.d.ts.map +1 -1
  125. package/dist/url.js.map +1 -1
  126. package/dist/uuid.d.ts.map +1 -1
  127. package/dist/uuid.js +4 -3
  128. package/dist/uuid.js.map +1 -1
  129. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
package/dist/store.js CHANGED
@@ -1,19 +1,21 @@
1
1
  // src/store.ts
2
- import { Arrays, Entries, Objects } from "@bessemer/cornerstone";
2
+ import { of } from "@bessemer/cornerstone/entry";
3
+ import { first } from "@bessemer/cornerstone/array";
4
+ import { isNil, isPresent } from "@bessemer/cornerstone/object";
3
5
  var AbstractRemoteKeyValueStore = class {
4
6
  writeValue = async (key, value) => {
5
- await this.writeValues([Entries.of(key, value)]);
7
+ await this.writeValues([of(key, value)]);
6
8
  };
7
9
  fetchValue = async (key) => {
8
- return Arrays.first(await this.fetchValues([key]))?.[1];
10
+ return first(await this.fetchValues([key]))?.[1];
9
11
  };
10
12
  };
11
13
  var AbstractLocalKeyValueStore = class extends AbstractRemoteKeyValueStore {
12
14
  setValue = (key, value) => {
13
- this.setValues([Entries.of(key, value)]);
15
+ this.setValues([of(key, value)]);
14
16
  };
15
17
  getValue = (key) => {
16
- return Arrays.first(this.getValues([key]))?.[1];
18
+ return first(this.getValues([key]))?.[1];
17
19
  };
18
20
  fetchValues = async (keys) => {
19
21
  return this.getValues(keys);
@@ -30,7 +32,7 @@ var fromMap = () => {
30
32
  };
31
33
  setValues = (entries) => {
32
34
  entries.forEach(([key, value]) => {
33
- if (Objects.isNil(value)) {
35
+ if (isNil(value)) {
34
36
  map.delete(key);
35
37
  } else {
36
38
  map.set(key, value);
@@ -38,7 +40,7 @@ var fromMap = () => {
38
40
  });
39
41
  };
40
42
  getValues = (keys) => {
41
- return keys.map((key) => Entries.of(key, map.get(key))).filter((it) => Objects.isPresent(it[1]));
43
+ return keys.map((key) => of(key, map.get(key))).filter((it) => isPresent(it[1]));
42
44
  };
43
45
  }();
44
46
  };
package/dist/store.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/store.ts"],"sourcesContent":["import { ResourceKey } from '@bessemer/cornerstone/resource'\nimport { Entry } from '@bessemer/cornerstone/entry'\nimport { Arrays, Entries, Objects } from '@bessemer/cornerstone'\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<Entry<T | undefined>>) => void\n setValue: (key: ResourceKey, value: T | undefined) => void\n\n getEntries: () => Array<Entry<T>>\n getValues: (keys: Array<ResourceKey>) => Array<Entry<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<Entry<T | undefined>>) => Promise<void>\n writeValue: (key: ResourceKey, value: T | undefined) => Promise<void>\n\n fetchValues: (keys: Array<ResourceKey>) => Promise<Array<Entry<T>>>\n fetchValue: (key: ResourceKey) => Promise<T | undefined>\n}\n\nexport abstract class AbstractRemoteKeyValueStore<T> implements RemoteKeyValueStore<T> {\n abstract writeValues: (entries: Array<Entry<T | undefined>>) => Promise<void>\n\n writeValue = async (key: ResourceKey, value: T | undefined): Promise<void> => {\n await this.writeValues([Entries.of(key, value)])\n }\n\n abstract fetchValues: (keys: Array<ResourceKey>) => Promise<Array<Entry<T>>>\n\n fetchValue = async (key: ResourceKey): Promise<T | undefined> => {\n return Arrays.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<Entry<T | undefined>>) => void\n\n setValue = (key: ResourceKey, value: T | undefined): void => {\n this.setValues([Entries.of(key, value)])\n }\n\n abstract getEntries: () => Array<Entry<T>>\n abstract getValues: (keys: Array<ResourceKey>) => Array<Entry<T>>\n\n getValue = (key: ResourceKey): T | undefined => {\n return Arrays.first(this.getValues([key]))?.[1]\n }\n\n fetchValues = async (keys: Array<ResourceKey>): Promise<Array<Entry<T>>> => {\n return this.getValues(keys)\n }\n\n writeValues = async (entries: Array<Entry<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<Entry<T>> => {\n return Array.from(map.entries())\n }\n\n override setValues = (entries: Entry<T | undefined>[]): void => {\n entries.forEach(([key, value]) => {\n if (Objects.isNil(value)) {\n map.delete(key)\n } else {\n map.set(key, value)\n }\n })\n }\n\n override getValues = (keys: Array<ResourceKey>): Array<Entry<T>> => {\n return keys.map((key) => Entries.of(key, map.get(key)!)).filter((it) => Objects.isPresent(it[1]))\n }\n })()\n}\n"],"mappings":";AAEA,SAAS,QAAQ,SAAS,eAAe;AA6BlC,IAAe,8BAAf,MAAgF;AAAA,EAGrF,aAAa,OAAO,KAAkB,UAAwC;AAC5E,UAAM,KAAK,YAAY,CAAC,QAAQ,GAAG,KAAK,KAAK,CAAC,CAAC;AAAA,EACjD;AAAA,EAIA,aAAa,OAAO,QAA6C;AAC/D,WAAO,OAAO,MAAM,MAAM,KAAK,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AAAA,EACxD;AACF;AAEO,IAAe,6BAAf,cAAqD,4BAAgE;AAAA,EAG1H,WAAW,CAAC,KAAkB,UAA+B;AAC3D,SAAK,UAAU,CAAC,QAAQ,GAAG,KAAK,KAAK,CAAC,CAAC;AAAA,EACzC;AAAA,EAKA,WAAW,CAAC,QAAoC;AAC9C,WAAO,OAAO,MAAM,KAAK,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AAAA,EAChD;AAAA,EAEA,cAAc,OAAO,SAAuD;AAC1E,WAAO,KAAK,UAAU,IAAI;AAAA,EAC5B;AAAA,EAEA,cAAc,OAAO,YAAwD;AAC3E,SAAK,UAAU,OAAO;AAAA,EACxB;AACF;AAEO,IAAM,UAAU,MAAgC;AACrD,QAAM,MAAM,oBAAI,IAAe;AAE/B,SAAO,IAAK,cAAc,2BAA8B;AAAA,IAC7C,aAAa,MAAuB;AAC3C,aAAO,MAAM,KAAK,IAAI,QAAQ,CAAC;AAAA,IACjC;AAAA,IAES,YAAY,CAAC,YAA0C;AAC9D,cAAQ,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAChC,YAAI,QAAQ,MAAM,KAAK,GAAG;AACxB,cAAI,OAAO,GAAG;AAAA,QAChB,OAAO;AACL,cAAI,IAAI,KAAK,KAAK;AAAA,QACpB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAES,YAAY,CAAC,SAA8C;AAClE,aAAO,KAAK,IAAI,CAAC,QAAQ,QAAQ,GAAG,KAAK,IAAI,IAAI,GAAG,CAAE,CAAC,EAAE,OAAO,CAAC,OAAO,QAAQ,UAAU,GAAG,CAAC,CAAC,CAAC;AAAA,IAClG;AAAA,EACF,EAAG;AACL;","names":[]}
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 +1 @@
1
- {"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../src/string.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,eAAO,MAAM,QAAQ,GAAI,QAAQ,GAAG,KAAG,KAAK,IAAI,MAE/C,CAAA;AAED,eAAO,MAAM,OAAO;;;;;;;;;CAAW,CAAA;AAE/B,MAAM,MAAM,iBAAiB,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAE3I,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,EAAE,UAAU,MAAM,GAAG,MAAM,KAAG,iBAqBnE,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,EAAE,UAAU,MAAM,GAAG,MAAM,KAAG,iBAgClE,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,iBAuB3D,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAEnE,CAAA;AAED,eAAO,MAAM,UAAU,kEAAc,CAAA;AACrC,eAAO,MAAM,QAAQ,kEAAY,CAAA;AAEjC,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,EAAE,WAAW,MAAM,KAAG,MAM/D,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,EAAE,WAAW,MAAM,KAAG,MAM7D,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,GAAG,IAAI,KAAG,OAG7C,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,KAAK,MAAM,EAAE,QAAQ,MAAM,KAAG,MAAM,GAAG,IA2B5E,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,QAAQ,MAAM,EAAE,YAAY,aAAa,EAAE,uBAAuB,WAAW,MAAM,WAAuB,WAK7I,CAAA;AAED,eAAO,MAAM,QAAQ,8DAAY,CAAA;AACjC,eAAO,MAAM,MAAM,8DAAU,CAAA;AAE7B,eAAO,MAAM,QAAQ,sJAAY,CAAA;AAEjC,eAAO,MAAM,OAAO;;;CAAW,CAAA"}
1
+ {"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../src/string.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAGzC,eAAO,MAAM,QAAQ,GAAI,QAAQ,GAAG,KAAG,KAAK,IAAI,MAE/C,CAAA;AAED,eAAO,MAAM,OAAO;;;;;;;;;CAAW,CAAA;AAE/B,MAAM,MAAM,iBAAiB,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAE3I,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,EAAE,UAAU,MAAM,GAAG,MAAM,KAAG,iBAqBnE,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,EAAE,UAAU,MAAM,GAAG,MAAM,KAAG,iBAgClE,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,iBAuB3D,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAEnE,CAAA;AAED,eAAO,MAAM,UAAU,kEAAc,CAAA;AACrC,eAAO,MAAM,QAAQ,kEAAY,CAAA;AAEjC,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,EAAE,WAAW,MAAM,KAAG,MAM/D,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,EAAE,WAAW,MAAM,KAAG,MAM7D,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,GAAG,IAAI,KAAG,OAG7C,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,KAAK,MAAM,EAAE,QAAQ,MAAM,KAAG,MAAM,GAAG,IA2B5E,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,QAAQ,MAAM,EAAE,YAAY,aAAa,EAAE,uBAAuB,WAAW,MAAM,WAAuB,WAK7I,CAAA;AAED,eAAO,MAAM,QAAQ,8DAAY,CAAA;AACjC,eAAO,MAAM,MAAM,8DAAU,CAAA;AAE7B,eAAO,MAAM,QAAQ,sJAAY,CAAA;AAEjC,eAAO,MAAM,OAAO;;;CAAW,CAAA"}
package/dist/string.js CHANGED
@@ -3,15 +3,14 @@ import {
3
3
  endsWith as _endsWith,
4
4
  includes as _includes,
5
5
  isEmpty as _isEmpty,
6
- isString as _isString,
7
6
  padEnd as _padEnd,
8
7
  padStart as _padStart,
9
8
  replace as _replace,
10
9
  startsWith as _startsWith
11
10
  } from "lodash-es";
12
- import { Arrays } from "@bessemer/cornerstone";
11
+ import { rest } from "@bessemer/cornerstone/array";
13
12
  var isString = (value) => {
14
- return _isString(value);
13
+ return typeof value === "string";
15
14
  };
16
15
  var isEmpty = _isEmpty;
17
16
  var splitFirst = (str, splitter) => {
@@ -20,7 +19,7 @@ var splitFirst = (str, splitter) => {
20
19
  if (results.length === 1) {
21
20
  return { selection: null, separator: null, rest: str };
22
21
  }
23
- return { selection: results[0], separator: splitter, rest: Arrays.rest(results).join(splitter) };
22
+ return { selection: results[0], separator: splitter, rest: rest(results).join(splitter) };
24
23
  } else {
25
24
  const match = splitter.exec(str);
26
25
  if (!match) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/string.ts"],"sourcesContent":["import {\n endsWith as _endsWith,\n includes as _includes,\n isEmpty as _isEmpty,\n isString as _isString,\n padEnd as _padEnd,\n padStart as _padStart,\n replace as _replace,\n startsWith as _startsWith,\n} from 'lodash-es'\nimport { Arrays } from '@bessemer/cornerstone'\nimport { UnknownRecord } from 'type-fest'\n\nexport const isString = (value?: any): value is string => {\n return _isString(value)\n}\n\nexport const isEmpty = _isEmpty\n\nexport type StringSplitResult = { selection: string; separator: string; rest: string } | { selection: null; separator: null; rest: string }\n\nexport const splitFirst = (str: string, splitter: string | RegExp): StringSplitResult => {\n if (isString(splitter)) {\n const results = str.split(splitter)\n if (results.length === 1) {\n return { selection: null, separator: null, rest: str }\n }\n\n return { selection: results[0]!, separator: splitter, rest: Arrays.rest(results).join(splitter) }\n } else {\n const match = splitter.exec(str)\n\n if (!match) {\n return { selection: null, separator: null, rest: str }\n }\n\n const matchIndex = match.index\n const beforeMatch = str.slice(0, matchIndex)\n const afterMatch = str.slice(matchIndex + match[0].length)\n const separator = match[0]\n return { selection: beforeMatch, separator, rest: afterMatch }\n }\n}\n\nexport const splitLast = (str: string, splitter: string | RegExp): StringSplitResult => {\n if (isString(splitter)) {\n const results = str.split(splitter)\n if (results.length === 1) {\n return { selection: null, separator: null, rest: str }\n }\n\n return { selection: results[results.length - 1]!, separator: splitter, rest: results.slice(0, results.length - 1).join(splitter) }\n } else {\n if (!splitter.global) {\n splitter = new RegExp(splitter.source, splitter.flags + 'g')\n }\n\n const matches = Array.from(str.matchAll(splitter))\n\n if (matches.length === 0) {\n return { selection: null, separator: null, rest: str }\n }\n\n // Use the last match\n const lastMatch = matches[matches.length - 1]!\n const matchIndex = lastMatch.index!\n const separator = lastMatch[0]!\n const beforeMatch = str.slice(0, matchIndex)\n const afterMatch = str.slice(matchIndex + separator.length)\n\n return {\n selection: afterMatch,\n separator: separator,\n rest: beforeMatch,\n }\n }\n}\n\nexport const splitLastRegex = (str: string, regex: RegExp): StringSplitResult => {\n // Find the last match using regex lastIndex\n let lastMatch: RegExpExecArray | null = null\n let match\n\n while ((match = regex.exec(str)) !== null) {\n lastMatch = match\n }\n\n if (!lastMatch) {\n return { selection: null, separator: null, rest: str }\n }\n\n const matchIndex = lastMatch.index!\n const separator = lastMatch[0]\n const beforeMatch = str.slice(0, matchIndex)\n const afterMatch = str.slice(matchIndex + separator.length)\n\n return {\n selection: afterMatch,\n separator,\n rest: beforeMatch,\n }\n}\n\nexport const splitAt = (str: string, index: number): [string, string] => {\n return [str.slice(0, index), str.slice(index)] as const\n}\n\nexport const startsWith = _startsWith\nexport const endsWith = _endsWith\n\nexport const removeStart = (string: string, substring: string): string => {\n if (!string.startsWith(substring)) {\n return string\n }\n\n return string.slice(substring.length)\n}\n\nexport const removeEnd = (string: string, substring: string): string => {\n if (!string.endsWith(substring)) {\n return string\n }\n\n return string.slice(0, -substring.length)\n}\n\nexport const isBlank = (str?: string | null): boolean => {\n const testStr = str ?? ''\n return /^\\s*$/.test(testStr)\n}\n\nexport const mostCentralOccurrence = (str: string, substr: string): number | null => {\n const occurrences: number[] = []\n let index = str.indexOf(substr)\n\n while (index !== -1) {\n occurrences.push(index)\n index = str.indexOf(substr, index + 1)\n }\n\n if (occurrences.length === 0) {\n return null\n }\n\n const center = str.length / 2\n\n let closestIndex = occurrences[0]!\n let minDistance = Math.abs(center - closestIndex)\n\n for (let i = 1; i < occurrences.length; i++) {\n const distance = Math.abs(center - occurrences[i]!)\n if (distance < minDistance) {\n minDistance = distance\n closestIndex = occurrences[i]!\n }\n }\n\n return closestIndex\n}\n\nexport const replacePlaceholders = (string: string, parameters: UnknownRecord, getParamPlaceholder = (paramName: string) => `{{${paramName}}}`) => {\n return Object.entries(parameters).reduce(\n (intermediateString, [paramName, paramValue]) => intermediateString.replaceAll(getParamPlaceholder(paramName), `${paramValue}`),\n string\n )\n}\n\nexport const padStart = _padStart\nexport const padEnd = _padEnd\n\nexport const contains = _includes\n\nexport const replace = _replace\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/string.ts"],"sourcesContent":["import {\n endsWith as _endsWith,\n includes as _includes,\n isEmpty as _isEmpty,\n padEnd as _padEnd,\n padStart as _padStart,\n replace as _replace,\n startsWith as _startsWith,\n} from 'lodash-es'\nimport { UnknownRecord } from 'type-fest'\nimport { rest } from '@bessemer/cornerstone/array'\n\nexport const isString = (value?: any): value is string => {\n return typeof value === 'string'\n}\n\nexport const isEmpty = _isEmpty\n\nexport type StringSplitResult = { selection: string; separator: string; rest: string } | { selection: null; separator: null; rest: string }\n\nexport const splitFirst = (str: string, splitter: string | RegExp): StringSplitResult => {\n if (isString(splitter)) {\n const results = str.split(splitter)\n if (results.length === 1) {\n return { selection: null, separator: null, rest: str }\n }\n\n return { selection: results[0]!, separator: splitter, rest: rest(results).join(splitter) }\n } else {\n const match = splitter.exec(str)\n\n if (!match) {\n return { selection: null, separator: null, rest: str }\n }\n\n const matchIndex = match.index\n const beforeMatch = str.slice(0, matchIndex)\n const afterMatch = str.slice(matchIndex + match[0].length)\n const separator = match[0]\n return { selection: beforeMatch, separator, rest: afterMatch }\n }\n}\n\nexport const splitLast = (str: string, splitter: string | RegExp): StringSplitResult => {\n if (isString(splitter)) {\n const results = str.split(splitter)\n if (results.length === 1) {\n return { selection: null, separator: null, rest: str }\n }\n\n return { selection: results[results.length - 1]!, separator: splitter, rest: results.slice(0, results.length - 1).join(splitter) }\n } else {\n if (!splitter.global) {\n splitter = new RegExp(splitter.source, splitter.flags + 'g')\n }\n\n const matches = Array.from(str.matchAll(splitter))\n\n if (matches.length === 0) {\n return { selection: null, separator: null, rest: str }\n }\n\n // Use the last match\n const lastMatch = matches[matches.length - 1]!\n const matchIndex = lastMatch.index!\n const separator = lastMatch[0]!\n const beforeMatch = str.slice(0, matchIndex)\n const afterMatch = str.slice(matchIndex + separator.length)\n\n return {\n selection: afterMatch,\n separator: separator,\n rest: beforeMatch,\n }\n }\n}\n\nexport const splitLastRegex = (str: string, regex: RegExp): StringSplitResult => {\n // Find the last match using regex lastIndex\n let lastMatch: RegExpExecArray | null = null\n let match\n\n while ((match = regex.exec(str)) !== null) {\n lastMatch = match\n }\n\n if (!lastMatch) {\n return { selection: null, separator: null, rest: str }\n }\n\n const matchIndex = lastMatch.index!\n const separator = lastMatch[0]\n const beforeMatch = str.slice(0, matchIndex)\n const afterMatch = str.slice(matchIndex + separator.length)\n\n return {\n selection: afterMatch,\n separator,\n rest: beforeMatch,\n }\n}\n\nexport const splitAt = (str: string, index: number): [string, string] => {\n return [str.slice(0, index), str.slice(index)] as const\n}\n\nexport const startsWith = _startsWith\nexport const endsWith = _endsWith\n\nexport const removeStart = (string: string, substring: string): string => {\n if (!string.startsWith(substring)) {\n return string\n }\n\n return string.slice(substring.length)\n}\n\nexport const removeEnd = (string: string, substring: string): string => {\n if (!string.endsWith(substring)) {\n return string\n }\n\n return string.slice(0, -substring.length)\n}\n\nexport const isBlank = (str?: string | null): boolean => {\n const testStr = str ?? ''\n return /^\\s*$/.test(testStr)\n}\n\nexport const mostCentralOccurrence = (str: string, substr: string): number | null => {\n const occurrences: number[] = []\n let index = str.indexOf(substr)\n\n while (index !== -1) {\n occurrences.push(index)\n index = str.indexOf(substr, index + 1)\n }\n\n if (occurrences.length === 0) {\n return null\n }\n\n const center = str.length / 2\n\n let closestIndex = occurrences[0]!\n let minDistance = Math.abs(center - closestIndex)\n\n for (let i = 1; i < occurrences.length; i++) {\n const distance = Math.abs(center - occurrences[i]!)\n if (distance < minDistance) {\n minDistance = distance\n closestIndex = occurrences[i]!\n }\n }\n\n return closestIndex\n}\n\nexport const replacePlaceholders = (string: string, parameters: UnknownRecord, getParamPlaceholder = (paramName: string) => `{{${paramName}}}`) => {\n return Object.entries(parameters).reduce(\n (intermediateString, [paramName, paramValue]) => intermediateString.replaceAll(getParamPlaceholder(paramName), `${paramValue}`),\n string\n )\n}\n\nexport const padStart = _padStart\nexport const padEnd = _padEnd\n\nexport const contains = _includes\n\nexport const replace = _replace\n"],"mappings":";AAAA;AAAA,EACE,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,cAAc;AAAA,OACT;AAEP,SAAS,YAAY;AAEd,IAAM,WAAW,CAAC,UAAiC;AACxD,SAAO,OAAO,UAAU;AAC1B;AAEO,IAAM,UAAU;AAIhB,IAAM,aAAa,CAAC,KAAa,aAAiD;AACvF,MAAI,SAAS,QAAQ,GAAG;AACtB,UAAM,UAAU,IAAI,MAAM,QAAQ;AAClC,QAAI,QAAQ,WAAW,GAAG;AACxB,aAAO,EAAE,WAAW,MAAM,WAAW,MAAM,MAAM,IAAI;AAAA,IACvD;AAEA,WAAO,EAAE,WAAW,QAAQ,CAAC,GAAI,WAAW,UAAU,MAAM,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE;AAAA,EAC3F,OAAO;AACL,UAAM,QAAQ,SAAS,KAAK,GAAG;AAE/B,QAAI,CAAC,OAAO;AACV,aAAO,EAAE,WAAW,MAAM,WAAW,MAAM,MAAM,IAAI;AAAA,IACvD;AAEA,UAAM,aAAa,MAAM;AACzB,UAAM,cAAc,IAAI,MAAM,GAAG,UAAU;AAC3C,UAAM,aAAa,IAAI,MAAM,aAAa,MAAM,CAAC,EAAE,MAAM;AACzD,UAAM,YAAY,MAAM,CAAC;AACzB,WAAO,EAAE,WAAW,aAAa,WAAW,MAAM,WAAW;AAAA,EAC/D;AACF;AAEO,IAAM,YAAY,CAAC,KAAa,aAAiD;AACtF,MAAI,SAAS,QAAQ,GAAG;AACtB,UAAM,UAAU,IAAI,MAAM,QAAQ;AAClC,QAAI,QAAQ,WAAW,GAAG;AACxB,aAAO,EAAE,WAAW,MAAM,WAAW,MAAM,MAAM,IAAI;AAAA,IACvD;AAEA,WAAO,EAAE,WAAW,QAAQ,QAAQ,SAAS,CAAC,GAAI,WAAW,UAAU,MAAM,QAAQ,MAAM,GAAG,QAAQ,SAAS,CAAC,EAAE,KAAK,QAAQ,EAAE;AAAA,EACnI,OAAO;AACL,QAAI,CAAC,SAAS,QAAQ;AACpB,iBAAW,IAAI,OAAO,SAAS,QAAQ,SAAS,QAAQ,GAAG;AAAA,IAC7D;AAEA,UAAM,UAAU,MAAM,KAAK,IAAI,SAAS,QAAQ,CAAC;AAEjD,QAAI,QAAQ,WAAW,GAAG;AACxB,aAAO,EAAE,WAAW,MAAM,WAAW,MAAM,MAAM,IAAI;AAAA,IACvD;AAGA,UAAM,YAAY,QAAQ,QAAQ,SAAS,CAAC;AAC5C,UAAM,aAAa,UAAU;AAC7B,UAAM,YAAY,UAAU,CAAC;AAC7B,UAAM,cAAc,IAAI,MAAM,GAAG,UAAU;AAC3C,UAAM,aAAa,IAAI,MAAM,aAAa,UAAU,MAAM;AAE1D,WAAO;AAAA,MACL,WAAW;AAAA,MACX;AAAA,MACA,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAEO,IAAM,iBAAiB,CAAC,KAAa,UAAqC;AAE/E,MAAI,YAAoC;AACxC,MAAI;AAEJ,UAAQ,QAAQ,MAAM,KAAK,GAAG,OAAO,MAAM;AACzC,gBAAY;AAAA,EACd;AAEA,MAAI,CAAC,WAAW;AACd,WAAO,EAAE,WAAW,MAAM,WAAW,MAAM,MAAM,IAAI;AAAA,EACvD;AAEA,QAAM,aAAa,UAAU;AAC7B,QAAM,YAAY,UAAU,CAAC;AAC7B,QAAM,cAAc,IAAI,MAAM,GAAG,UAAU;AAC3C,QAAM,aAAa,IAAI,MAAM,aAAa,UAAU,MAAM;AAE1D,SAAO;AAAA,IACL,WAAW;AAAA,IACX;AAAA,IACA,MAAM;AAAA,EACR;AACF;AAEO,IAAM,UAAU,CAAC,KAAa,UAAoC;AACvE,SAAO,CAAC,IAAI,MAAM,GAAG,KAAK,GAAG,IAAI,MAAM,KAAK,CAAC;AAC/C;AAEO,IAAM,aAAa;AACnB,IAAM,WAAW;AAEjB,IAAM,cAAc,CAAC,QAAgB,cAA8B;AACxE,MAAI,CAAC,OAAO,WAAW,SAAS,GAAG;AACjC,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,MAAM,UAAU,MAAM;AACtC;AAEO,IAAM,YAAY,CAAC,QAAgB,cAA8B;AACtE,MAAI,CAAC,OAAO,SAAS,SAAS,GAAG;AAC/B,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,MAAM,GAAG,CAAC,UAAU,MAAM;AAC1C;AAEO,IAAM,UAAU,CAAC,QAAiC;AACvD,QAAM,UAAU,OAAO;AACvB,SAAO,QAAQ,KAAK,OAAO;AAC7B;AAEO,IAAM,wBAAwB,CAAC,KAAa,WAAkC;AACnF,QAAM,cAAwB,CAAC;AAC/B,MAAI,QAAQ,IAAI,QAAQ,MAAM;AAE9B,SAAO,UAAU,IAAI;AACnB,gBAAY,KAAK,KAAK;AACtB,YAAQ,IAAI,QAAQ,QAAQ,QAAQ,CAAC;AAAA,EACvC;AAEA,MAAI,YAAY,WAAW,GAAG;AAC5B,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,IAAI,SAAS;AAE5B,MAAI,eAAe,YAAY,CAAC;AAChC,MAAI,cAAc,KAAK,IAAI,SAAS,YAAY;AAEhD,WAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC3C,UAAM,WAAW,KAAK,IAAI,SAAS,YAAY,CAAC,CAAE;AAClD,QAAI,WAAW,aAAa;AAC1B,oBAAc;AACd,qBAAe,YAAY,CAAC;AAAA,IAC9B;AAAA,EACF;AAEA,SAAO;AACT;AAEO,IAAM,sBAAsB,CAAC,QAAgB,YAA2B,sBAAsB,CAAC,cAAsB,KAAK,SAAS,SAAS;AACjJ,SAAO,OAAO,QAAQ,UAAU,EAAE;AAAA,IAChC,CAAC,oBAAoB,CAAC,WAAW,UAAU,MAAM,mBAAmB,WAAW,oBAAoB,SAAS,GAAG,GAAG,UAAU,EAAE;AAAA,IAC9H;AAAA,EACF;AACF;AAEO,IAAM,WAAW;AACjB,IAAM,SAAS;AAEf,IAAM,WAAW;AAEjB,IAAM,UAAU;","names":[]}
package/dist/tag.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../src/tag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAE7D,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAE3D,MAAM,MAAM,OAAO,CAAC,QAAQ,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAA;AAE1E,MAAM,MAAM,GAAG,CAAC,QAAQ,GAAG,OAAO,IAAI;IACpC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;IACvB,KAAK,EAAE,QAAQ,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,KAAK,EAAE,CAAC,CAAA;IACR,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,GAAG,GAAI,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,KAAG,GAAG,CAAC,CAAC,CAKxD,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC;;;CAKlD,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,CAAC,OAAK,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAKpD,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,CAAC,OAAK,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAElD,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;AAElE,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAG,cAMtD,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,QAAQ,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,KAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAEhG,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,KAAG,KAAK,CAAC,CAAC,CAW1G,CAAA"}
1
+ {"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../src/tag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAa,UAAU,EAAsB,MAAM,kCAAkC,CAAA;AAC5F,OAAO,EAAE,SAAS,EAAkB,MAAM,iCAAiC,CAAA;AAI3E,MAAM,MAAM,OAAO,CAAC,QAAQ,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAA;AAE1E,MAAM,MAAM,GAAG,CAAC,QAAQ,GAAG,OAAO,IAAI;IACpC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;IACvB,KAAK,EAAE,QAAQ,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,KAAK,EAAE,CAAC,CAAA;IACR,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,GAAG,GAAI,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,KAAG,GAAG,CAAC,CAAC,CAKxD,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC;;;CAKlD,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,CAAC,OAAK,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAEpD,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,CAAC,OAAK,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAElD,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;AAElE,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAG,cAMtD,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,QAAQ,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,KAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAEhG,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,KAAG,KAAK,CAAC,CAAC,CAW1G,CAAA"}
package/dist/tag.js CHANGED
@@ -1,5 +1,8 @@
1
1
  // src/tag.ts
2
- import { Arrays, Comparators, Equalitors, Sets } from "@bessemer/cornerstone";
2
+ import { aggregate, compareBy, natural } from "@bessemer/cornerstone/comparator";
3
+ import { fromComparator } from "@bessemer/cornerstone/equalitor";
4
+ import { equalWith, isEmpty, sortWith } from "@bessemer/cornerstone/array";
5
+ import { properPowerSet } from "@bessemer/cornerstone/set";
3
6
  var tag = (type, value2) => {
4
7
  return {
5
8
  type,
@@ -9,31 +12,28 @@ var tag = (type, value2) => {
9
12
  var value = (value2, tags) => {
10
13
  return {
11
14
  value: value2,
12
- tags: Arrays.sortWith(tags, tagComparator())
15
+ tags: sortWith(tags, tagComparator())
13
16
  };
14
17
  };
15
18
  var tagComparator = () => {
16
- return Comparators.aggregate([
17
- Comparators.compareBy((it) => it.type, Comparators.natural()),
18
- Comparators.compareBy((it) => JSON.stringify(it.value), Comparators.natural())
19
- ]);
19
+ return aggregate([compareBy((it) => it.type, natural()), compareBy((it) => JSON.stringify(it.value), natural())]);
20
20
  };
21
21
  var tagEqualitor = () => {
22
- return Equalitors.fromComparator(tagComparator());
22
+ return fromComparator(tagComparator());
23
23
  };
24
24
  var serializeTags = (tags) => {
25
- const serializedTags = Arrays.sortWith(tags, tagComparator()).map(({ type, value: value2 }) => `${type}:${JSON.stringify(value2)}`).join(".");
25
+ const serializedTags = sortWith(tags, tagComparator()).map(({ type, value: value2 }) => `${type}:${JSON.stringify(value2)}`).join(".");
26
26
  return serializedTags;
27
27
  };
28
28
  var resolve = (values, tags) => {
29
29
  return resolveBy(values, (it) => it.tags, tags);
30
30
  };
31
31
  var resolveBy = (values, mapper, tags) => {
32
- const resolvedValues = Sets.properPowerSet(tags).flatMap((tags2) => {
33
- return values.filter((it) => Arrays.equalWith(mapper(it), tags2, tagEqualitor()));
32
+ const resolvedValues = properPowerSet(tags).flatMap((tags2) => {
33
+ return values.filter((it) => equalWith(mapper(it), tags2, tagEqualitor()));
34
34
  });
35
- if (Arrays.isEmpty(resolvedValues)) {
36
- const defaultValues = values.filter((it) => Arrays.isEmpty(mapper(it)));
35
+ if (isEmpty(resolvedValues)) {
36
+ const defaultValues = values.filter((it) => isEmpty(mapper(it)));
37
37
  return defaultValues;
38
38
  }
39
39
  return resolvedValues.reverse();
package/dist/tag.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tag.ts"],"sourcesContent":["import { NominalType } from '@bessemer/cornerstone/types'\nimport { Comparator } from '@bessemer/cornerstone/comparator'\nimport { Arrays, Comparators, Equalitors, Sets } from '@bessemer/cornerstone'\nimport { Equalitor } from '@bessemer/cornerstone/equalitor'\n\nexport type TagType<DataType> = NominalType<string, ['TagType', DataType]>\n\nexport type Tag<DataType = unknown> = {\n type: TagType<DataType>\n value: DataType\n}\n\nexport type TaggedValue<T> = {\n value: T\n tags: Array<Tag>\n}\n\nexport const tag = <T>(type: TagType<T>, value: T): Tag<T> => {\n return {\n type,\n value,\n }\n}\n\nexport const value = <T>(value: T, tags: Array<Tag>) => {\n return {\n value,\n tags: Arrays.sortWith(tags, tagComparator()),\n }\n}\n\nexport const tagComparator = <T>(): Comparator<Tag<T>> => {\n return Comparators.aggregate([\n Comparators.compareBy((it) => it.type, Comparators.natural()),\n Comparators.compareBy((it) => JSON.stringify(it.value), Comparators.natural()),\n ])\n}\n\nexport const tagEqualitor = <T>(): Equalitor<Tag<T>> => {\n return Equalitors.fromComparator(tagComparator())\n}\n\nexport type SerializedTags = NominalType<string, 'SerializedTags'>\n\nexport const serializeTags = <T>(tags: Array<Tag<T>>): SerializedTags => {\n const serializedTags: SerializedTags = Arrays.sortWith(tags, tagComparator())\n .map(({ type, value }) => `${type}:${JSON.stringify(value)}`)\n .join('.')\n\n return serializedTags\n}\n\nexport const resolve = <T>(values: Array<TaggedValue<T>>, tags: Array<Tag>): Array<TaggedValue<T>> => {\n return resolveBy(values, (it) => it.tags, tags)\n}\n\nexport const resolveBy = <T>(values: Array<T>, mapper: (value: T) => Array<Tag>, tags: Array<Tag>): Array<T> => {\n const resolvedValues = Sets.properPowerSet(tags).flatMap((tags) => {\n return values.filter((it) => Arrays.equalWith(mapper(it), tags, tagEqualitor()))\n })\n\n if (Arrays.isEmpty(resolvedValues)) {\n const defaultValues = values.filter((it) => Arrays.isEmpty(mapper(it)))\n return defaultValues\n }\n\n return resolvedValues.reverse()\n}\n"],"mappings":";AAEA,SAAS,QAAQ,aAAa,YAAY,YAAY;AAe/C,IAAM,MAAM,CAAI,MAAkBA,WAAqB;AAC5D,SAAO;AAAA,IACL;AAAA,IACA,OAAAA;AAAA,EACF;AACF;AAEO,IAAM,QAAQ,CAAIA,QAAU,SAAqB;AACtD,SAAO;AAAA,IACL,OAAAA;AAAA,IACA,MAAM,OAAO,SAAS,MAAM,cAAc,CAAC;AAAA,EAC7C;AACF;AAEO,IAAM,gBAAgB,MAA6B;AACxD,SAAO,YAAY,UAAU;AAAA,IAC3B,YAAY,UAAU,CAAC,OAAO,GAAG,MAAM,YAAY,QAAQ,CAAC;AAAA,IAC5D,YAAY,UAAU,CAAC,OAAO,KAAK,UAAU,GAAG,KAAK,GAAG,YAAY,QAAQ,CAAC;AAAA,EAC/E,CAAC;AACH;AAEO,IAAM,eAAe,MAA4B;AACtD,SAAO,WAAW,eAAe,cAAc,CAAC;AAClD;AAIO,IAAM,gBAAgB,CAAI,SAAwC;AACvE,QAAM,iBAAiC,OAAO,SAAS,MAAM,cAAc,CAAC,EACzE,IAAI,CAAC,EAAE,MAAM,OAAAA,OAAM,MAAM,GAAG,IAAI,IAAI,KAAK,UAAUA,MAAK,CAAC,EAAE,EAC3D,KAAK,GAAG;AAEX,SAAO;AACT;AAEO,IAAM,UAAU,CAAI,QAA+B,SAA4C;AACpG,SAAO,UAAU,QAAQ,CAAC,OAAO,GAAG,MAAM,IAAI;AAChD;AAEO,IAAM,YAAY,CAAI,QAAkB,QAAkC,SAA+B;AAC9G,QAAM,iBAAiB,KAAK,eAAe,IAAI,EAAE,QAAQ,CAACC,UAAS;AACjE,WAAO,OAAO,OAAO,CAAC,OAAO,OAAO,UAAU,OAAO,EAAE,GAAGA,OAAM,aAAa,CAAC,CAAC;AAAA,EACjF,CAAC;AAED,MAAI,OAAO,QAAQ,cAAc,GAAG;AAClC,UAAM,gBAAgB,OAAO,OAAO,CAAC,OAAO,OAAO,QAAQ,OAAO,EAAE,CAAC,CAAC;AACtE,WAAO;AAAA,EACT;AAEA,SAAO,eAAe,QAAQ;AAChC;","names":["value","tags"]}
1
+ {"version":3,"sources":["../src/tag.ts"],"sourcesContent":["import { NominalType } from '@bessemer/cornerstone/types'\nimport { aggregate, Comparator, compareBy, natural } from '@bessemer/cornerstone/comparator'\nimport { Equalitor, fromComparator } from '@bessemer/cornerstone/equalitor'\nimport { equalWith, isEmpty, sortWith } from '@bessemer/cornerstone/array'\nimport { properPowerSet } from '@bessemer/cornerstone/set'\n\nexport type TagType<DataType> = NominalType<string, ['TagType', DataType]>\n\nexport type Tag<DataType = unknown> = {\n type: TagType<DataType>\n value: DataType\n}\n\nexport type TaggedValue<T> = {\n value: T\n tags: Array<Tag>\n}\n\nexport const tag = <T>(type: TagType<T>, value: T): Tag<T> => {\n return {\n type,\n value,\n }\n}\n\nexport const value = <T>(value: T, tags: Array<Tag>) => {\n return {\n value,\n tags: sortWith(tags, tagComparator()),\n }\n}\n\nexport const tagComparator = <T>(): Comparator<Tag<T>> => {\n return aggregate([compareBy((it) => it.type, natural()), compareBy((it) => JSON.stringify(it.value), natural())])\n}\n\nexport const tagEqualitor = <T>(): Equalitor<Tag<T>> => {\n return fromComparator(tagComparator())\n}\n\nexport type SerializedTags = NominalType<string, 'SerializedTags'>\n\nexport const serializeTags = <T>(tags: Array<Tag<T>>): SerializedTags => {\n const serializedTags: SerializedTags = sortWith(tags, tagComparator())\n .map(({ type, value }) => `${type}:${JSON.stringify(value)}`)\n .join('.')\n\n return serializedTags\n}\n\nexport const resolve = <T>(values: Array<TaggedValue<T>>, tags: Array<Tag>): Array<TaggedValue<T>> => {\n return resolveBy(values, (it) => it.tags, tags)\n}\n\nexport const resolveBy = <T>(values: Array<T>, mapper: (value: T) => Array<Tag>, tags: Array<Tag>): Array<T> => {\n const resolvedValues = properPowerSet(tags).flatMap((tags) => {\n return values.filter((it) => equalWith(mapper(it), tags, tagEqualitor()))\n })\n\n if (isEmpty(resolvedValues)) {\n const defaultValues = values.filter((it) => isEmpty(mapper(it)))\n return defaultValues\n }\n\n return resolvedValues.reverse()\n}\n"],"mappings":";AACA,SAAS,WAAuB,WAAW,eAAe;AAC1D,SAAoB,sBAAsB;AAC1C,SAAS,WAAW,SAAS,gBAAgB;AAC7C,SAAS,sBAAsB;AAcxB,IAAM,MAAM,CAAI,MAAkBA,WAAqB;AAC5D,SAAO;AAAA,IACL;AAAA,IACA,OAAAA;AAAA,EACF;AACF;AAEO,IAAM,QAAQ,CAAIA,QAAU,SAAqB;AACtD,SAAO;AAAA,IACL,OAAAA;AAAA,IACA,MAAM,SAAS,MAAM,cAAc,CAAC;AAAA,EACtC;AACF;AAEO,IAAM,gBAAgB,MAA6B;AACxD,SAAO,UAAU,CAAC,UAAU,CAAC,OAAO,GAAG,MAAM,QAAQ,CAAC,GAAG,UAAU,CAAC,OAAO,KAAK,UAAU,GAAG,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC;AAClH;AAEO,IAAM,eAAe,MAA4B;AACtD,SAAO,eAAe,cAAc,CAAC;AACvC;AAIO,IAAM,gBAAgB,CAAI,SAAwC;AACvE,QAAM,iBAAiC,SAAS,MAAM,cAAc,CAAC,EAClE,IAAI,CAAC,EAAE,MAAM,OAAAA,OAAM,MAAM,GAAG,IAAI,IAAI,KAAK,UAAUA,MAAK,CAAC,EAAE,EAC3D,KAAK,GAAG;AAEX,SAAO;AACT;AAEO,IAAM,UAAU,CAAI,QAA+B,SAA4C;AACpG,SAAO,UAAU,QAAQ,CAAC,OAAO,GAAG,MAAM,IAAI;AAChD;AAEO,IAAM,YAAY,CAAI,QAAkB,QAAkC,SAA+B;AAC9G,QAAM,iBAAiB,eAAe,IAAI,EAAE,QAAQ,CAACC,UAAS;AAC5D,WAAO,OAAO,OAAO,CAAC,OAAO,UAAU,OAAO,EAAE,GAAGA,OAAM,aAAa,CAAC,CAAC;AAAA,EAC1E,CAAC;AAED,MAAI,QAAQ,cAAc,GAAG;AAC3B,UAAM,gBAAgB,OAAO,OAAO,CAAC,OAAO,QAAQ,OAAO,EAAE,CAAC,CAAC;AAC/D,WAAO;AAAA,EACT;AAEA,SAAO,eAAe,QAAQ;AAChC;","names":["value","tags"]}
package/dist/uri.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"uri.d.ts","sourceRoot":"","sources":["../src/uri.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAGzD,eAAO,MAAM,MAAM,GAAI,cAAc,YAAY,WAEhD,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,cAAc,YAAY,WAEhD,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;AACxD,MAAM,MAAM,YAAY,GAAG,MAAM,CAAA;AAEjC,MAAM,MAAM,SAAS,GAAG,MAAM,CAAA;AAE9B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB,CAAA;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AAED,MAAM,WAAW,GAAG;IAClB,MAAM,EAAE,SAAS,GAAG,IAAI,CAAA;IACxB,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;IACpB,cAAc,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACxC,QAAQ,EAAE,WAAW,CAAA;CACtB;AA8ID,eAAO,MAAM,KAAK,GAAI,WAAW,SAAS,KAAG,GAO5C,CAAA;AAED,eAAO,MAAM,aAAa,QAAO,WAMhC,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EACD;QACE,KAAK,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,GACD,MAAM,CAAA;IACV,cAAc,CAAC,EACX;QACE,SAAS,EAAE,MAAM,CAAA;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,GACD,MAAM,CAAA;IACV,QAAQ,CAAC,EACL;QACE,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,GACD,MAAM,CAAA;CACX,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,SAAS,UAAU,KAAG,GA8C3C,CAAA;AAED,oBAAY,gBAAgB;IAC1B,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,QAAQ,aAAa;CACtB;AAED,eAAO,MAAM,MAAM,GAAI,KAAK,GAAG,EAAE,SAAQ,KAAK,CAAC,gBAAgB,CAAmC,KAAG,SAgCpG,CAAA;AAoBD,eAAO,MAAM,WAAW,GAAI,SAAS,UAAU,KAAG,SAEjD,CAAA"}
1
+ {"version":3,"file":"uri.d.ts","sourceRoot":"","sources":["../src/uri.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAKzD,eAAO,MAAM,MAAM,GAAI,cAAc,YAAY,WAEhD,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,cAAc,YAAY,WAEhD,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;AACxD,MAAM,MAAM,YAAY,GAAG,MAAM,CAAA;AAEjC,MAAM,MAAM,SAAS,GAAG,MAAM,CAAA;AAE9B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB,CAAA;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AAED,MAAM,WAAW,GAAG;IAClB,MAAM,EAAE,SAAS,GAAG,IAAI,CAAA;IACxB,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;IACpB,cAAc,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACxC,QAAQ,EAAE,WAAW,CAAA;CACtB;AA8ID,eAAO,MAAM,KAAK,GAAI,WAAW,SAAS,KAAG,GAO5C,CAAA;AAED,eAAO,MAAM,aAAa,QAAO,WAMhC,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EACD;QACE,KAAK,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,GACD,MAAM,CAAA;IACV,cAAc,CAAC,EACX;QACE,SAAS,EAAE,MAAM,CAAA;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,GACD,MAAM,CAAA;IACV,QAAQ,CAAC,EACL;QACE,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,GACD,MAAM,CAAA;CACX,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,SAAS,UAAU,KAAG,GA8C3C,CAAA;AAED,oBAAY,gBAAgB;IAC1B,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,QAAQ,aAAa;CACtB;AAED,eAAO,MAAM,MAAM,GAAI,KAAK,GAAG,EAAE,SAAQ,KAAK,CAAC,gBAAgB,CAAmC,KAAG,SAgCpG,CAAA;AAoBD,eAAO,MAAM,WAAW,GAAI,SAAS,UAAU,KAAG,SAEjD,CAAA"}
package/dist/uri.js CHANGED
@@ -1,5 +1,7 @@
1
1
  // src/uri.ts
2
- import { Arrays, Objects, Strings } from "@bessemer/cornerstone";
2
+ import { isEmpty, isString, removeStart, splitFirst, startsWith } from "@bessemer/cornerstone/string";
3
+ import { isNil, isPresent } from "@bessemer/cornerstone/object";
4
+ import { contains } from "@bessemer/cornerstone/array";
3
5
  var encode = (uriComponent) => {
4
6
  return encodeURIComponent(uriComponent);
5
7
  };
@@ -7,11 +9,11 @@ var decode = (uriComponent) => {
7
9
  return decodeURIComponent(uriComponent);
8
10
  };
9
11
  var parseSchemePart = (url) => {
10
- const schemeMatch = Strings.splitFirst(url, /(\/\/|:)/);
11
- if (Objects.isNil(schemeMatch.selection) || schemeMatch.separator === "//") {
12
+ const schemeMatch = splitFirst(url, /(\/\/|:)/);
13
+ if (isNil(schemeMatch.selection) || schemeMatch.separator === "//") {
12
14
  return [null, url];
13
15
  }
14
- if (Strings.isEmpty(schemeMatch.selection)) {
16
+ if (isEmpty(schemeMatch.selection)) {
15
17
  return [null, schemeMatch.rest];
16
18
  } else {
17
19
  return [schemeMatch.selection, schemeMatch.rest];
@@ -19,58 +21,58 @@ var parseSchemePart = (url) => {
19
21
  };
20
22
  var parseAuthenticationPart = (url) => {
21
23
  let targetPart = url;
22
- const queryMatch = Strings.splitFirst(targetPart, "?");
23
- const fragmentMatch = Strings.splitFirst(targetPart, "#");
24
- if (Objects.isPresent(queryMatch.selection)) {
24
+ const queryMatch = splitFirst(targetPart, "?");
25
+ const fragmentMatch = splitFirst(targetPart, "#");
26
+ if (isPresent(queryMatch.selection)) {
25
27
  targetPart = queryMatch.selection;
26
- } else if (Objects.isPresent(fragmentMatch.selection)) {
28
+ } else if (isPresent(fragmentMatch.selection)) {
27
29
  targetPart = fragmentMatch.selection;
28
30
  }
29
- const { selection: authentication } = Strings.splitFirst(targetPart, "@");
30
- if (Objects.isNil(authentication)) {
31
+ const { selection: authentication } = splitFirst(targetPart, "@");
32
+ if (isNil(authentication)) {
31
33
  return [null, url];
32
34
  }
33
- const { rest } = Strings.splitFirst(url, "@");
34
- return [parseAuthentication(Strings.removeStart(authentication, "//")), "//" + rest];
35
+ const { rest } = splitFirst(url, "@");
36
+ return [parseAuthentication(removeStart(authentication, "//")), "//" + rest];
35
37
  };
36
38
  var parseAuthentication = (authentication) => {
37
- const { selection: principal, rest: authenticationRest } = Strings.splitFirst(authentication, ":");
38
- if (Objects.isNil(principal)) {
39
+ const { selection: principal, rest: authenticationRest } = splitFirst(authentication, ":");
40
+ if (isNil(principal)) {
39
41
  return { principal: authenticationRest, password: null };
40
42
  }
41
- if (Strings.isEmpty(principal)) {
43
+ if (isEmpty(principal)) {
42
44
  throw new Error(`Unable to parse Authentication: ${authentication}`);
43
45
  }
44
46
  return { principal, password: authenticationRest };
45
47
  };
46
48
  var parseHostPart = (url) => {
47
- if (Strings.startsWith(url, "?") || Strings.startsWith(url, "#")) {
49
+ if (startsWith(url, "?") || startsWith(url, "#")) {
48
50
  return [null, url];
49
51
  }
50
- let hostRequired = Strings.startsWith(url, "//");
52
+ let hostRequired = startsWith(url, "//");
51
53
  if (!hostRequired) {
52
54
  return [null, url];
53
55
  }
54
- url = Strings.removeStart(url, "//");
55
- const urlMatch = Strings.splitFirst(url, /[\/?#]/);
56
+ url = removeStart(url, "//");
57
+ const urlMatch = splitFirst(url, /[\/?#]/);
56
58
  let host = urlMatch.rest;
57
59
  let rest = "";
58
- if (Objects.isPresent(urlMatch.selection)) {
60
+ if (isPresent(urlMatch.selection)) {
59
61
  host = urlMatch.selection;
60
62
  rest = urlMatch.separator + urlMatch.rest;
61
63
  }
62
- if (Strings.isEmpty(host)) {
64
+ if (isEmpty(host)) {
63
65
  return [null, rest];
64
66
  }
65
67
  return [parseHost(host), rest];
66
68
  };
67
69
  var parseHost = (host) => {
68
- if (Strings.startsWith(host, "[")) {
69
- const ipMatch = Strings.splitFirst(host, "]");
70
- if (Objects.isPresent(ipMatch.selection)) {
71
- const portMatch = Strings.splitFirst(ipMatch.rest, ":");
72
- if (Objects.isPresent(portMatch.selection)) {
73
- if (Strings.isEmpty(portMatch.selection)) {
70
+ if (startsWith(host, "[")) {
71
+ const ipMatch = splitFirst(host, "]");
72
+ if (isPresent(ipMatch.selection)) {
73
+ const portMatch = splitFirst(ipMatch.rest, ":");
74
+ if (isPresent(portMatch.selection)) {
75
+ if (isEmpty(portMatch.selection)) {
74
76
  return { value: ipMatch.selection + "]", port: Number(portMatch.rest) };
75
77
  }
76
78
  } else {
@@ -78,11 +80,11 @@ var parseHost = (host) => {
78
80
  }
79
81
  }
80
82
  }
81
- let hostMatch = Strings.splitFirst(host, ":");
82
- if (Objects.isNil(hostMatch.selection)) {
83
+ let hostMatch = splitFirst(host, ":");
84
+ if (isNil(hostMatch.selection)) {
83
85
  return { value: hostMatch.rest, port: null };
84
86
  }
85
- if (Strings.isEmpty(hostMatch.selection)) {
87
+ if (isEmpty(hostMatch.selection)) {
86
88
  throw new Error(`Unable to parse Host: ${host}`);
87
89
  }
88
90
  const hostName = hostMatch.selection;
@@ -90,12 +92,12 @@ var parseHost = (host) => {
90
92
  };
91
93
  var parseLocation = (url) => {
92
94
  const location = { path: "", query: null, fragment: null };
93
- const fragmentMatch = Strings.splitFirst(url, "#");
94
- if (Objects.isPresent(fragmentMatch.selection) && !Strings.isEmpty(fragmentMatch.rest)) {
95
+ const fragmentMatch = splitFirst(url, "#");
96
+ if (isPresent(fragmentMatch.selection) && !isEmpty(fragmentMatch.rest)) {
95
97
  location.fragment = fragmentMatch.rest;
96
98
  }
97
- const queryMatch = Strings.splitFirst(fragmentMatch.selection ?? fragmentMatch.rest, "?");
98
- if (Objects.isPresent(queryMatch.selection) && !Strings.isEmpty(queryMatch.rest)) {
99
+ const queryMatch = splitFirst(fragmentMatch.selection ?? fragmentMatch.rest, "?");
100
+ if (isPresent(queryMatch.selection) && !isEmpty(queryMatch.rest)) {
99
101
  location.query = queryMatch.rest;
100
102
  }
101
103
  location.path = queryMatch.selection ?? queryMatch.rest;
@@ -119,8 +121,8 @@ var emptyLocation = () => {
119
121
  var build = (builder) => {
120
122
  const scheme = builder.scheme ?? null;
121
123
  let host = null;
122
- if (Objects.isPresent(builder.host)) {
123
- if (Strings.isString(builder.host)) {
124
+ if (isPresent(builder.host)) {
125
+ if (isString(builder.host)) {
124
126
  host = parseHost(builder.host);
125
127
  } else {
126
128
  host = {
@@ -130,8 +132,8 @@ var build = (builder) => {
130
132
  }
131
133
  }
132
134
  let authentication = null;
133
- if (Objects.isPresent(builder.authentication)) {
134
- if (Strings.isString(builder.authentication)) {
135
+ if (isPresent(builder.authentication)) {
136
+ if (isString(builder.authentication)) {
135
137
  authentication = parseAuthentication(builder.authentication);
136
138
  } else {
137
139
  authentication = {
@@ -141,8 +143,8 @@ var build = (builder) => {
141
143
  }
142
144
  }
143
145
  let location = emptyLocation();
144
- if (Objects.isPresent(builder.location)) {
145
- if (Strings.isString(builder.location)) {
146
+ if (isPresent(builder.location)) {
147
+ if (isString(builder.location)) {
146
148
  location = parseLocation(builder.location);
147
149
  } else {
148
150
  location = {
@@ -167,39 +169,39 @@ var UriComponentType = /* @__PURE__ */ ((UriComponentType2) => {
167
169
  })(UriComponentType || {});
168
170
  var format = (uri, format2 = Object.values(UriComponentType)) => {
169
171
  let urlString = "";
170
- if (Objects.isPresent(uri.scheme) && Arrays.contains(format2, "Scheme" /* Scheme */)) {
172
+ if (isPresent(uri.scheme) && contains(format2, "Scheme" /* Scheme */)) {
171
173
  urlString = urlString + uri.scheme;
172
174
  }
173
- if (Objects.isPresent(uri.host) && Arrays.contains(format2, "Host" /* Host */)) {
174
- if (Objects.isPresent(uri.scheme)) {
175
+ if (isPresent(uri.host) && contains(format2, "Host" /* Host */)) {
176
+ if (isPresent(uri.scheme)) {
175
177
  urlString = urlString + "://";
176
178
  }
177
- if (Objects.isPresent(uri.authentication)) {
179
+ if (isPresent(uri.authentication)) {
178
180
  urlString = urlString + uri.authentication.principal;
179
- if (Objects.isPresent(uri.authentication.password)) {
181
+ if (isPresent(uri.authentication.password)) {
180
182
  urlString = urlString + ":" + uri.authentication.password;
181
183
  }
182
184
  urlString = urlString + "@";
183
185
  }
184
186
  urlString = urlString + uri.host.value;
185
- if (Objects.isPresent(uri.host.port)) {
187
+ if (isPresent(uri.host.port)) {
186
188
  urlString = urlString + ":" + uri.host.port;
187
189
  }
188
190
  }
189
- if (Arrays.contains(format2, "Location" /* Location */)) {
191
+ if (contains(format2, "Location" /* Location */)) {
190
192
  urlString = urlString + formatLocation(uri.location, format2);
191
193
  }
192
194
  return urlString;
193
195
  };
194
196
  var formatLocation = (location, format2) => {
195
197
  let urlString = "";
196
- if (!Strings.isEmpty(location.path)) {
198
+ if (!isEmpty(location.path)) {
197
199
  urlString = urlString + location.path;
198
200
  }
199
- if (!Strings.isEmpty(location.query)) {
201
+ if (!isEmpty(location.query)) {
200
202
  urlString = urlString + "?" + location.query;
201
203
  }
202
- if (!Strings.isEmpty(location.fragment)) {
204
+ if (!isEmpty(location.fragment)) {
203
205
  urlString = urlString + "#" + encode(location.fragment);
204
206
  }
205
207
  return urlString;
package/dist/uri.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/uri.ts"],"sourcesContent":["import { Arrays, Objects, Strings } from '@bessemer/cornerstone'\nimport { NominalType } from '@bessemer/cornerstone/types'\nimport { StringSplitResult } from '@bessemer/cornerstone/string'\n\nexport const encode = (uriComponent: UriComponent) => {\n return encodeURIComponent(uriComponent)\n}\n\nexport const decode = (uriComponent: UriComponent) => {\n return decodeURIComponent(uriComponent)\n}\n\nexport type UriString = NominalType<string, 'UriString'>\nexport type UriComponent = string\n\nexport type UriScheme = string\n\nexport type UriAuthentication = {\n principal: string\n password: string | null\n}\n\nexport type UriHost = {\n value: string\n port: number | null\n}\n\nexport interface UriLocation {\n path: string\n query: string | null\n fragment: string | null\n}\n\nexport interface Uri {\n scheme: UriScheme | null\n host: UriHost | null\n authentication: UriAuthentication | null\n location: UriLocation\n}\n\nconst parseSchemePart = (url: UriComponent): [UriScheme | null, UriComponent] => {\n // Search for the colon or double slash\n const schemeMatch = Strings.splitFirst(url, /(\\/\\/|:)/)\n\n // If we don't find either, or we hit the double slash before finding a colon, there is no scheme\n if (Objects.isNil(schemeMatch.selection) || schemeMatch.separator === '//') {\n return [null, url]\n }\n\n // This means the string started with :, so no protocol. We'll go ahead and remove the : from consideration\n if (Strings.isEmpty(schemeMatch.selection)) {\n return [null, schemeMatch.rest]\n } else {\n return [schemeMatch.selection, schemeMatch.rest]\n }\n}\n\nconst parseAuthenticationPart = (url: UriComponent): [UriAuthentication | null, UriComponent] => {\n let targetPart = url\n const queryMatch = Strings.splitFirst(targetPart, '?')\n const fragmentMatch = Strings.splitFirst(targetPart, '#')\n if (Objects.isPresent(queryMatch.selection)) {\n targetPart = queryMatch.selection\n } else if (Objects.isPresent(fragmentMatch.selection)) {\n targetPart = fragmentMatch.selection\n }\n\n const { selection: authentication } = Strings.splitFirst(targetPart, '@')\n\n // If there is no @, then we don't have an authentication\n if (Objects.isNil(authentication)) {\n return [null, url]\n }\n\n const { rest } = Strings.splitFirst(url, '@')\n\n return [parseAuthentication(Strings.removeStart(authentication, '//')), '//' + rest]\n}\n\nconst parseAuthentication = (authentication: UriComponent): UriAuthentication => {\n const { selection: principal, rest: authenticationRest } = Strings.splitFirst(authentication, ':')\n\n // If there isn't a colon, then there is no password but there is a username\n if (Objects.isNil(principal)) {\n return { principal: authenticationRest, password: null }\n }\n\n // The authentication section started with a :, don't know what to make of this... password but no username?\n if (Strings.isEmpty(principal)) {\n throw new Error(`Unable to parse Authentication: ${authentication}`)\n }\n\n // Otherwise, we have both, so return the complete authentication object and the rest\n return { principal, password: authenticationRest }\n}\n\nconst parseHostPart = (url: UriComponent): [UriHost | null, UriComponent] => {\n // Check if the host is starting with reserved characters, if so we should just bail on trying to parse\n if (Strings.startsWith(url, '?') || Strings.startsWith(url, '#')) {\n return [null, url]\n }\n\n let hostRequired = Strings.startsWith(url, '//')\n if (!hostRequired) {\n return [null, url]\n }\n\n url = Strings.removeStart(url, '//')\n\n // Lets grab everything to the left of the first / ? or #, this is the remainder of our authority (if any)\n const urlMatch = Strings.splitFirst(url, /[\\/?#]/)\n let host = urlMatch.rest\n let rest = ''\n\n if (Objects.isPresent(urlMatch.selection)) {\n host = urlMatch.selection\n rest = urlMatch.separator + urlMatch.rest\n }\n\n if (Strings.isEmpty(host)) {\n return [null, rest]\n }\n\n return [parseHost(host), rest]\n}\n\nconst parseHost = (host: UriComponent): UriHost => {\n // Try to see if we have an ipv6 address like the form [2001:db8::7] and handle it\n if (Strings.startsWith(host, '[')) {\n const ipMatch = Strings.splitFirst(host, ']')\n\n if (Objects.isPresent(ipMatch.selection)) {\n const portMatch = Strings.splitFirst(ipMatch.rest, ':')\n if (Objects.isPresent(portMatch.selection)) {\n if (Strings.isEmpty(portMatch.selection)) {\n return { value: ipMatch.selection + ']', port: Number(portMatch.rest) }\n }\n } else {\n return { value: ipMatch.selection + ']', port: null }\n }\n }\n }\n\n let hostMatch: StringSplitResult = Strings.splitFirst(host, ':')\n\n // We have no :, which means no port, so treat the rest as the hostname\n if (Objects.isNil(hostMatch.selection)) {\n return { value: hostMatch.rest, port: null }\n }\n\n // The host started with a :, this is odd\n if (Strings.isEmpty(hostMatch.selection)) {\n throw new Error(`Unable to parse Host: ${host}`)\n }\n\n const hostName = hostMatch.selection\n\n // Otherwise, we have both, so return the complete authentication object and the rest\n return { value: hostName, port: Number(hostMatch.rest) }\n}\n\nconst parseLocation = (url: UriComponent): UriLocation => {\n const location: UriLocation = { path: '', query: null, fragment: null }\n\n // Lets see if we have a fragment and parse it off the end\n const fragmentMatch = Strings.splitFirst(url, '#')\n if (Objects.isPresent(fragmentMatch.selection) && !Strings.isEmpty(fragmentMatch.rest)) {\n location.fragment = fragmentMatch.rest\n }\n\n // Lets see if we have a query string and parse it off the remainder\n const queryMatch = Strings.splitFirst(fragmentMatch.selection ?? fragmentMatch.rest, '?')\n if (Objects.isPresent(queryMatch.selection) && !Strings.isEmpty(queryMatch.rest)) {\n location.query = queryMatch.rest\n }\n\n location.path = queryMatch.selection ?? queryMatch.rest\n return location\n}\n\nexport const parse = (urlString: UriString): Uri => {\n const [scheme, rest1] = parseSchemePart(urlString)\n const [authentication, rest2] = parseAuthenticationPart(rest1)\n const [host, rest3] = parseHostPart(rest2)\n const location = parseLocation(rest3)\n const url: Uri = { scheme, host, authentication, location }\n return url\n}\n\nexport const emptyLocation = (): UriLocation => {\n return {\n path: '',\n query: null,\n fragment: null,\n }\n}\n\nexport type UriBuilder = {\n scheme?: string\n host?:\n | {\n value: string\n port?: number\n }\n | string\n authentication?:\n | {\n principal: string\n password?: string\n }\n | string\n location?:\n | {\n path: string\n query?: string\n fragment?: string\n }\n | string\n}\n\nexport const build = (builder: UriBuilder): Uri => {\n const scheme = builder.scheme ?? null\n\n let host: UriHost | null = null\n if (Objects.isPresent(builder.host)) {\n if (Strings.isString(builder.host)) {\n host = parseHost(builder.host)\n } else {\n host = {\n value: builder.host.value,\n port: builder.host.port ?? null,\n }\n }\n }\n\n let authentication: UriAuthentication | null = null\n if (Objects.isPresent(builder.authentication)) {\n if (Strings.isString(builder.authentication)) {\n authentication = parseAuthentication(builder.authentication)\n } else {\n authentication = {\n principal: builder.authentication.principal,\n password: builder.authentication.password ?? null,\n }\n }\n }\n\n let location: UriLocation = emptyLocation()\n if (Objects.isPresent(builder.location)) {\n if (Strings.isString(builder.location)) {\n location = parseLocation(builder.location)\n } else {\n location = {\n path: builder.location.path,\n query: builder.location.query ?? null,\n fragment: builder.location.fragment ?? null,\n }\n }\n }\n\n return {\n scheme,\n host,\n authentication,\n location,\n }\n}\n\nexport enum UriComponentType {\n Scheme = 'Scheme',\n Host = 'Host',\n Location = 'Location',\n}\n\nexport const format = (uri: Uri, format: Array<UriComponentType> = Object.values(UriComponentType)): UriString => {\n let urlString = ''\n if (Objects.isPresent(uri.scheme) && Arrays.contains(format, UriComponentType.Scheme)) {\n urlString = urlString + uri.scheme\n }\n\n if (Objects.isPresent(uri.host) && Arrays.contains(format, UriComponentType.Host)) {\n if (Objects.isPresent(uri.scheme)) {\n urlString = urlString + '://'\n }\n\n if (Objects.isPresent(uri.authentication)) {\n urlString = urlString + uri.authentication.principal\n\n if (Objects.isPresent(uri.authentication.password)) {\n urlString = urlString + ':' + uri.authentication.password\n }\n\n urlString = urlString + '@'\n }\n\n urlString = urlString + uri.host.value\n\n if (Objects.isPresent(uri.host.port)) {\n urlString = urlString + ':' + uri.host.port\n }\n }\n\n if (Arrays.contains(format, UriComponentType.Location)) {\n urlString = urlString + formatLocation(uri.location, format)\n }\n return urlString\n}\n\nconst formatLocation = (location: UriLocation, format: Array<UriComponentType>): string => {\n let urlString = ''\n\n if (!Strings.isEmpty(location.path)) {\n urlString = urlString + location.path\n }\n\n if (!Strings.isEmpty(location.query)) {\n urlString = urlString + '?' + location.query\n }\n\n if (!Strings.isEmpty(location.fragment)) {\n urlString = urlString + '#' + encode(location.fragment!)\n }\n\n return urlString\n}\n\nexport const buildString = (builder: UriBuilder): UriString => {\n return format(build(builder))\n}\n"],"mappings":"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","names":["UriComponentType","format"]}
1
+ {"version":3,"sources":["../src/uri.ts"],"sourcesContent":["import { NominalType } from '@bessemer/cornerstone/types'\nimport { isEmpty, isString, removeStart, splitFirst, startsWith, StringSplitResult } from '@bessemer/cornerstone/string'\nimport { isNil, isPresent } from '@bessemer/cornerstone/object'\nimport { contains } from '@bessemer/cornerstone/array'\n\nexport const encode = (uriComponent: UriComponent) => {\n return encodeURIComponent(uriComponent)\n}\n\nexport const decode = (uriComponent: UriComponent) => {\n return decodeURIComponent(uriComponent)\n}\n\nexport type UriString = NominalType<string, 'UriString'>\nexport type UriComponent = string\n\nexport type UriScheme = string\n\nexport type UriAuthentication = {\n principal: string\n password: string | null\n}\n\nexport type UriHost = {\n value: string\n port: number | null\n}\n\nexport interface UriLocation {\n path: string\n query: string | null\n fragment: string | null\n}\n\nexport interface Uri {\n scheme: UriScheme | null\n host: UriHost | null\n authentication: UriAuthentication | null\n location: UriLocation\n}\n\nconst parseSchemePart = (url: UriComponent): [UriScheme | null, UriComponent] => {\n // Search for the colon or double slash\n const schemeMatch = splitFirst(url, /(\\/\\/|:)/)\n\n // If we don't find either, or we hit the double slash before finding a colon, there is no scheme\n if (isNil(schemeMatch.selection) || schemeMatch.separator === '//') {\n return [null, url]\n }\n\n // This means the string started with :, so no protocol. We'll go ahead and remove the : from consideration\n if (isEmpty(schemeMatch.selection)) {\n return [null, schemeMatch.rest]\n } else {\n return [schemeMatch.selection, schemeMatch.rest]\n }\n}\n\nconst parseAuthenticationPart = (url: UriComponent): [UriAuthentication | null, UriComponent] => {\n let targetPart = url\n const queryMatch = splitFirst(targetPart, '?')\n const fragmentMatch = splitFirst(targetPart, '#')\n if (isPresent(queryMatch.selection)) {\n targetPart = queryMatch.selection\n } else if (isPresent(fragmentMatch.selection)) {\n targetPart = fragmentMatch.selection\n }\n\n const { selection: authentication } = splitFirst(targetPart, '@')\n\n // If there is no @, then we don't have an authentication\n if (isNil(authentication)) {\n return [null, url]\n }\n\n const { rest } = splitFirst(url, '@')\n\n return [parseAuthentication(removeStart(authentication, '//')), '//' + rest]\n}\n\nconst parseAuthentication = (authentication: UriComponent): UriAuthentication => {\n const { selection: principal, rest: authenticationRest } = splitFirst(authentication, ':')\n\n // If there isn't a colon, then there is no password but there is a username\n if (isNil(principal)) {\n return { principal: authenticationRest, password: null }\n }\n\n // The authentication section started with a :, don't know what to make of this... password but no username?\n if (isEmpty(principal)) {\n throw new Error(`Unable to parse Authentication: ${authentication}`)\n }\n\n // Otherwise, we have both, so return the complete authentication object and the rest\n return { principal, password: authenticationRest }\n}\n\nconst parseHostPart = (url: UriComponent): [UriHost | null, UriComponent] => {\n // Check if the host is starting with reserved characters, if so we should just bail on trying to parse\n if (startsWith(url, '?') || startsWith(url, '#')) {\n return [null, url]\n }\n\n let hostRequired = startsWith(url, '//')\n if (!hostRequired) {\n return [null, url]\n }\n\n url = removeStart(url, '//')\n\n // Lets grab everything to the left of the first / ? or #, this is the remainder of our authority (if any)\n const urlMatch = splitFirst(url, /[\\/?#]/)\n let host = urlMatch.rest\n let rest = ''\n\n if (isPresent(urlMatch.selection)) {\n host = urlMatch.selection\n rest = urlMatch.separator + urlMatch.rest\n }\n\n if (isEmpty(host)) {\n return [null, rest]\n }\n\n return [parseHost(host), rest]\n}\n\nconst parseHost = (host: UriComponent): UriHost => {\n // Try to see if we have an ipv6 address like the form [2001:db8::7] and handle it\n if (startsWith(host, '[')) {\n const ipMatch = splitFirst(host, ']')\n\n if (isPresent(ipMatch.selection)) {\n const portMatch = splitFirst(ipMatch.rest, ':')\n if (isPresent(portMatch.selection)) {\n if (isEmpty(portMatch.selection)) {\n return { value: ipMatch.selection + ']', port: Number(portMatch.rest) }\n }\n } else {\n return { value: ipMatch.selection + ']', port: null }\n }\n }\n }\n\n let hostMatch: StringSplitResult = splitFirst(host, ':')\n\n // We have no :, which means no port, so treat the rest as the hostname\n if (isNil(hostMatch.selection)) {\n return { value: hostMatch.rest, port: null }\n }\n\n // The host started with a :, this is odd\n if (isEmpty(hostMatch.selection)) {\n throw new Error(`Unable to parse Host: ${host}`)\n }\n\n const hostName = hostMatch.selection\n\n // Otherwise, we have both, so return the complete authentication object and the rest\n return { value: hostName, port: Number(hostMatch.rest) }\n}\n\nconst parseLocation = (url: UriComponent): UriLocation => {\n const location: UriLocation = { path: '', query: null, fragment: null }\n\n // Lets see if we have a fragment and parse it off the end\n const fragmentMatch = splitFirst(url, '#')\n if (isPresent(fragmentMatch.selection) && !isEmpty(fragmentMatch.rest)) {\n location.fragment = fragmentMatch.rest\n }\n\n // Lets see if we have a query string and parse it off the remainder\n const queryMatch = splitFirst(fragmentMatch.selection ?? fragmentMatch.rest, '?')\n if (isPresent(queryMatch.selection) && !isEmpty(queryMatch.rest)) {\n location.query = queryMatch.rest\n }\n\n location.path = queryMatch.selection ?? queryMatch.rest\n return location\n}\n\nexport const parse = (urlString: UriString): Uri => {\n const [scheme, rest1] = parseSchemePart(urlString)\n const [authentication, rest2] = parseAuthenticationPart(rest1)\n const [host, rest3] = parseHostPart(rest2)\n const location = parseLocation(rest3)\n const url: Uri = { scheme, host, authentication, location }\n return url\n}\n\nexport const emptyLocation = (): UriLocation => {\n return {\n path: '',\n query: null,\n fragment: null,\n }\n}\n\nexport type UriBuilder = {\n scheme?: string\n host?:\n | {\n value: string\n port?: number\n }\n | string\n authentication?:\n | {\n principal: string\n password?: string\n }\n | string\n location?:\n | {\n path: string\n query?: string\n fragment?: string\n }\n | string\n}\n\nexport const build = (builder: UriBuilder): Uri => {\n const scheme = builder.scheme ?? null\n\n let host: UriHost | null = null\n if (isPresent(builder.host)) {\n if (isString(builder.host)) {\n host = parseHost(builder.host)\n } else {\n host = {\n value: builder.host.value,\n port: builder.host.port ?? null,\n }\n }\n }\n\n let authentication: UriAuthentication | null = null\n if (isPresent(builder.authentication)) {\n if (isString(builder.authentication)) {\n authentication = parseAuthentication(builder.authentication)\n } else {\n authentication = {\n principal: builder.authentication.principal,\n password: builder.authentication.password ?? null,\n }\n }\n }\n\n let location: UriLocation = emptyLocation()\n if (isPresent(builder.location)) {\n if (isString(builder.location)) {\n location = parseLocation(builder.location)\n } else {\n location = {\n path: builder.location.path,\n query: builder.location.query ?? null,\n fragment: builder.location.fragment ?? null,\n }\n }\n }\n\n return {\n scheme,\n host,\n authentication,\n location,\n }\n}\n\nexport enum UriComponentType {\n Scheme = 'Scheme',\n Host = 'Host',\n Location = 'Location',\n}\n\nexport const format = (uri: Uri, format: Array<UriComponentType> = Object.values(UriComponentType)): UriString => {\n let urlString = ''\n if (isPresent(uri.scheme) && contains(format, UriComponentType.Scheme)) {\n urlString = urlString + uri.scheme\n }\n\n if (isPresent(uri.host) && contains(format, UriComponentType.Host)) {\n if (isPresent(uri.scheme)) {\n urlString = urlString + '://'\n }\n\n if (isPresent(uri.authentication)) {\n urlString = urlString + uri.authentication.principal\n\n if (isPresent(uri.authentication.password)) {\n urlString = urlString + ':' + uri.authentication.password\n }\n\n urlString = urlString + '@'\n }\n\n urlString = urlString + uri.host.value\n\n if (isPresent(uri.host.port)) {\n urlString = urlString + ':' + uri.host.port\n }\n }\n\n if (contains(format, UriComponentType.Location)) {\n urlString = urlString + formatLocation(uri.location, format)\n }\n return urlString\n}\n\nconst formatLocation = (location: UriLocation, format: Array<UriComponentType>): string => {\n let urlString = ''\n\n if (!isEmpty(location.path)) {\n urlString = urlString + location.path\n }\n\n if (!isEmpty(location.query)) {\n urlString = urlString + '?' + location.query\n }\n\n if (!isEmpty(location.fragment)) {\n urlString = urlString + '#' + encode(location.fragment!)\n }\n\n return urlString\n}\n\nexport const buildString = (builder: UriBuilder): UriString => {\n return format(build(builder))\n}\n"],"mappings":"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","names":["UriComponentType","format"]}
package/dist/url.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../src/url.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,IAAI,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAEjG,eAAO,MAAM,MAAM,wCAAc,CAAA;AAEjC,eAAO,MAAM,MAAM,wCAAc,CAAA;AAEjC,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IAC3B,UAAU,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;CAC/C;AAED,MAAM,WAAW,GAAI,SAAQ,GAAG;IAC9B,QAAQ,EAAE,WAAW,CAAA;CACtB;AAED,MAAM,MAAM,OAAO,GAAG,GAAG,GAAG,SAAS,CAAA;AA8CrC,eAAO,MAAM,KAAK,GAAI,WAAW,SAAS,EAAE,YAAW,OAAc,KAAG,GAkBvE,CAAA;AAED,eAAO,MAAM,MAAM,gEAAc,CAAA;AAuBjC,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG;IACpC,QAAQ,CAAC,EAAE;QACT,UAAU,CAAC,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;KAChD,CAAA;CACF,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,SAAS,UAAU,KAAG,GAY3C,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,SAAS,UAAU,KAAG,SAEjD,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,MAAM,OAAO,KAAG,GAMrC,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,KAAK,OAAO,EAAE,MAAM,MAAM,KAAG,MAAM,GAAG,SAWlE,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,KAAK,OAAO,EAAE,MAAM,MAAM,KAAG,CAAC,GAAG,SAGpE,CAAA"}
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../src/url.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,IAAI,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAEjG,eAAO,MAAM,MAAM,wCAAc,CAAA;AAEjC,eAAO,MAAM,MAAM,wCAAc,CAAA;AAEjC,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IAC3B,UAAU,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;CAC/C;AAED,MAAM,WAAW,GAAI,SAAQ,GAAG;IAC9B,QAAQ,EAAE,WAAW,CAAA;CACtB;AAED,MAAM,MAAM,OAAO,GAAG,GAAG,GAAG,SAAS,CAAA;AA8CrC,eAAO,MAAM,KAAK,GAAI,WAAW,SAAS,EAAE,YAAW,OAAc,KAAG,GAkBvE,CAAA;AAED,eAAO,MAAM,MAAM,gEAAc,CAAA;AAuBjC,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG;IACpC,QAAQ,CAAC,EAAE;QACT,UAAU,CAAC,EAAE,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;KAChD,CAAA;CACF,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,SAAS,UAAU,KAAG,GAa3C,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,SAAS,UAAU,KAAG,SAEjD,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,MAAM,OAAO,KAAG,GAMrC,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,KAAK,OAAO,EAAE,MAAM,MAAM,KAAG,MAAM,GAAG,SAWlE,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,KAAK,OAAO,EAAE,MAAM,MAAM,KAAG,CAAC,GAAG,SAGpE,CAAA"}
package/dist/url.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/url.ts"],"sourcesContent":["import { Arrays, Objects, Strings, Uris } from '@bessemer/cornerstone'\nimport { Dictionary } from '@bessemer/cornerstone/types'\nimport { Uri, UriBuilder, UriComponent, UriLocation, UriString } from '@bessemer/cornerstone/uri'\n\nexport const encode = Uris.encode\n\nexport const decode = Uris.decode\n\nexport interface UrlLocation extends UriLocation {\n pathSegments: Array<string>\n parameters: Dictionary<string | Array<string>>\n}\n\nexport interface Url extends Uri {\n location: UrlLocation\n}\n\nexport type UrlLike = Url | UriString\n\nconst augmentUriLocation = (uriLocation: UriLocation, normalize: boolean): UrlLocation => {\n const pathSegments: Array<string> = []\n const parameters: Dictionary<string | Array<string>> = {}\n\n if (!Strings.isBlank(uriLocation.path)) {\n Strings.removeStart(uriLocation.path, '/')\n .split('/')\n .forEach((urlPathPart) => {\n if (!Strings.isBlank(urlPathPart) || !normalize) {\n pathSegments.push(decode(urlPathPart))\n }\n })\n }\n\n if (Objects.isPresent(uriLocation.query)) {\n uriLocation.query.split('&').forEach((parameterPair) => {\n let splitParameters = parameterPair.split('=')\n\n if (!Strings.isBlank(Arrays.first(splitParameters))) {\n let key = decode(splitParameters[0]!)\n let value = ''\n if (splitParameters.length === 2) {\n value = splitParameters[1]!\n }\n if (Objects.isNil(parameters[key])) {\n parameters[key] = decode(value)\n } else if (!Array.isArray(parameters[key])) {\n let paramList = [parameters[key]]\n paramList.push(decode(value))\n parameters[key] = paramList\n } else {\n parameters[key].push(decode(value))\n }\n }\n })\n }\n\n return {\n ...uriLocation,\n pathSegments,\n parameters,\n }\n}\n\nexport const parse = (urlString: UriString, normalize: boolean = true): Url => {\n const uri = Uris.parse(urlString)\n const location = augmentUriLocation(uri.location, normalize)\n\n if (normalize) {\n if (!Arrays.isEmpty(location.pathSegments)) {\n location.path = (Strings.startsWith(location.path, '/') ? '/' : '') + formatPathSegments(location.pathSegments)\n } else {\n location.path = ''\n }\n\n location.query = formatQueryParameters(location.parameters)\n }\n\n return {\n ...uri,\n location,\n }\n}\n\nexport const format = Uris.format\n\nconst formatPathSegments = (pathSegments: Array<string>): UriComponent => {\n return pathSegments.map((it) => encode(it)).join('/')\n}\n\nconst formatQueryParameters = (parameters: Dictionary<string | Array<string>>): UriComponent | null => {\n const parameterEntries = Object.entries(parameters)\n if (Arrays.isEmpty(parameterEntries)) {\n return null\n }\n\n return Object.entries(parameters)\n .flatMap(([key, value]) => {\n if (Array.isArray(value)) {\n return value.map((it) => `${encode(key)}=${encode(it)}`)\n } else {\n return [`${encode(key)}=${encode(value)}`]\n }\n })\n .join('&')\n}\n\nexport type UrlBuilder = UriBuilder & {\n location?: {\n parameters?: Dictionary<string | Array<string>>\n }\n}\n\nexport const build = (builder: UrlBuilder): Url => {\n const uri = Uris.build(builder)\n if (Objects.isPresent(builder.location?.parameters)) {\n uri.location.query = formatQueryParameters(builder.location.parameters)\n }\n\n const urlLocation = augmentUriLocation(uri.location, false)\n\n return {\n ...uri,\n location: urlLocation,\n }\n}\n\nexport const buildString = (builder: UrlBuilder): UriString => {\n return format(build(builder))\n}\n\nexport const reify = (blah: UrlLike): Url => {\n if (!Strings.isString(blah)) {\n return blah\n }\n\n return parse(blah)\n}\n\nexport const getParameter = (url: UrlLike, name: string): string | undefined => {\n const parameter = reify(url).location.parameters[name]\n if (Objects.isNil(parameter)) {\n return undefined\n }\n\n if (Array.isArray(parameter)) {\n throw new Error(`Expected a single parameter value but found multiple for parameter: ${name}`)\n }\n\n return parameter\n}\n\nexport const getJsonParameter = <T>(url: UrlLike, name: string): T | undefined => {\n const value = getParameter(url, name)\n return Objects.isPresent(value) ? JSON.parse(value) : undefined\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/url.ts"],"sourcesContent":["import { Arrays, Objects, Strings, Uris } from '@bessemer/cornerstone'\nimport { Dictionary } from '@bessemer/cornerstone/types'\nimport { Uri, UriBuilder, UriComponent, UriLocation, UriString } from '@bessemer/cornerstone/uri'\n// JOHN UPDATING URLS NEEDS WORK\nexport const encode = Uris.encode\n\nexport const decode = Uris.decode\n\nexport interface UrlLocation extends UriLocation {\n pathSegments: Array<string>\n parameters: Dictionary<string | Array<string>>\n}\n\nexport interface Url extends Uri {\n location: UrlLocation\n}\n\nexport type UrlLike = Url | UriString\n\nconst augmentUriLocation = (uriLocation: UriLocation, normalize: boolean): UrlLocation => {\n const pathSegments: Array<string> = []\n const parameters: Dictionary<string | Array<string>> = {}\n\n if (!Strings.isBlank(uriLocation.path)) {\n Strings.removeStart(uriLocation.path, '/')\n .split('/')\n .forEach((urlPathPart) => {\n if (!Strings.isBlank(urlPathPart) || !normalize) {\n pathSegments.push(decode(urlPathPart))\n }\n })\n }\n\n if (Objects.isPresent(uriLocation.query)) {\n uriLocation.query.split('&').forEach((parameterPair) => {\n let splitParameters = parameterPair.split('=')\n\n if (!Strings.isBlank(Arrays.first(splitParameters))) {\n let key = decode(splitParameters[0]!)\n let value = ''\n if (splitParameters.length === 2) {\n value = splitParameters[1]!\n }\n if (Objects.isNil(parameters[key])) {\n parameters[key] = decode(value)\n } else if (!Array.isArray(parameters[key])) {\n let paramList = [parameters[key]]\n paramList.push(decode(value))\n parameters[key] = paramList\n } else {\n parameters[key].push(decode(value))\n }\n }\n })\n }\n\n return {\n ...uriLocation,\n pathSegments,\n parameters,\n }\n}\n\nexport const parse = (urlString: UriString, normalize: boolean = true): Url => {\n const uri = Uris.parse(urlString)\n const location = augmentUriLocation(uri.location, normalize)\n\n if (normalize) {\n if (!Arrays.isEmpty(location.pathSegments)) {\n location.path = (Strings.startsWith(location.path, '/') ? '/' : '') + formatPathSegments(location.pathSegments)\n } else {\n location.path = ''\n }\n\n location.query = formatQueryParameters(location.parameters)\n }\n\n return {\n ...uri,\n location,\n }\n}\n\nexport const format = Uris.format\n\nconst formatPathSegments = (pathSegments: Array<string>): UriComponent => {\n return pathSegments.map((it) => encode(it)).join('/')\n}\n\nconst formatQueryParameters = (parameters: Dictionary<string | Array<string>>): UriComponent | null => {\n const parameterEntries = Object.entries(parameters)\n if (Arrays.isEmpty(parameterEntries)) {\n return null\n }\n\n return Object.entries(parameters)\n .flatMap(([key, value]) => {\n if (Array.isArray(value)) {\n return value.map((it) => `${encode(key)}=${encode(it)}`)\n } else {\n return [`${encode(key)}=${encode(value)}`]\n }\n })\n .join('&')\n}\n\nexport type UrlBuilder = UriBuilder & {\n location?: {\n parameters?: Dictionary<string | Array<string>>\n }\n}\n\nexport const build = (builder: UrlBuilder): Url => {\n const uri = Uris.build(builder)\n\n if (Objects.isPresent(builder.location?.parameters)) {\n uri.location.query = formatQueryParameters(builder.location.parameters)\n }\n\n const urlLocation = augmentUriLocation(uri.location, false)\n\n return {\n ...uri,\n location: urlLocation,\n }\n}\n\nexport const buildString = (builder: UrlBuilder): UriString => {\n return format(build(builder))\n}\n\nexport const reify = (blah: UrlLike): Url => {\n if (!Strings.isString(blah)) {\n return blah\n }\n\n return parse(blah)\n}\n\nexport const getParameter = (url: UrlLike, name: string): string | undefined => {\n const parameter = reify(url).location.parameters[name]\n if (Objects.isNil(parameter)) {\n return undefined\n }\n\n if (Array.isArray(parameter)) {\n throw new Error(`Expected a single parameter value but found multiple for parameter: ${name}`)\n }\n\n return parameter\n}\n\nexport const getJsonParameter = <T>(url: UrlLike, name: string): T | undefined => {\n const value = getParameter(url, name)\n return Objects.isPresent(value) ? JSON.parse(value) : undefined\n}\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../src/uuid.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAY,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAElC,MAAM,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAC7C,eAAO,MAAM,MAAM,EAAE,OAAO,CAAC,IAAI,CAA8B,CAAA;AAE/D,eAAO,MAAM,EAAE,GAAI,OAAO,MAAM,KAAG,IAElC,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,IAE1C,CAAA;AAED,eAAO,MAAM,QAAQ,QAAO,IAM3B,CAAA"}
1
+ {"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../src/uuid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAY,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAIlC,MAAM,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAC7C,eAAO,MAAM,MAAM,EAAE,OAAO,CAAC,IAAI,CAA8B,CAAA;AAE/D,eAAO,MAAM,EAAE,GAAI,OAAO,MAAM,KAAG,IAElC,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,IAE1C,CAAA;AAED,eAAO,MAAM,QAAQ,QAAO,IAM3B,CAAA"}