@bessemer/cornerstone 0.5.53 → 0.5.55

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 (123) hide show
  1. package/dist/array.d.ts.map +1 -1
  2. package/dist/array.js +13 -16
  3. package/dist/array.js.map +1 -1
  4. package/dist/assertion.d.ts +6 -6
  5. package/dist/assertion.d.ts.map +1 -1
  6. package/dist/assertion.js +21 -15
  7. package/dist/assertion.js.map +1 -1
  8. package/dist/async.d.ts.map +1 -1
  9. package/dist/async.js +3 -4
  10. package/dist/async.js.map +1 -1
  11. package/dist/cache.d.ts.map +1 -1
  12. package/dist/cache.js +17 -22
  13. package/dist/cache.js.map +1 -1
  14. package/dist/combinable.d.ts.map +1 -1
  15. package/dist/combinable.js +4 -5
  16. package/dist/combinable.js.map +1 -1
  17. package/dist/comparator.d.ts.map +1 -1
  18. package/dist/comparator.js +5 -8
  19. package/dist/comparator.js.map +1 -1
  20. package/dist/content.d.ts +9 -9
  21. package/dist/content.d.ts.map +1 -1
  22. package/dist/content.js +13 -18
  23. package/dist/content.js.map +1 -1
  24. package/dist/date.d.ts.map +1 -1
  25. package/dist/date.js +2 -2
  26. package/dist/date.js.map +1 -1
  27. package/dist/either.d.ts +1 -0
  28. package/dist/either.d.ts.map +1 -1
  29. package/dist/either.js +3 -2
  30. package/dist/either.js.map +1 -1
  31. package/dist/error-event.d.ts +2 -2
  32. package/dist/error-event.d.ts.map +1 -1
  33. package/dist/error-event.js +69 -51
  34. package/dist/error-event.js.map +1 -1
  35. package/dist/error.js +2 -2
  36. package/dist/error.js.map +1 -1
  37. package/dist/expression/array-expression.js +3 -3
  38. package/dist/expression/array-expression.js.map +1 -1
  39. package/dist/expression/core-expression.d.ts +6 -6
  40. package/dist/expression/core-expression.d.ts.map +1 -1
  41. package/dist/expression/core-expression.js +6 -9
  42. package/dist/expression/core-expression.js.map +1 -1
  43. package/dist/expression/expression-evaluator.js +3 -3
  44. package/dist/expression/expression-evaluator.js.map +1 -1
  45. package/dist/expression/expression-mapper.js +3 -3
  46. package/dist/expression/expression-mapper.js.map +1 -1
  47. package/dist/expression/expression.d.ts +6 -5
  48. package/dist/expression/expression.d.ts.map +1 -1
  49. package/dist/expression/expression.js +2 -2
  50. package/dist/expression/expression.js.map +1 -1
  51. package/dist/expression/internal.d.ts.map +1 -1
  52. package/dist/expression/internal.js +3 -3
  53. package/dist/expression/internal.js.map +1 -1
  54. package/dist/expression/numeric-expression.d.ts +5 -5
  55. package/dist/expression/numeric-expression.d.ts.map +1 -1
  56. package/dist/expression/numeric-expression.js +10 -11
  57. package/dist/expression/numeric-expression.js.map +1 -1
  58. package/dist/hex-code.d.ts +2 -2
  59. package/dist/hex-code.d.ts.map +1 -1
  60. package/dist/hex-code.js +1 -1
  61. package/dist/hex-code.js.map +1 -1
  62. package/dist/json.d.ts.map +1 -1
  63. package/dist/json.js +3 -3
  64. package/dist/json.js.map +1 -1
  65. package/dist/logger.d.ts.map +1 -1
  66. package/dist/logger.js +9 -10
  67. package/dist/logger.js.map +1 -1
  68. package/dist/misc.d.ts.map +1 -1
  69. package/dist/misc.js +3 -4
  70. package/dist/misc.js.map +1 -1
  71. package/dist/patch.d.ts.map +1 -1
  72. package/dist/patch.js +5 -6
  73. package/dist/patch.js.map +1 -1
  74. package/dist/property.d.ts.map +1 -1
  75. package/dist/property.js +4 -5
  76. package/dist/property.js.map +1 -1
  77. package/dist/range.d.ts.map +1 -1
  78. package/dist/range.js +3 -4
  79. package/dist/range.js.map +1 -1
  80. package/dist/reference.d.ts +2 -1
  81. package/dist/reference.d.ts.map +1 -1
  82. package/dist/reference.js +10 -13
  83. package/dist/reference.js.map +1 -1
  84. package/dist/resource.d.ts.map +1 -1
  85. package/dist/resource.js +2 -3
  86. package/dist/resource.js.map +1 -1
  87. package/dist/result.d.ts.map +1 -1
  88. package/dist/result.js +5 -6
  89. package/dist/result.js.map +1 -1
  90. package/dist/retry.d.ts.map +1 -1
  91. package/dist/retry.js +9 -14
  92. package/dist/retry.js.map +1 -1
  93. package/dist/rich-text.js +2 -2
  94. package/dist/rich-text.js.map +1 -1
  95. package/dist/signature.d.ts.map +1 -1
  96. package/dist/signature.js +4 -6
  97. package/dist/signature.js.map +1 -1
  98. package/dist/sql/sql-expression-parser.d.ts.map +1 -1
  99. package/dist/sql/sql-expression-parser.js +14 -18
  100. package/dist/sql/sql-expression-parser.js.map +1 -1
  101. package/dist/store.d.ts.map +1 -1
  102. package/dist/store.js +7 -9
  103. package/dist/store.js.map +1 -1
  104. package/dist/string.d.ts.map +1 -1
  105. package/dist/string.js +2 -2
  106. package/dist/string.js.map +1 -1
  107. package/dist/tag.d.ts.map +1 -1
  108. package/dist/tag.js +12 -12
  109. package/dist/tag.js.map +1 -1
  110. package/dist/ulid.d.ts.map +1 -1
  111. package/dist/ulid.js +3 -4
  112. package/dist/ulid.js.map +1 -1
  113. package/dist/uri.d.ts.map +1 -1
  114. package/dist/uri.js +50 -52
  115. package/dist/uri.js.map +1 -1
  116. package/dist/url.d.ts +2 -1
  117. package/dist/url.d.ts.map +1 -1
  118. package/dist/url.js +19 -28
  119. package/dist/url.js.map +1 -1
  120. package/dist/uuid.d.ts.map +1 -1
  121. package/dist/uuid.js +5 -7
  122. package/dist/uuid.js.map +1 -1
  123. package/package.json +1 -1
package/dist/uri.js CHANGED
@@ -1,7 +1,5 @@
1
1
  // src/uri.ts
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";
2
+ import { Arrays, Objects, Strings } from "@bessemer/cornerstone";
5
3
  var encode = (uriComponent) => {
6
4
  return encodeURIComponent(uriComponent);
7
5
  };
@@ -9,11 +7,11 @@ var decode = (uriComponent) => {
9
7
  return decodeURIComponent(uriComponent);
10
8
  };
11
9
  var parseSchemePart = (url) => {
12
- const schemeMatch = splitFirst(url, /(\/\/|:)/);
13
- if (isNil(schemeMatch.selection) || schemeMatch.separator === "//") {
10
+ const schemeMatch = Strings.splitFirst(url, /(\/\/|:)/);
11
+ if (Objects.isNil(schemeMatch.selection) || schemeMatch.separator === "//") {
14
12
  return [null, url];
15
13
  }
16
- if (isEmpty(schemeMatch.selection)) {
14
+ if (Strings.isEmpty(schemeMatch.selection)) {
17
15
  return [null, schemeMatch.rest];
18
16
  } else {
19
17
  return [schemeMatch.selection, schemeMatch.rest];
@@ -21,58 +19,58 @@ var parseSchemePart = (url) => {
21
19
  };
22
20
  var parseAuthenticationPart = (url) => {
23
21
  let targetPart = url;
24
- const queryMatch = splitFirst(targetPart, "?");
25
- const fragmentMatch = splitFirst(targetPart, "#");
26
- if (isPresent(queryMatch.selection)) {
22
+ const queryMatch = Strings.splitFirst(targetPart, "?");
23
+ const fragmentMatch = Strings.splitFirst(targetPart, "#");
24
+ if (Objects.isPresent(queryMatch.selection)) {
27
25
  targetPart = queryMatch.selection;
28
- } else if (isPresent(fragmentMatch.selection)) {
26
+ } else if (Objects.isPresent(fragmentMatch.selection)) {
29
27
  targetPart = fragmentMatch.selection;
30
28
  }
31
- const { selection: authentication } = splitFirst(targetPart, "@");
32
- if (isNil(authentication)) {
29
+ const { selection: authentication } = Strings.splitFirst(targetPart, "@");
30
+ if (Objects.isNil(authentication)) {
33
31
  return [null, url];
34
32
  }
35
- const { rest } = splitFirst(url, "@");
36
- return [parseAuthentication(removeStart(authentication, "//")), "//" + rest];
33
+ const { rest } = Strings.splitFirst(url, "@");
34
+ return [parseAuthentication(Strings.removeStart(authentication, "//")), "//" + rest];
37
35
  };
38
36
  var parseAuthentication = (authentication) => {
39
- const { selection: principal, rest: authenticationRest } = splitFirst(authentication, ":");
40
- if (isNil(principal)) {
37
+ const { selection: principal, rest: authenticationRest } = Strings.splitFirst(authentication, ":");
38
+ if (Objects.isNil(principal)) {
41
39
  return { principal: authenticationRest, password: null };
42
40
  }
43
- if (isEmpty(principal)) {
41
+ if (Strings.isEmpty(principal)) {
44
42
  throw new Error(`Unable to parse Authentication: ${authentication}`);
45
43
  }
46
44
  return { principal, password: authenticationRest };
47
45
  };
48
46
  var parseHostPart = (url) => {
49
- if (startsWith(url, "?") || startsWith(url, "#")) {
47
+ if (Strings.startsWith(url, "?") || Strings.startsWith(url, "#")) {
50
48
  return [null, url];
51
49
  }
52
- let hostRequired = startsWith(url, "//");
50
+ let hostRequired = Strings.startsWith(url, "//");
53
51
  if (!hostRequired) {
54
52
  return [null, url];
55
53
  }
56
- url = removeStart(url, "//");
57
- const urlMatch = splitFirst(url, /[\/?#]/);
54
+ url = Strings.removeStart(url, "//");
55
+ const urlMatch = Strings.splitFirst(url, /[\/?#]/);
58
56
  let host = urlMatch.rest;
59
57
  let rest = "";
60
- if (isPresent(urlMatch.selection)) {
58
+ if (Objects.isPresent(urlMatch.selection)) {
61
59
  host = urlMatch.selection;
62
60
  rest = urlMatch.separator + urlMatch.rest;
63
61
  }
64
- if (isEmpty(host)) {
62
+ if (Strings.isEmpty(host)) {
65
63
  return [null, rest];
66
64
  }
67
65
  return [parseHost(host), rest];
68
66
  };
69
67
  var parseHost = (host) => {
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)) {
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)) {
76
74
  return { value: ipMatch.selection + "]", port: Number(portMatch.rest) };
77
75
  }
78
76
  } else {
@@ -80,11 +78,11 @@ var parseHost = (host) => {
80
78
  }
81
79
  }
82
80
  }
83
- let hostMatch = splitFirst(host, ":");
84
- if (isNil(hostMatch.selection)) {
81
+ let hostMatch = Strings.splitFirst(host, ":");
82
+ if (Objects.isNil(hostMatch.selection)) {
85
83
  return { value: hostMatch.rest, port: null };
86
84
  }
87
- if (isEmpty(hostMatch.selection)) {
85
+ if (Strings.isEmpty(hostMatch.selection)) {
88
86
  throw new Error(`Unable to parse Host: ${host}`);
89
87
  }
90
88
  const hostName = hostMatch.selection;
@@ -92,12 +90,12 @@ var parseHost = (host) => {
92
90
  };
93
91
  var parseLocation = (url) => {
94
92
  const location = { path: "", query: null, fragment: null };
95
- const fragmentMatch = splitFirst(url, "#");
96
- if (isPresent(fragmentMatch.selection) && !isEmpty(fragmentMatch.rest)) {
93
+ const fragmentMatch = Strings.splitFirst(url, "#");
94
+ if (Objects.isPresent(fragmentMatch.selection) && !Strings.isEmpty(fragmentMatch.rest)) {
97
95
  location.fragment = fragmentMatch.rest;
98
96
  }
99
- const queryMatch = splitFirst(fragmentMatch.selection ?? fragmentMatch.rest, "?");
100
- if (isPresent(queryMatch.selection) && !isEmpty(queryMatch.rest)) {
97
+ const queryMatch = Strings.splitFirst(fragmentMatch.selection ?? fragmentMatch.rest, "?");
98
+ if (Objects.isPresent(queryMatch.selection) && !Strings.isEmpty(queryMatch.rest)) {
101
99
  location.query = queryMatch.rest;
102
100
  }
103
101
  location.path = queryMatch.selection ?? queryMatch.rest;
@@ -121,8 +119,8 @@ var emptyLocation = () => {
121
119
  var build = (builder) => {
122
120
  const scheme = builder.scheme ?? null;
123
121
  let host = null;
124
- if (isPresent(builder.host)) {
125
- if (isString(builder.host)) {
122
+ if (Objects.isPresent(builder.host)) {
123
+ if (Strings.isString(builder.host)) {
126
124
  host = parseHost(builder.host);
127
125
  } else {
128
126
  host = {
@@ -132,8 +130,8 @@ var build = (builder) => {
132
130
  }
133
131
  }
134
132
  let authentication = null;
135
- if (isPresent(builder.authentication)) {
136
- if (isString(builder.authentication)) {
133
+ if (Objects.isPresent(builder.authentication)) {
134
+ if (Strings.isString(builder.authentication)) {
137
135
  authentication = parseAuthentication(builder.authentication);
138
136
  } else {
139
137
  authentication = {
@@ -143,8 +141,8 @@ var build = (builder) => {
143
141
  }
144
142
  }
145
143
  let location = emptyLocation();
146
- if (isPresent(builder.location)) {
147
- if (isString(builder.location)) {
144
+ if (Objects.isPresent(builder.location)) {
145
+ if (Strings.isString(builder.location)) {
148
146
  location = parseLocation(builder.location);
149
147
  } else {
150
148
  location = {
@@ -169,39 +167,39 @@ var UriComponentType = /* @__PURE__ */ ((UriComponentType2) => {
169
167
  })(UriComponentType || {});
170
168
  var format = (uri, format2 = Object.values(UriComponentType)) => {
171
169
  let urlString = "";
172
- if (isPresent(uri.scheme) && contains(format2, "Scheme" /* Scheme */)) {
170
+ if (Objects.isPresent(uri.scheme) && Arrays.contains(format2, "Scheme" /* Scheme */)) {
173
171
  urlString = urlString + uri.scheme;
174
172
  }
175
- if (isPresent(uri.host) && contains(format2, "Host" /* Host */)) {
176
- if (isPresent(uri.scheme)) {
173
+ if (Objects.isPresent(uri.host) && Arrays.contains(format2, "Host" /* Host */)) {
174
+ if (Objects.isPresent(uri.scheme)) {
177
175
  urlString = urlString + "://";
178
176
  }
179
- if (isPresent(uri.authentication)) {
177
+ if (Objects.isPresent(uri.authentication)) {
180
178
  urlString = urlString + uri.authentication.principal;
181
- if (isPresent(uri.authentication.password)) {
179
+ if (Objects.isPresent(uri.authentication.password)) {
182
180
  urlString = urlString + ":" + uri.authentication.password;
183
181
  }
184
182
  urlString = urlString + "@";
185
183
  }
186
184
  urlString = urlString + uri.host.value;
187
- if (isPresent(uri.host.port)) {
185
+ if (Objects.isPresent(uri.host.port)) {
188
186
  urlString = urlString + ":" + uri.host.port;
189
187
  }
190
188
  }
191
- if (contains(format2, "Location" /* Location */)) {
189
+ if (Arrays.contains(format2, "Location" /* Location */)) {
192
190
  urlString = urlString + formatLocation(uri.location, format2);
193
191
  }
194
192
  return urlString;
195
193
  };
196
194
  var formatLocation = (location, format2) => {
197
195
  let urlString = "";
198
- if (!isEmpty(location.path)) {
196
+ if (!Strings.isEmpty(location.path)) {
199
197
  urlString = urlString + location.path;
200
198
  }
201
- if (!isEmpty(location.query)) {
199
+ if (!Strings.isEmpty(location.query)) {
202
200
  urlString = urlString + "?" + location.query;
203
201
  }
204
- if (!isEmpty(location.fragment)) {
202
+ if (!Strings.isEmpty(location.fragment)) {
205
203
  urlString = urlString + "#" + encode(location.fragment);
206
204
  }
207
205
  return urlString;
package/dist/uri.js.map CHANGED
@@ -1 +1 @@
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"]}
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"]}
package/dist/url.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { Uris } from '@bessemer/cornerstone';
1
2
  import { Dictionary } from '@bessemer/cornerstone/types';
2
3
  import { Uri, UriBuilder, UriComponent, UriLocation, UriString } from '@bessemer/cornerstone/uri';
3
4
  export declare const encode: (uriComponent: UriComponent) => string;
@@ -11,7 +12,7 @@ export interface Url extends Uri {
11
12
  }
12
13
  export type UrlLike = Url | UriString;
13
14
  export declare const parse: (urlString: UriString, normalize?: boolean) => Url;
14
- export declare const format: (uri: Uri, format?: Array<import("@bessemer/cornerstone/uri").UriComponentType>) => UriString;
15
+ export declare const format: (uri: Uri, format?: Array<Uris.UriComponentType>) => UriString;
15
16
  export type UrlBuilder = UriBuilder & {
16
17
  location?: {
17
18
  parameters?: Dictionary<string | Array<string>>;
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,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAML,GAAG,EACH,UAAU,EACV,YAAY,EACZ,WAAW,EACX,SAAS,EACV,MAAM,2BAA2B,CAAA;AAKlC,eAAO,MAAM,MAAM,wCAAY,CAAA;AAE/B,eAAO,MAAM,MAAM,wCAAY,CAAA;AAE/B,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,+FAAY,CAAA;AAuB/B,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,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"}
package/dist/url.js CHANGED
@@ -1,36 +1,27 @@
1
1
  // src/url.ts
2
- import {
3
- build as uriBuild,
4
- decode as uriDecode,
5
- encode as uriEncode,
6
- format as uriFormat,
7
- parse as uriParse
8
- } from "@bessemer/cornerstone/uri";
9
- import { isBlank, isString, removeStart, startsWith } from "@bessemer/cornerstone/string";
10
- import { isNil, isPresent } from "@bessemer/cornerstone/object";
11
- import { first, isEmpty } from "@bessemer/cornerstone/array";
12
- var encode = uriEncode;
13
- var decode = uriDecode;
2
+ import { Arrays, Objects, Strings, Uris } from "@bessemer/cornerstone";
3
+ var encode = Uris.encode;
4
+ var decode = Uris.decode;
14
5
  var augmentUriLocation = (uriLocation, normalize) => {
15
6
  const pathSegments = [];
16
7
  const parameters = {};
17
- if (!isBlank(uriLocation.path)) {
18
- removeStart(uriLocation.path, "/").split("/").forEach((urlPathPart) => {
19
- if (!isBlank(urlPathPart) || !normalize) {
8
+ if (!Strings.isBlank(uriLocation.path)) {
9
+ Strings.removeStart(uriLocation.path, "/").split("/").forEach((urlPathPart) => {
10
+ if (!Strings.isBlank(urlPathPart) || !normalize) {
20
11
  pathSegments.push(decode(urlPathPart));
21
12
  }
22
13
  });
23
14
  }
24
- if (isPresent(uriLocation.query)) {
15
+ if (Objects.isPresent(uriLocation.query)) {
25
16
  uriLocation.query.split("&").forEach((parameterPair) => {
26
17
  let splitParameters = parameterPair.split("=");
27
- if (!isBlank(first(splitParameters))) {
18
+ if (!Strings.isBlank(Arrays.first(splitParameters))) {
28
19
  let key = decode(splitParameters[0]);
29
20
  let value = "";
30
21
  if (splitParameters.length === 2) {
31
22
  value = splitParameters[1];
32
23
  }
33
- if (isNil(parameters[key])) {
24
+ if (Objects.isNil(parameters[key])) {
34
25
  parameters[key] = decode(value);
35
26
  } else if (!Array.isArray(parameters[key])) {
36
27
  let paramList = [parameters[key]];
@@ -49,11 +40,11 @@ var augmentUriLocation = (uriLocation, normalize) => {
49
40
  };
50
41
  };
51
42
  var parse = (urlString, normalize = true) => {
52
- const uri = uriParse(urlString);
43
+ const uri = Uris.parse(urlString);
53
44
  const location = augmentUriLocation(uri.location, normalize);
54
45
  if (normalize) {
55
- if (!isEmpty(location.pathSegments)) {
56
- location.path = (startsWith(location.path, "/") ? "/" : "") + formatPathSegments(location.pathSegments);
46
+ if (!Arrays.isEmpty(location.pathSegments)) {
47
+ location.path = (Strings.startsWith(location.path, "/") ? "/" : "") + formatPathSegments(location.pathSegments);
57
48
  } else {
58
49
  location.path = "";
59
50
  }
@@ -64,13 +55,13 @@ var parse = (urlString, normalize = true) => {
64
55
  location
65
56
  };
66
57
  };
67
- var format = uriFormat;
58
+ var format = Uris.format;
68
59
  var formatPathSegments = (pathSegments) => {
69
60
  return pathSegments.map((it) => encode(it)).join("/");
70
61
  };
71
62
  var formatQueryParameters = (parameters) => {
72
63
  const parameterEntries = Object.entries(parameters);
73
- if (isEmpty(parameterEntries)) {
64
+ if (Arrays.isEmpty(parameterEntries)) {
74
65
  return null;
75
66
  }
76
67
  return Object.entries(parameters).flatMap(([key, value]) => {
@@ -82,8 +73,8 @@ var formatQueryParameters = (parameters) => {
82
73
  }).join("&");
83
74
  };
84
75
  var build = (builder) => {
85
- const uri = uriBuild(builder);
86
- if (isPresent(builder.location?.parameters)) {
76
+ const uri = Uris.build(builder);
77
+ if (Objects.isPresent(builder.location?.parameters)) {
87
78
  uri.location.query = formatQueryParameters(builder.location.parameters);
88
79
  }
89
80
  const urlLocation = augmentUriLocation(uri.location, false);
@@ -96,14 +87,14 @@ var buildString = (builder) => {
96
87
  return format(build(builder));
97
88
  };
98
89
  var reify = (blah) => {
99
- if (!isString(blah)) {
90
+ if (!Strings.isString(blah)) {
100
91
  return blah;
101
92
  }
102
93
  return parse(blah);
103
94
  };
104
95
  var getParameter = (url, name) => {
105
96
  const parameter = reify(url).location.parameters[name];
106
- if (isNil(parameter)) {
97
+ if (Objects.isNil(parameter)) {
107
98
  return void 0;
108
99
  }
109
100
  if (Array.isArray(parameter)) {
@@ -113,7 +104,7 @@ var getParameter = (url, name) => {
113
104
  };
114
105
  var getJsonParameter = (url, name) => {
115
106
  const value = getParameter(url, name);
116
- return isPresent(value) ? JSON.parse(value) : void 0;
107
+ return Objects.isPresent(value) ? JSON.parse(value) : void 0;
117
108
  };
118
109
  export {
119
110
  build,
package/dist/url.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/url.ts"],"sourcesContent":["import { Dictionary } from '@bessemer/cornerstone/types'\nimport {\n build as uriBuild,\n decode as uriDecode,\n encode as uriEncode,\n format as uriFormat,\n parse as uriParse,\n Uri,\n UriBuilder,\n UriComponent,\n UriLocation,\n UriString,\n} from '@bessemer/cornerstone/uri'\nimport { isBlank, isString, removeStart, startsWith } from '@bessemer/cornerstone/string'\nimport { isNil, isPresent } from '@bessemer/cornerstone/object'\nimport { first, isEmpty } from '@bessemer/cornerstone/array'\n\nexport const encode = uriEncode\n\nexport const decode = uriDecode\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 (!isBlank(uriLocation.path)) {\n removeStart(uriLocation.path, '/')\n .split('/')\n .forEach((urlPathPart) => {\n if (!isBlank(urlPathPart) || !normalize) {\n pathSegments.push(decode(urlPathPart))\n }\n })\n }\n\n if (isPresent(uriLocation.query)) {\n uriLocation.query.split('&').forEach((parameterPair) => {\n let splitParameters = parameterPair.split('=')\n\n if (!isBlank(first(splitParameters))) {\n let key = decode(splitParameters[0]!)\n let value = ''\n if (splitParameters.length === 2) {\n value = splitParameters[1]!\n }\n if (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 = uriParse(urlString)\n const location = augmentUriLocation(uri.location, normalize)\n\n if (normalize) {\n if (!isEmpty(location.pathSegments)) {\n location.path = (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 = uriFormat\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 (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 = uriBuild(builder)\n if (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 (!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 (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 isPresent(value) ? JSON.parse(value) : undefined\n}\n"],"mappings":";AACA;AAAA,EACE,SAAS;AAAA,EACT,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,SAAS;AAAA,OAMJ;AACP,SAAS,SAAS,UAAU,aAAa,kBAAkB;AAC3D,SAAS,OAAO,iBAAiB;AACjC,SAAS,OAAO,eAAe;AAExB,IAAM,SAAS;AAEf,IAAM,SAAS;AAatB,IAAM,qBAAqB,CAAC,aAA0B,cAAoC;AACxF,QAAM,eAA8B,CAAC;AACrC,QAAM,aAAiD,CAAC;AAExD,MAAI,CAAC,QAAQ,YAAY,IAAI,GAAG;AAC9B,gBAAY,YAAY,MAAM,GAAG,EAC9B,MAAM,GAAG,EACT,QAAQ,CAAC,gBAAgB;AACxB,UAAI,CAAC,QAAQ,WAAW,KAAK,CAAC,WAAW;AACvC,qBAAa,KAAK,OAAO,WAAW,CAAC;AAAA,MACvC;AAAA,IACF,CAAC;AAAA,EACL;AAEA,MAAI,UAAU,YAAY,KAAK,GAAG;AAChC,gBAAY,MAAM,MAAM,GAAG,EAAE,QAAQ,CAAC,kBAAkB;AACtD,UAAI,kBAAkB,cAAc,MAAM,GAAG;AAE7C,UAAI,CAAC,QAAQ,MAAM,eAAe,CAAC,GAAG;AACpC,YAAI,MAAM,OAAO,gBAAgB,CAAC,CAAE;AACpC,YAAI,QAAQ;AACZ,YAAI,gBAAgB,WAAW,GAAG;AAChC,kBAAQ,gBAAgB,CAAC;AAAA,QAC3B;AACA,YAAI,MAAM,WAAW,GAAG,CAAC,GAAG;AAC1B,qBAAW,GAAG,IAAI,OAAO,KAAK;AAAA,QAChC,WAAW,CAAC,MAAM,QAAQ,WAAW,GAAG,CAAC,GAAG;AAC1C,cAAI,YAAY,CAAC,WAAW,GAAG,CAAC;AAChC,oBAAU,KAAK,OAAO,KAAK,CAAC;AAC5B,qBAAW,GAAG,IAAI;AAAA,QACpB,OAAO;AACL,qBAAW,GAAG,EAAE,KAAK,OAAO,KAAK,CAAC;AAAA,QACpC;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA;AAAA,EACF;AACF;AAEO,IAAM,QAAQ,CAAC,WAAsB,YAAqB,SAAc;AAC7E,QAAM,MAAM,SAAS,SAAS;AAC9B,QAAM,WAAW,mBAAmB,IAAI,UAAU,SAAS;AAE3D,MAAI,WAAW;AACb,QAAI,CAAC,QAAQ,SAAS,YAAY,GAAG;AACnC,eAAS,QAAQ,WAAW,SAAS,MAAM,GAAG,IAAI,MAAM,MAAM,mBAAmB,SAAS,YAAY;AAAA,IACxG,OAAO;AACL,eAAS,OAAO;AAAA,IAClB;AAEA,aAAS,QAAQ,sBAAsB,SAAS,UAAU;AAAA,EAC5D;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,EACF;AACF;AAEO,IAAM,SAAS;AAEtB,IAAM,qBAAqB,CAAC,iBAA8C;AACxE,SAAO,aAAa,IAAI,CAAC,OAAO,OAAO,EAAE,CAAC,EAAE,KAAK,GAAG;AACtD;AAEA,IAAM,wBAAwB,CAAC,eAAwE;AACrG,QAAM,mBAAmB,OAAO,QAAQ,UAAU;AAClD,MAAI,QAAQ,gBAAgB,GAAG;AAC7B,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,QAAQ,UAAU,EAC7B,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACzB,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,aAAO,MAAM,IAAI,CAAC,OAAO,GAAG,OAAO,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE;AAAA,IACzD,OAAO;AACL,aAAO,CAAC,GAAG,OAAO,GAAG,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE;AAAA,IAC3C;AAAA,EACF,CAAC,EACA,KAAK,GAAG;AACb;AAQO,IAAM,QAAQ,CAAC,YAA6B;AACjD,QAAM,MAAM,SAAS,OAAO;AAC5B,MAAI,UAAU,QAAQ,UAAU,UAAU,GAAG;AAC3C,QAAI,SAAS,QAAQ,sBAAsB,QAAQ,SAAS,UAAU;AAAA,EACxE;AAEA,QAAM,cAAc,mBAAmB,IAAI,UAAU,KAAK;AAE1D,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAU;AAAA,EACZ;AACF;AAEO,IAAM,cAAc,CAAC,YAAmC;AAC7D,SAAO,OAAO,MAAM,OAAO,CAAC;AAC9B;AAEO,IAAM,QAAQ,CAAC,SAAuB;AAC3C,MAAI,CAAC,SAAS,IAAI,GAAG;AACnB,WAAO;AAAA,EACT;AAEA,SAAO,MAAM,IAAI;AACnB;AAEO,IAAM,eAAe,CAAC,KAAc,SAAqC;AAC9E,QAAM,YAAY,MAAM,GAAG,EAAE,SAAS,WAAW,IAAI;AACrD,MAAI,MAAM,SAAS,GAAG;AACpB,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,QAAQ,SAAS,GAAG;AAC5B,UAAM,IAAI,MAAM,uEAAuE,IAAI,EAAE;AAAA,EAC/F;AAEA,SAAO;AACT;AAEO,IAAM,mBAAmB,CAAI,KAAc,SAAgC;AAChF,QAAM,QAAQ,aAAa,KAAK,IAAI;AACpC,SAAO,UAAU,KAAK,IAAI,KAAK,MAAM,KAAK,IAAI;AAChD;","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\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 +1 @@
1
- {"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../src/uuid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAKxD,MAAM,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAE7C,eAAO,MAAM,QAAQ,QAAO,IAM3B,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,OAAO,IAAI,KAAG,MAEtC,CAAA;AAED,eAAO,MAAM,cAAc,QAAO,MAEjC,CAAA;AAQD,eAAO,MAAM,EAAE,GAAI,OAAO,MAAM,KAAG,IAGlC,CAAA;AAID,eAAO,MAAM,OAAO,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,IAEjD,CAAA"}
1
+ {"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../src/uuid.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAExD,MAAM,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAE7C,eAAO,MAAM,QAAQ,QAAO,IAM3B,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,OAAO,IAAI,KAAG,MAEtC,CAAA;AAED,eAAO,MAAM,cAAc,QAAO,MAEjC,CAAA;AAQD,eAAO,MAAM,EAAE,GAAI,OAAO,MAAM,KAAG,IAGlC,CAAA;AAID,eAAO,MAAM,OAAO,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,IAEjD,CAAA"}
package/dist/uuid.js CHANGED
@@ -1,9 +1,7 @@
1
1
  // src/uuid.ts
2
- import { isNil } from "@bessemer/cornerstone/object";
3
- import { isString, padStart } from "@bessemer/cornerstone/string";
4
- import { assertTrue } from "@bessemer/cornerstone/assertion";
2
+ import { Assertions, Objects, Strings } from "@bessemer/cornerstone";
5
3
  var generate = () => {
6
- if (isNil(crypto.randomUUID)) {
4
+ if (Objects.isNil(crypto.randomUUID)) {
7
5
  return `${randomHex(8)}-${randomHex(4)}-${randomHex(4)}-${randomHex(4)}-${randomHex(12)}`;
8
6
  } else {
9
7
  return crypto.randomUUID();
@@ -17,15 +15,15 @@ var generateString = () => {
17
15
  };
18
16
  var randomHex = (characters) => {
19
17
  const randomNum = Math.floor(Math.random() * (16 ** characters - 1));
20
- return padStart(randomNum.toString(16), characters, "0");
18
+ return Strings.padStart(randomNum.toString(16), characters, "0");
21
19
  };
22
20
  var of = (value) => {
23
- assertTrue(isValid(value), () => `Attempted to coerce invalid value to Uuid: ${value}`);
21
+ Assertions.assertTrue(isValid(value), () => `Attempted to coerce invalid value to Uuid: ${value}`);
24
22
  return value;
25
23
  };
26
24
  var pattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
27
25
  var isValid = (value) => {
28
- return isString(value) && pattern.test(value);
26
+ return Strings.isString(value) && pattern.test(value);
29
27
  };
30
28
  export {
31
29
  asString,
package/dist/uuid.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/uuid.ts"],"sourcesContent":["import { TaggedType } from '@bessemer/cornerstone/types'\nimport { isNil } from '@bessemer/cornerstone/object'\nimport { isString, padStart } from '@bessemer/cornerstone/string'\nimport { assertTrue } from '@bessemer/cornerstone/assertion'\n\nexport type Uuid = TaggedType<string, 'Uuid'>\n\nexport const generate = (): Uuid => {\n if (isNil(crypto.randomUUID)) {\n return `${randomHex(8)}-${randomHex(4)}-${randomHex(4)}-${randomHex(4)}-${randomHex(12)}` as Uuid\n } else {\n return crypto.randomUUID() as Uuid\n }\n}\n\nexport const asString = (value: Uuid): string => {\n return value\n}\n\nexport const generateString = (): string => {\n return asString(generate())\n}\n\nconst randomHex = (characters: number) => {\n // Generates a random number between 0x0..0 and 0xF..F for the target number of characters\n const randomNum = Math.floor(Math.random() * (16 ** characters - 1))\n return padStart(randomNum.toString(16), characters, '0')\n}\n\nexport const of = (value: string): Uuid => {\n assertTrue(isValid(value), () => `Attempted to coerce invalid value to Uuid: ${value}`)\n return value as Uuid\n}\n\nconst pattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\n\nexport const isValid = (value: unknown): value is Uuid => {\n return isString(value) && pattern.test(value)\n}\n"],"mappings":";AACA,SAAS,aAAa;AACtB,SAAS,UAAU,gBAAgB;AACnC,SAAS,kBAAkB;AAIpB,IAAM,WAAW,MAAY;AAClC,MAAI,MAAM,OAAO,UAAU,GAAG;AAC5B,WAAO,GAAG,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC;AAAA,EACzF,OAAO;AACL,WAAO,OAAO,WAAW;AAAA,EAC3B;AACF;AAEO,IAAM,WAAW,CAAC,UAAwB;AAC/C,SAAO;AACT;AAEO,IAAM,iBAAiB,MAAc;AAC1C,SAAO,SAAS,SAAS,CAAC;AAC5B;AAEA,IAAM,YAAY,CAAC,eAAuB;AAExC,QAAM,YAAY,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM,aAAa,EAAE;AACnE,SAAO,SAAS,UAAU,SAAS,EAAE,GAAG,YAAY,GAAG;AACzD;AAEO,IAAM,KAAK,CAAC,UAAwB;AACzC,aAAW,QAAQ,KAAK,GAAG,MAAM,8CAA8C,KAAK,EAAE;AACtF,SAAO;AACT;AAEA,IAAM,UAAU;AAET,IAAM,UAAU,CAAC,UAAkC;AACxD,SAAO,SAAS,KAAK,KAAK,QAAQ,KAAK,KAAK;AAC9C;","names":[]}
1
+ {"version":3,"sources":["../src/uuid.ts"],"sourcesContent":["import { Assertions, Objects, Strings } from '@bessemer/cornerstone'\nimport { TaggedType } from '@bessemer/cornerstone/types'\n\nexport type Uuid = TaggedType<string, 'Uuid'>\n\nexport const generate = (): Uuid => {\n if (Objects.isNil(crypto.randomUUID)) {\n return `${randomHex(8)}-${randomHex(4)}-${randomHex(4)}-${randomHex(4)}-${randomHex(12)}` as Uuid\n } else {\n return crypto.randomUUID() as Uuid\n }\n}\n\nexport const asString = (value: Uuid): string => {\n return value\n}\n\nexport const generateString = (): string => {\n return asString(generate())\n}\n\nconst randomHex = (characters: number) => {\n // Generates a random number between 0x0..0 and 0xF..F for the target number of characters\n const randomNum = Math.floor(Math.random() * (16 ** characters - 1))\n return Strings.padStart(randomNum.toString(16), characters, '0')\n}\n\nexport const of = (value: string): Uuid => {\n Assertions.assertTrue(isValid(value), () => `Attempted to coerce invalid value to Uuid: ${value}`)\n return value as Uuid\n}\n\nconst pattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\n\nexport const isValid = (value: unknown): value is Uuid => {\n return Strings.isString(value) && pattern.test(value)\n}\n"],"mappings":";AAAA,SAAS,YAAY,SAAS,eAAe;AAKtC,IAAM,WAAW,MAAY;AAClC,MAAI,QAAQ,MAAM,OAAO,UAAU,GAAG;AACpC,WAAO,GAAG,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC;AAAA,EACzF,OAAO;AACL,WAAO,OAAO,WAAW;AAAA,EAC3B;AACF;AAEO,IAAM,WAAW,CAAC,UAAwB;AAC/C,SAAO;AACT;AAEO,IAAM,iBAAiB,MAAc;AAC1C,SAAO,SAAS,SAAS,CAAC;AAC5B;AAEA,IAAM,YAAY,CAAC,eAAuB;AAExC,QAAM,YAAY,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM,aAAa,EAAE;AACnE,SAAO,QAAQ,SAAS,UAAU,SAAS,EAAE,GAAG,YAAY,GAAG;AACjE;AAEO,IAAM,KAAK,CAAC,UAAwB;AACzC,aAAW,WAAW,QAAQ,KAAK,GAAG,MAAM,8CAA8C,KAAK,EAAE;AACjG,SAAO;AACT;AAEA,IAAM,UAAU;AAET,IAAM,UAAU,CAAC,UAAkC;AACxD,SAAO,QAAQ,SAAS,KAAK,KAAK,QAAQ,KAAK,KAAK;AACtD;","names":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bessemer/cornerstone",
3
3
  "type": "module",
4
- "version": "0.5.53",
4
+ "version": "0.5.55",
5
5
  "module": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
7
7
  "sideEffects": false,