@bessemer/cornerstone 0.5.109 → 0.5.110

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 (120) hide show
  1. package/dist/array.d.ts +2 -1
  2. package/dist/array.d.ts.map +1 -1
  3. package/dist/array.js +11 -0
  4. package/dist/array.js.map +1 -1
  5. package/dist/either.d.ts +23 -40
  6. package/dist/either.d.ts.map +1 -1
  7. package/dist/either.js +50 -88
  8. package/dist/either.js.map +1 -1
  9. package/dist/error/error-event.d.ts.map +1 -1
  10. package/dist/error/error-event.js +3 -2
  11. package/dist/error/error-event.js.map +1 -1
  12. package/dist/error/error.d.ts +10 -0
  13. package/dist/error/error.d.ts.map +1 -1
  14. package/dist/error/error.js +21 -2
  15. package/dist/error/error.js.map +1 -1
  16. package/dist/generators.d.ts +2 -0
  17. package/dist/generators.d.ts.map +1 -0
  18. package/dist/generators.js +14 -0
  19. package/dist/generators.js.map +1 -0
  20. package/dist/index.d.ts +6 -1
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +10 -0
  23. package/dist/index.js.map +1 -1
  24. package/dist/json.d.ts +2 -1
  25. package/dist/json.d.ts.map +1 -1
  26. package/dist/json.js.map +1 -1
  27. package/dist/math.d.ts +2 -0
  28. package/dist/math.d.ts.map +1 -1
  29. package/dist/math.js +9 -1
  30. package/dist/math.js.map +1 -1
  31. package/dist/mime-type.d.ts +4 -3
  32. package/dist/mime-type.d.ts.map +1 -1
  33. package/dist/mime-type.js +9 -6
  34. package/dist/mime-type.js.map +1 -1
  35. package/dist/net/content-type.d.ts +21 -0
  36. package/dist/net/content-type.d.ts.map +1 -0
  37. package/dist/net/content-type.js +120 -0
  38. package/dist/net/content-type.js.map +1 -0
  39. package/dist/net/fetch.d.ts +18 -0
  40. package/dist/net/fetch.d.ts.map +1 -0
  41. package/dist/net/fetch.js +65 -0
  42. package/dist/net/fetch.js.map +1 -0
  43. package/dist/net/http-method.d.ts +18 -0
  44. package/dist/net/http-method.d.ts.map +1 -0
  45. package/dist/net/http-method.js +37 -0
  46. package/dist/net/http-method.js.map +1 -0
  47. package/dist/net/http-request.d.ts +12 -0
  48. package/dist/net/http-request.d.ts.map +1 -0
  49. package/dist/net/http-request.js +1 -0
  50. package/dist/net/http-request.js.map +1 -0
  51. package/dist/net/uri-host-name.d.ts +1 -1
  52. package/dist/net/uri-host-name.d.ts.map +1 -1
  53. package/dist/net/uri-host-name.js +6 -6
  54. package/dist/net/uri-host-name.js.map +1 -1
  55. package/dist/net/uri.d.ts +12 -4
  56. package/dist/net/uri.d.ts.map +1 -1
  57. package/dist/net/uri.js +87 -36
  58. package/dist/net/uri.js.map +1 -1
  59. package/dist/net/url.d.ts +9 -6
  60. package/dist/net/url.d.ts.map +1 -1
  61. package/dist/net/url.js +58 -21
  62. package/dist/net/url.js.map +1 -1
  63. package/dist/object/object-diff.d.ts.map +1 -1
  64. package/dist/object/object-diff.js.map +1 -1
  65. package/dist/object/type-path.d.ts.map +1 -1
  66. package/dist/object/type-path.js +12 -14
  67. package/dist/object/type-path.js.map +1 -1
  68. package/dist/object.d.ts +2 -0
  69. package/dist/object.d.ts.map +1 -1
  70. package/dist/object.js +17 -1
  71. package/dist/object.js.map +1 -1
  72. package/dist/promise.d.ts +3 -1
  73. package/dist/promise.d.ts.map +1 -1
  74. package/dist/promise.js +9 -0
  75. package/dist/promise.js.map +1 -1
  76. package/dist/proxy.d.ts +2 -0
  77. package/dist/proxy.d.ts.map +1 -0
  78. package/dist/proxy.js +20 -0
  79. package/dist/proxy.js.map +1 -0
  80. package/dist/result.d.ts +18 -20
  81. package/dist/result.d.ts.map +1 -1
  82. package/dist/result.js +41 -61
  83. package/dist/result.js.map +1 -1
  84. package/dist/retry.d.ts.map +1 -1
  85. package/dist/retry.js +3 -3
  86. package/dist/retry.js.map +1 -1
  87. package/dist/sql/sql-expression-parser.d.ts.map +1 -1
  88. package/dist/sql/sql-expression-parser.js +5 -5
  89. package/dist/sql/sql-expression-parser.js.map +1 -1
  90. package/dist/string.d.ts +1 -0
  91. package/dist/string.d.ts.map +1 -1
  92. package/dist/string.js +4 -0
  93. package/dist/string.js.map +1 -1
  94. package/dist/temporal/duration.d.ts.map +1 -1
  95. package/dist/temporal/duration.js +2 -1
  96. package/dist/temporal/duration.js.map +1 -1
  97. package/dist/temporal/instant.d.ts.map +1 -1
  98. package/dist/temporal/instant.js +2 -1
  99. package/dist/temporal/instant.js.map +1 -1
  100. package/dist/temporal/plain-date-time.d.ts.map +1 -1
  101. package/dist/temporal/plain-date-time.js +2 -1
  102. package/dist/temporal/plain-date-time.js.map +1 -1
  103. package/dist/temporal/plain-date.d.ts.map +1 -1
  104. package/dist/temporal/plain-date.js +2 -1
  105. package/dist/temporal/plain-date.js.map +1 -1
  106. package/dist/temporal/plain-time.d.ts.map +1 -1
  107. package/dist/temporal/plain-time.js +2 -1
  108. package/dist/temporal/plain-time.js.map +1 -1
  109. package/dist/temporal/zoned-date-time.d.ts.map +1 -1
  110. package/dist/temporal/zoned-date-time.js +2 -1
  111. package/dist/temporal/zoned-date-time.js.map +1 -1
  112. package/dist/types.d.ts +23 -0
  113. package/dist/types.d.ts.map +1 -1
  114. package/dist/types.js +6 -0
  115. package/dist/types.js.map +1 -1
  116. package/dist/zod-util.d.ts +55 -6
  117. package/dist/zod-util.d.ts.map +1 -1
  118. package/dist/zod-util.js +99 -11
  119. package/dist/zod-util.js.map +1 -1
  120. package/package.json +2 -2
@@ -0,0 +1,18 @@
1
+ import { Dictionary } from '@bessemer/cornerstone/types';
2
+ export type FetchRequest = NonNullable<Parameters<typeof fetch>[1]>;
3
+ export type FetchResponse = Awaited<ReturnType<typeof fetch>>;
4
+ export type FetchPayload = {
5
+ url: string;
6
+ } & FetchRequest;
7
+ export type FetchFunction = (url: string, request: FetchRequest | undefined) => Promise<FetchResponse>;
8
+ export type FetchRequestDto = {
9
+ url: string;
10
+ headers?: Dictionary<string>;
11
+ body?: string;
12
+ } & Pick<FetchRequest, 'method' | 'mode' | 'credentials' | 'cache' | 'redirect' | 'referrer' | 'integrity'>;
13
+ export type FetchResponseDto = {
14
+ url: string;
15
+ };
16
+ export declare const serializeRequest: (request: FetchPayload) => FetchRequestDto;
17
+ export declare const serializeResponse: (response: FetchResponse) => FetchResponseDto;
18
+ //# sourceMappingURL=fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/net/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAMxD,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACnE,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC,CAAA;AAC7D,MAAM,MAAM,YAAY,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,YAAY,CAAA;AACzD,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,SAAS,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;AAEtG,MAAM,MAAM,eAAe,GAAG;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,MAAM,GAAG,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC,CAAA;AAE3G,MAAM,MAAM,gBAAgB,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AAE9C,eAAO,MAAM,gBAAgB,GAAI,SAAS,YAAY,KAAG,eA0DxD,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,UAAU,aAAa,KAAG,gBAE3D,CAAA"}
@@ -0,0 +1,65 @@
1
+ // src/net/fetch.ts
2
+ import * as Objects from "@bessemer/cornerstone/object";
3
+ import * as Strings from "@bessemer/cornerstone/string";
4
+ import * as ContentTypes from "@bessemer/cornerstone/net/content-type";
5
+ import * as MimeTypes from "@bessemer/cornerstone/mime-type";
6
+ var serializeRequest = (request) => {
7
+ const dto = { url: request.url };
8
+ if (Objects.isPresent(dto.method)) {
9
+ dto.method = request.method;
10
+ }
11
+ if (Objects.isPresent(request.mode)) {
12
+ dto.mode = request.mode;
13
+ }
14
+ if (Objects.isPresent(request.credentials)) {
15
+ dto.credentials = request.credentials;
16
+ }
17
+ if (Objects.isPresent(request.cache)) {
18
+ dto.cache = request.cache;
19
+ }
20
+ if (Objects.isPresent(request.redirect)) {
21
+ dto.redirect = request.redirect;
22
+ }
23
+ if (Objects.isPresent(request.referrer)) {
24
+ dto.referrer = request.referrer;
25
+ }
26
+ if (Objects.isPresent(request.integrity)) {
27
+ dto.integrity = request.integrity;
28
+ }
29
+ if (Objects.isPresent(request.headers)) {
30
+ const headers = {};
31
+ const headersObj = request.headers instanceof Headers ? request.headers : new Headers(request.headers);
32
+ headersObj.forEach((value, key) => {
33
+ headers[key] = value;
34
+ });
35
+ if (!Objects.isEmpty(headers)) {
36
+ dto.headers = headers;
37
+ }
38
+ }
39
+ if (Objects.isPresent(request.body)) {
40
+ if (Strings.isString(request.body)) {
41
+ dto.body = request.body;
42
+ } else {
43
+ const headersObj = request.headers instanceof Headers ? request.headers : new Headers(request.headers);
44
+ const contentType = headersObj.get("Content-Type");
45
+ if (Objects.isPresent(contentType) && ContentTypes.from(contentType).mimeType === MimeTypes.Json) {
46
+ try {
47
+ dto.body = JSON.stringify(request.body);
48
+ } catch {
49
+ dto.body = Object.prototype.toString.call(request.body);
50
+ }
51
+ } else {
52
+ dto.body = Object.prototype.toString.call(request.body);
53
+ }
54
+ }
55
+ }
56
+ return dto;
57
+ };
58
+ var serializeResponse = (response) => {
59
+ return { url: response.url };
60
+ };
61
+ export {
62
+ serializeRequest,
63
+ serializeResponse
64
+ };
65
+ //# sourceMappingURL=fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/net/fetch.ts"],"sourcesContent":["import { Dictionary } from '@bessemer/cornerstone/types'\nimport * as Objects from '@bessemer/cornerstone/object'\nimport * as Strings from '@bessemer/cornerstone/string'\nimport * as ContentTypes from '@bessemer/cornerstone/net/content-type'\nimport * as MimeTypes from '@bessemer/cornerstone/mime-type'\n\nexport type FetchRequest = NonNullable<Parameters<typeof fetch>[1]>\nexport type FetchResponse = Awaited<ReturnType<typeof fetch>>\nexport type FetchPayload = { url: string } & FetchRequest\nexport type FetchFunction = (url: string, request: FetchRequest | undefined) => Promise<FetchResponse>\n\nexport type FetchRequestDto = {\n url: string\n headers?: Dictionary<string>\n body?: string\n} & Pick<FetchRequest, 'method' | 'mode' | 'credentials' | 'cache' | 'redirect' | 'referrer' | 'integrity'>\n\nexport type FetchResponseDto = { url: string }\n\nexport const serializeRequest = (request: FetchPayload): FetchRequestDto => {\n const dto: FetchRequestDto = { url: request.url }\n\n if (Objects.isPresent(dto.method)) {\n dto.method = request.method\n }\n if (Objects.isPresent(request.mode)) {\n dto.mode = request.mode\n }\n if (Objects.isPresent(request.credentials)) {\n dto.credentials = request.credentials\n }\n if (Objects.isPresent(request.cache)) {\n dto.cache = request.cache\n }\n if (Objects.isPresent(request.redirect)) {\n dto.redirect = request.redirect\n }\n if (Objects.isPresent(request.referrer)) {\n dto.referrer = request.referrer\n }\n if (Objects.isPresent(request.integrity)) {\n dto.integrity = request.integrity\n }\n\n if (Objects.isPresent(request.headers)) {\n const headers: Dictionary<string> = {}\n const headersObj = request.headers instanceof Headers ? request.headers : new Headers(request.headers)\n headersObj.forEach((value, key) => {\n headers[key] = value\n })\n\n if (!Objects.isEmpty(headers)) {\n dto.headers = headers\n }\n }\n\n if (Objects.isPresent(request.body)) {\n if (Strings.isString(request.body)) {\n dto.body = request.body\n } else {\n const headersObj = request.headers instanceof Headers ? request.headers : new Headers(request.headers)\n const contentType = headersObj.get('Content-Type')\n\n if (Objects.isPresent(contentType) && ContentTypes.from(contentType).mimeType === MimeTypes.Json) {\n try {\n dto.body = JSON.stringify(request.body)\n } catch {\n dto.body = Object.prototype.toString.call(request.body)\n }\n } else {\n // FormData, Blob, ArrayBuffer, etc. are not serializable to JSON\n dto.body = Object.prototype.toString.call(request.body)\n }\n }\n }\n\n return dto\n}\n\nexport const serializeResponse = (response: FetchResponse): FetchResponseDto => {\n return { url: response.url }\n}\n"],"mappings":";AACA,YAAY,aAAa;AACzB,YAAY,aAAa;AACzB,YAAY,kBAAkB;AAC9B,YAAY,eAAe;AAepB,IAAM,mBAAmB,CAAC,YAA2C;AAC1E,QAAM,MAAuB,EAAE,KAAK,QAAQ,IAAI;AAEhD,MAAY,kBAAU,IAAI,MAAM,GAAG;AACjC,QAAI,SAAS,QAAQ;AAAA,EACvB;AACA,MAAY,kBAAU,QAAQ,IAAI,GAAG;AACnC,QAAI,OAAO,QAAQ;AAAA,EACrB;AACA,MAAY,kBAAU,QAAQ,WAAW,GAAG;AAC1C,QAAI,cAAc,QAAQ;AAAA,EAC5B;AACA,MAAY,kBAAU,QAAQ,KAAK,GAAG;AACpC,QAAI,QAAQ,QAAQ;AAAA,EACtB;AACA,MAAY,kBAAU,QAAQ,QAAQ,GAAG;AACvC,QAAI,WAAW,QAAQ;AAAA,EACzB;AACA,MAAY,kBAAU,QAAQ,QAAQ,GAAG;AACvC,QAAI,WAAW,QAAQ;AAAA,EACzB;AACA,MAAY,kBAAU,QAAQ,SAAS,GAAG;AACxC,QAAI,YAAY,QAAQ;AAAA,EAC1B;AAEA,MAAY,kBAAU,QAAQ,OAAO,GAAG;AACtC,UAAM,UAA8B,CAAC;AACrC,UAAM,aAAa,QAAQ,mBAAmB,UAAU,QAAQ,UAAU,IAAI,QAAQ,QAAQ,OAAO;AACrG,eAAW,QAAQ,CAAC,OAAO,QAAQ;AACjC,cAAQ,GAAG,IAAI;AAAA,IACjB,CAAC;AAED,QAAI,CAAS,gBAAQ,OAAO,GAAG;AAC7B,UAAI,UAAU;AAAA,IAChB;AAAA,EACF;AAEA,MAAY,kBAAU,QAAQ,IAAI,GAAG;AACnC,QAAY,iBAAS,QAAQ,IAAI,GAAG;AAClC,UAAI,OAAO,QAAQ;AAAA,IACrB,OAAO;AACL,YAAM,aAAa,QAAQ,mBAAmB,UAAU,QAAQ,UAAU,IAAI,QAAQ,QAAQ,OAAO;AACrG,YAAM,cAAc,WAAW,IAAI,cAAc;AAEjD,UAAY,kBAAU,WAAW,KAAkB,kBAAK,WAAW,EAAE,aAAuB,gBAAM;AAChG,YAAI;AACF,cAAI,OAAO,KAAK,UAAU,QAAQ,IAAI;AAAA,QACxC,QAAQ;AACN,cAAI,OAAO,OAAO,UAAU,SAAS,KAAK,QAAQ,IAAI;AAAA,QACxD;AAAA,MACF,OAAO;AAEL,YAAI,OAAO,OAAO,UAAU,SAAS,KAAK,QAAQ,IAAI;AAAA,MACxD;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEO,IAAM,oBAAoB,CAAC,aAA8C;AAC9E,SAAO,EAAE,KAAK,SAAS,IAAI;AAC7B;","names":[]}
@@ -0,0 +1,18 @@
1
+ import { Result } from '@bessemer/cornerstone/result';
2
+ import { ErrorEvent } from '@bessemer/cornerstone/error/error-event';
3
+ import { ValueOf } from 'type-fest';
4
+ export declare const HttpMethod: {
5
+ readonly Get: "get";
6
+ readonly Post: "post";
7
+ readonly Put: "put";
8
+ readonly Patch: "patch";
9
+ readonly Delete: "delete";
10
+ readonly Head: "head";
11
+ readonly Options: "options";
12
+ readonly Trace: "trace";
13
+ readonly Connect: "connect";
14
+ };
15
+ export type HttpMethod = ValueOf<typeof HttpMethod>;
16
+ export declare const parseString: (value: string) => Result<HttpMethod, ErrorEvent>;
17
+ export declare const from: (value: string) => HttpMethod;
18
+ //# sourceMappingURL=http-method.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-method.d.ts","sourceRoot":"","sources":["../../src/net/http-method.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAW,MAAM,8BAA8B,CAAA;AACvE,OAAO,EAAE,UAAU,EAA8B,MAAM,yCAAyC,CAAA;AAEhG,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,eAAO,MAAM,UAAU;;;;;;;;;;CAUb,CAAA;AACV,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,UAAU,CAAC,CAAA;AAEnD,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,KAAG,MAAM,CAAC,UAAU,EAAE,UAAU,CAcxE,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,OAAO,MAAM,KAAG,UAEpC,CAAA"}
@@ -0,0 +1,37 @@
1
+ // src/net/http-method.ts
2
+ import { failure, success } from "@bessemer/cornerstone/result";
3
+ import { invalidValue, unpackResult } from "@bessemer/cornerstone/error/error-event";
4
+ import { Namespace } from "@bessemer/cornerstone/net/domain-name";
5
+ var HttpMethod = {
6
+ Get: "get",
7
+ Post: "post",
8
+ Put: "put",
9
+ Patch: "patch",
10
+ Delete: "delete",
11
+ Head: "head",
12
+ Options: "options",
13
+ Trace: "trace",
14
+ Connect: "connect"
15
+ };
16
+ var parseString = (value) => {
17
+ const normalizedValue = value.toLowerCase();
18
+ const validMethods = Object.values(HttpMethod);
19
+ if (!validMethods.includes(normalizedValue)) {
20
+ return failure(
21
+ invalidValue(value, {
22
+ namespace: Namespace,
23
+ message: `[${Namespace}]: Invalid HttpMethod in string: [${value}]. Valid methods are: ${validMethods.join(", ")}`
24
+ })
25
+ );
26
+ }
27
+ return success(normalizedValue);
28
+ };
29
+ var from = (value) => {
30
+ return unpackResult(parseString(value));
31
+ };
32
+ export {
33
+ HttpMethod,
34
+ from,
35
+ parseString
36
+ };
37
+ //# sourceMappingURL=http-method.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/net/http-method.ts"],"sourcesContent":["import { failure, Result, success } from '@bessemer/cornerstone/result'\nimport { ErrorEvent, invalidValue, unpackResult } from '@bessemer/cornerstone/error/error-event'\nimport { Namespace } from '@bessemer/cornerstone/net/domain-name'\nimport { ValueOf } from 'type-fest'\n\nexport const HttpMethod = {\n Get: 'get',\n Post: 'post',\n Put: 'put',\n Patch: 'patch',\n Delete: 'delete',\n Head: 'head',\n Options: 'options',\n Trace: 'trace',\n Connect: 'connect',\n} as const\nexport type HttpMethod = ValueOf<typeof HttpMethod>\n\nexport const parseString = (value: string): Result<HttpMethod, ErrorEvent> => {\n const normalizedValue = value.toLowerCase()\n const validMethods = Object.values(HttpMethod)\n\n if (!validMethods.includes(normalizedValue as HttpMethod)) {\n return failure(\n invalidValue(value, {\n namespace: Namespace,\n message: `[${Namespace}]: Invalid HttpMethod in string: [${value}]. Valid methods are: ${validMethods.join(', ')}`,\n })\n )\n }\n\n return success(normalizedValue as HttpMethod)\n}\n\nexport const from = (value: string): HttpMethod => {\n return unpackResult(parseString(value))\n}\n"],"mappings":";AAAA,SAAS,SAAiB,eAAe;AACzC,SAAqB,cAAc,oBAAoB;AACvD,SAAS,iBAAiB;AAGnB,IAAM,aAAa;AAAA,EACxB,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AACX;AAGO,IAAM,cAAc,CAAC,UAAkD;AAC5E,QAAM,kBAAkB,MAAM,YAAY;AAC1C,QAAM,eAAe,OAAO,OAAO,UAAU;AAE7C,MAAI,CAAC,aAAa,SAAS,eAA6B,GAAG;AACzD,WAAO;AAAA,MACL,aAAa,OAAO;AAAA,QAClB,WAAW;AAAA,QACX,SAAS,IAAI,SAAS,qCAAqC,KAAK,yBAAyB,aAAa,KAAK,IAAI,CAAC;AAAA,MAClH,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO,QAAQ,eAA6B;AAC9C;AAEO,IAAM,OAAO,CAAC,UAA8B;AACjD,SAAO,aAAa,YAAY,KAAK,CAAC;AACxC;","names":[]}
@@ -0,0 +1,12 @@
1
+ import { HttpMethod } from '@bessemer/cornerstone/net/http-method';
2
+ import { Url } from '@bessemer/cornerstone/net/url';
3
+ import { Dictionary } from '@bessemer/cornerstone/types';
4
+ export type HttpRequest<TBody = unknown, TPathParameters = Dictionary<unknown>, TQueryParameters = Dictionary<unknown>, THeaders = Dictionary<unknown>> = {
5
+ method: HttpMethod;
6
+ url: Url;
7
+ body: TBody;
8
+ pathParameters: TPathParameters;
9
+ queryParameters: TQueryParameters;
10
+ headers: THeaders;
11
+ };
12
+ //# sourceMappingURL=http-request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-request.d.ts","sourceRoot":"","sources":["../../src/net/http-request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAA;AAClE,OAAO,EAAE,GAAG,EAAE,MAAM,+BAA+B,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAExD,MAAM,MAAM,WAAW,CACrB,KAAK,GAAG,OAAO,EACf,eAAe,GAAG,UAAU,CAAC,OAAO,CAAC,EACrC,gBAAgB,GAAG,UAAU,CAAC,OAAO,CAAC,EACtC,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,IAC5B;IACF,MAAM,EAAE,UAAU,CAAA;IAClB,GAAG,EAAE,GAAG,CAAA;IACR,IAAI,EAAE,KAAK,CAAA;IACX,cAAc,EAAE,eAAe,CAAA;IAC/B,eAAe,EAAE,gBAAgB,CAAA;IACjC,OAAO,EAAE,QAAQ,CAAA;CAClB,CAAA"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=http-request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,9 +1,9 @@
1
1
  import Zod from 'zod';
2
- import { Result } from '@bessemer/cornerstone/result';
3
2
  import { ErrorEvent } from '@bessemer/cornerstone/error/error-event';
4
3
  import { DomainName } from '@bessemer/cornerstone/net/domain-name';
5
4
  import { IpV4Address } from '@bessemer/cornerstone/net/ipv4-address';
6
5
  import { IpV6Address } from '@bessemer/cornerstone/net/ipv6-address';
6
+ import { Result } from '@bessemer/cornerstone/result';
7
7
  export declare const Namespace: import("@bessemer/cornerstone/resource-key").ResourceNamespace<"uri-host-name">;
8
8
  export type UriHostName = DomainName | IpV4Address | `[${IpV6Address}]`;
9
9
  export declare const parseString: (value: string) => Result<UriHostName, ErrorEvent>;
@@ -1 +1 @@
1
- {"version":3,"file":"uri-host-name.d.ts","sourceRoot":"","sources":["../../src/net/uri-host-name.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAW,MAAM,EAAW,MAAM,8BAA8B,CAAA;AAEvE,OAAO,EAAE,UAAU,EAA8B,MAAM,yCAAyC,CAAA;AAEhG,OAAO,EAAE,UAAU,EAAkC,MAAM,uCAAuC,CAAA;AAClG,OAAO,EAAE,WAAW,EAAmC,MAAM,wCAAwC,CAAA;AACrG,OAAO,EAAE,WAAW,EAAmC,MAAM,wCAAwC,CAAA;AAGrG,eAAO,MAAM,SAAS,iFAAmC,CAAA;AACzD,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,IAAI,WAAW,GAAG,CAAA;AAEvE,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,KAAG,MAAM,CAAC,WAAW,EAAE,UAAU,CAuBzE,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,OAAO,MAAM,KAAG,WAEpC,CAAA;AAED,eAAO,MAAM,MAAM,mEAAiD,CAAA"}
1
+ {"version":3,"file":"uri-host-name.d.ts","sourceRoot":"","sources":["../../src/net/uri-host-name.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,OAAO,EAAE,UAAU,EAA8B,MAAM,yCAAyC,CAAA;AAEhG,OAAO,EAAE,UAAU,EAAkC,MAAM,uCAAuC,CAAA;AAClG,OAAO,EAAE,WAAW,EAAmC,MAAM,wCAAwC,CAAA;AACrG,OAAO,EAAE,WAAW,EAAmC,MAAM,wCAAwC,CAAA;AAGrG,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAErD,eAAO,MAAM,SAAS,iFAAmC,CAAA;AACzD,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,IAAI,WAAW,GAAG,CAAA;AAEvE,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,KAAG,MAAM,CAAC,WAAW,EAAE,UAAU,CAuBzE,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,OAAO,MAAM,KAAG,WAEpC,CAAA;AAED,eAAO,MAAM,MAAM,mEAAiD,CAAA"}
@@ -1,6 +1,5 @@
1
1
  // src/net/uri-host-name.ts
2
2
  import Zod from "zod";
3
- import { failure, success } from "@bessemer/cornerstone/result";
4
3
  import { createNamespace } from "@bessemer/cornerstone/resource-key";
5
4
  import { invalidValue, unpackResult } from "@bessemer/cornerstone/error/error-event";
6
5
  import { structuredTransform } from "@bessemer/cornerstone/zod-util";
@@ -8,23 +7,24 @@ import { parseString as parseDomainName } from "@bessemer/cornerstone/net/domain
8
7
  import { parseString as parseIpV4Address } from "@bessemer/cornerstone/net/ipv4-address";
9
8
  import { parseString as parseIpV6Address } from "@bessemer/cornerstone/net/ipv6-address";
10
9
  import * as Strings from "@bessemer/cornerstone/string";
10
+ import * as Results from "@bessemer/cornerstone/result";
11
11
  var Namespace = createNamespace("uri-host-name");
12
12
  var parseString = (value) => {
13
13
  if (value.startsWith("[") && value.endsWith("]")) {
14
14
  const ipV6Address = parseIpV6Address(Strings.removeEnd(Strings.removeStart(value, "["), "]"));
15
- if (ipV6Address.isSuccess) {
16
- return success(`[${ipV6Address.value}]`);
15
+ if (Results.isSuccess(ipV6Address)) {
16
+ return Results.success(`[${ipV6Address}]`);
17
17
  }
18
18
  }
19
19
  const domainName = parseDomainName(value);
20
- if (domainName.isSuccess) {
20
+ if (Results.isSuccess(domainName)) {
21
21
  return domainName;
22
22
  }
23
23
  const ipV4Address = parseIpV4Address(value);
24
- if (ipV4Address.isSuccess) {
24
+ if (Results.isSuccess(ipV4Address)) {
25
25
  return ipV4Address;
26
26
  }
27
- return failure(
27
+ return Results.failure(
28
28
  invalidValue(value, {
29
29
  namespace: Namespace,
30
30
  message: `[${Namespace}]: Invalid characters for UriHostName in string: [${value}]`
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/net/uri-host-name.ts"],"sourcesContent":["import Zod from 'zod'\nimport { failure, Result, success } from '@bessemer/cornerstone/result'\nimport { createNamespace } from '@bessemer/cornerstone/resource-key'\nimport { ErrorEvent, invalidValue, unpackResult } from '@bessemer/cornerstone/error/error-event'\nimport { structuredTransform } from '@bessemer/cornerstone/zod-util'\nimport { DomainName, parseString as parseDomainName } from '@bessemer/cornerstone/net/domain-name'\nimport { IpV4Address, parseString as parseIpV4Address } from '@bessemer/cornerstone/net/ipv4-address'\nimport { IpV6Address, parseString as parseIpV6Address } from '@bessemer/cornerstone/net/ipv6-address'\nimport * as Strings from '@bessemer/cornerstone/string'\n\nexport const Namespace = createNamespace('uri-host-name')\nexport type UriHostName = DomainName | IpV4Address | `[${IpV6Address}]`\n\nexport const parseString = (value: string): Result<UriHostName, ErrorEvent> => {\n if (value.startsWith('[') && value.endsWith(']')) {\n const ipV6Address = parseIpV6Address(Strings.removeEnd(Strings.removeStart(value, '['), ']'))\n if (ipV6Address.isSuccess) {\n return success(`[${ipV6Address.value}]` as UriHostName)\n }\n }\n\n const domainName = parseDomainName(value)\n if (domainName.isSuccess) {\n return domainName\n }\n const ipV4Address = parseIpV4Address(value)\n if (ipV4Address.isSuccess) {\n return ipV4Address\n }\n\n return failure(\n invalidValue(value, {\n namespace: Namespace,\n message: `[${Namespace}]: Invalid characters for UriHostName in string: [${value}]`,\n })\n )\n}\n\nexport const from = (value: string): UriHostName => {\n return unpackResult(parseString(value))\n}\n\nexport const Schema = structuredTransform(Zod.string(), parseString)\n"],"mappings":";AAAA,OAAO,SAAS;AAChB,SAAS,SAAiB,eAAe;AACzC,SAAS,uBAAuB;AAChC,SAAqB,cAAc,oBAAoB;AACvD,SAAS,2BAA2B;AACpC,SAAqB,eAAe,uBAAuB;AAC3D,SAAsB,eAAe,wBAAwB;AAC7D,SAAsB,eAAe,wBAAwB;AAC7D,YAAY,aAAa;AAElB,IAAM,YAAY,gBAAgB,eAAe;AAGjD,IAAM,cAAc,CAAC,UAAmD;AAC7E,MAAI,MAAM,WAAW,GAAG,KAAK,MAAM,SAAS,GAAG,GAAG;AAChD,UAAM,cAAc,iBAAyB,kBAAkB,oBAAY,OAAO,GAAG,GAAG,GAAG,CAAC;AAC5F,QAAI,YAAY,WAAW;AACzB,aAAO,QAAQ,IAAI,YAAY,KAAK,GAAkB;AAAA,IACxD;AAAA,EACF;AAEA,QAAM,aAAa,gBAAgB,KAAK;AACxC,MAAI,WAAW,WAAW;AACxB,WAAO;AAAA,EACT;AACA,QAAM,cAAc,iBAAiB,KAAK;AAC1C,MAAI,YAAY,WAAW;AACzB,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,aAAa,OAAO;AAAA,MAClB,WAAW;AAAA,MACX,SAAS,IAAI,SAAS,qDAAqD,KAAK;AAAA,IAClF,CAAC;AAAA,EACH;AACF;AAEO,IAAM,OAAO,CAAC,UAA+B;AAClD,SAAO,aAAa,YAAY,KAAK,CAAC;AACxC;AAEO,IAAM,SAAS,oBAAoB,IAAI,OAAO,GAAG,WAAW;","names":[]}
1
+ {"version":3,"sources":["../../src/net/uri-host-name.ts"],"sourcesContent":["import Zod from 'zod'\nimport { createNamespace } from '@bessemer/cornerstone/resource-key'\nimport { ErrorEvent, invalidValue, unpackResult } from '@bessemer/cornerstone/error/error-event'\nimport { structuredTransform } from '@bessemer/cornerstone/zod-util'\nimport { DomainName, parseString as parseDomainName } from '@bessemer/cornerstone/net/domain-name'\nimport { IpV4Address, parseString as parseIpV4Address } from '@bessemer/cornerstone/net/ipv4-address'\nimport { IpV6Address, parseString as parseIpV6Address } from '@bessemer/cornerstone/net/ipv6-address'\nimport * as Strings from '@bessemer/cornerstone/string'\nimport * as Results from '@bessemer/cornerstone/result'\nimport { Result } from '@bessemer/cornerstone/result'\n\nexport const Namespace = createNamespace('uri-host-name')\nexport type UriHostName = DomainName | IpV4Address | `[${IpV6Address}]`\n\nexport const parseString = (value: string): Result<UriHostName, ErrorEvent> => {\n if (value.startsWith('[') && value.endsWith(']')) {\n const ipV6Address = parseIpV6Address(Strings.removeEnd(Strings.removeStart(value, '['), ']'))\n if (Results.isSuccess(ipV6Address)) {\n return Results.success(`[${ipV6Address}]` as UriHostName)\n }\n }\n\n const domainName = parseDomainName(value)\n if (Results.isSuccess(domainName)) {\n return domainName\n }\n const ipV4Address = parseIpV4Address(value)\n if (Results.isSuccess(ipV4Address)) {\n return ipV4Address\n }\n\n return Results.failure(\n invalidValue(value, {\n namespace: Namespace,\n message: `[${Namespace}]: Invalid characters for UriHostName in string: [${value}]`,\n })\n )\n}\n\nexport const from = (value: string): UriHostName => {\n return unpackResult(parseString(value))\n}\n\nexport const Schema = structuredTransform(Zod.string(), parseString)\n"],"mappings":";AAAA,OAAO,SAAS;AAChB,SAAS,uBAAuB;AAChC,SAAqB,cAAc,oBAAoB;AACvD,SAAS,2BAA2B;AACpC,SAAqB,eAAe,uBAAuB;AAC3D,SAAsB,eAAe,wBAAwB;AAC7D,SAAsB,eAAe,wBAAwB;AAC7D,YAAY,aAAa;AACzB,YAAY,aAAa;AAGlB,IAAM,YAAY,gBAAgB,eAAe;AAGjD,IAAM,cAAc,CAAC,UAAmD;AAC7E,MAAI,MAAM,WAAW,GAAG,KAAK,MAAM,SAAS,GAAG,GAAG;AAChD,UAAM,cAAc,iBAAyB,kBAAkB,oBAAY,OAAO,GAAG,GAAG,GAAG,CAAC;AAC5F,QAAY,kBAAU,WAAW,GAAG;AAClC,aAAe,gBAAQ,IAAI,WAAW,GAAkB;AAAA,IAC1D;AAAA,EACF;AAEA,QAAM,aAAa,gBAAgB,KAAK;AACxC,MAAY,kBAAU,UAAU,GAAG;AACjC,WAAO;AAAA,EACT;AACA,QAAM,cAAc,iBAAiB,KAAK;AAC1C,MAAY,kBAAU,WAAW,GAAG;AAClC,WAAO;AAAA,EACT;AAEA,SAAe;AAAA,IACb,aAAa,OAAO;AAAA,MAClB,WAAW;AAAA,MACX,SAAS,IAAI,SAAS,qDAAqD,KAAK;AAAA,IAClF,CAAC;AAAA,EACH;AACF;AAEO,IAAM,OAAO,CAAC,UAA+B;AAClD,SAAO,aAAa,YAAY,KAAK,CAAC;AACxC;AAEO,IAAM,SAAS,oBAAoB,IAAI,OAAO,GAAG,WAAW;","names":[]}
package/dist/net/uri.d.ts CHANGED
@@ -84,7 +84,12 @@ export type UriLike = Uri | UriLiteral | UriBuilder;
84
84
  *
85
85
  * @category parsing
86
86
  */
87
- export declare const parseString: (value: string) => Result<Uri, ErrorEvent>;
87
+ export declare const parseString: (value: string, mode?: UriParseMode) => Result<Uri, ErrorEvent>;
88
+ export declare const UriParseMode: {
89
+ readonly Strict: "strict";
90
+ readonly Permissive: "permissive";
91
+ };
92
+ export type UriParseMode = ValueOf<typeof UriParseMode>;
88
93
  /**
89
94
  * Converts various URI-like inputs into a Uri object. Handles Uri instances,
90
95
  * string literals, and builder objects, returning them as-is when already a Uri
@@ -145,6 +150,7 @@ export declare function toLiteral(likeValue: UriLike | null): UriLiteral | null;
145
150
  export declare function toLiteral(likeValue: UriLike | undefined): UriLiteral | undefined;
146
151
  export declare function toLiteral(likeValue: UriLike | null | undefined): UriLiteral | null | undefined;
147
152
  export declare const SchemaLiteral: Zod.ZodPipe<Zod.ZodString, Zod.ZodTransform<UriLiteral, string>>;
153
+ export declare const empty: () => Uri;
148
154
  /**
149
155
  * Tests if the provided value is a Uri.
150
156
  *
@@ -166,7 +172,7 @@ export declare const SchemaLiteral: Zod.ZodPipe<Zod.ZodString, Zod.ZodTransform<
166
172
  */
167
173
  export declare const isUri: (value: unknown) => value is Uri;
168
174
  /**
169
- * Merges an existing URI with partial changes to create a new URI instance.
175
+ * Updates an existing URI with partial changes to create a new URI instance.
170
176
  * Allows selective updates without replacing the entire URI.
171
177
  *
172
178
  * **Example**
@@ -183,7 +189,7 @@ export declare const isUri: (value: unknown) => value is Uri;
183
189
  * })
184
190
  *
185
191
  * // Change just the host and add query parameter
186
- * const updatedUri = Uris.merge(baseUri, {
192
+ * const updatedUri = Uris.update(baseUri, {
187
193
  * host: { value: 'api.production.com' }, // Port preserved from original
188
194
  * location: {
189
195
  * parameters: { version: '2.0' } // Merges with existing parameters
@@ -197,7 +203,8 @@ export declare const isUri: (value: unknown) => value is Uri;
197
203
  *
198
204
  * @category transformation
199
205
  */
200
- export declare const merge: (element: UriLike, builder: UriBuilder) => Uri;
206
+ export declare const update: (element: UriLike, builder: UriBuilder) => Uri;
207
+ export declare const merge: (...uris: Array<UriLike>) => Uri;
201
208
  export declare const UriComponentType: {
202
209
  readonly Scheme: "Scheme";
203
210
  readonly Authentication: "Authentication";
@@ -243,6 +250,7 @@ export type UriComponentType = ValueOf<typeof UriComponentType>;
243
250
  * @category serialization
244
251
  */
245
252
  export declare const format: (uriLike: UriLike, excludedUriComponents?: Array<UriComponentType>) => UriLiteral;
253
+ export declare const isComplete: (uri: Uri) => boolean;
246
254
  export declare const encode: (uriComponent: UriComponent) => string;
247
255
  export declare const decode: (uriComponent: UriComponent) => string;
248
256
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"uri.d.ts","sourceRoot":"","sources":["../../src/net/uri.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"uri.d.ts","sourceRoot":"","sources":["../../src/net/uri.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAKrE,OAAO,KAAK,YAAY,MAAM,oCAAoC,CAAA;AAElE,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAA;AAEpE,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAA;AAErE,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;AACvD,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,WAAW,CAAA;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB,CAAA;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AAED,eAAO,MAAM,SAAS,uCAAsC,CAAA;AAC5D,eAAO,MAAM,YAAY,uCAAsC,CAAA;AAC/D,eAAO,MAAM,OAAO,EAAE,SAAS,CAAC,GAAG,CAA4B,CAAA;AAE/D,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,SAAS,CAAC,CAAA;AAE9D,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,OAAO,SAAS,GAAG,OAAO,YAAY,CAAA;IAC7C,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;AAED,MAAM,WAAW,GAAI,SAAQ,YAAY;IACvC,IAAI,EAAE,UAAU,CAAA;CACjB;AAED,KAAK,wBAAwB,GACzB;IACE,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB,GACD,MAAM,CAAA;AAEV,KAAK,cAAc,GACf;IACE,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB,GACD,MAAM,CAAA;AAEV,KAAK,kBAAkB,GACnB;IACE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB,GACD,MAAM,CAAA;AAEV,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IAClC,cAAc,CAAC,EAAE,wBAAwB,GAAG,IAAI,GAAG,SAAS,CAAA;IAC5D,IAAI,CAAC,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,EAAE,kBAAkB,GAAG,IAAI,GAAG,SAAS,CAAA;CACjD,CAAA;AAED,MAAM,MAAM,OAAO,GAAG,GAAG,GAAG,UAAU,GAAG,UAAU,CAAA;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,EAAE,OAAM,YAAkC,KAAG,MAAM,CAAC,GAAG,EAAE,UAAU,CA6C3G,CAAA;AAED,eAAO,MAAM,YAAY;;;CAKf,CAAA;AACV,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,YAAY,CAAC,CAAA;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,GAAG,CAAA;AAClD,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAA;AAChE,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,GAAG,GAAG,SAAS,CAAA;AAC1E,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,GAAG,GAAG,IAAI,GAAG,SAAS,CAAA;AAexF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,OAAO,GAAG,UAAU,CAAA;AACzD,wBAAgB,SAAS,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,GAAG,UAAU,GAAG,IAAI,CAAA;AACvE,wBAAgB,SAAS,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAA;AACjF,wBAAgB,SAAS,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,GAAG,IAAI,GAAG,SAAS,CAAA;AAU/F,eAAO,MAAM,aAAa,kEAAyG,CAAA;AAInI,eAAO,MAAM,KAAK,QAAO,GAaxB,CAAA;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,KAAK,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,GAO/C,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,MAAM,GAAI,SAAS,OAAO,EAAE,SAAS,UAAU,KAAG,GAsB9D,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAG,GAyB/C,CAAA;AA8VD,eAAO,MAAM,gBAAgB;;;;;;;;CAQnB,CAAA;AAEV,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,eAAO,MAAM,MAAM,GAAI,SAAS,OAAO,EAAE,wBAAuB,KAAK,CAAC,gBAAgB,CAAM,KAAG,UAE9F,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,KAAK,GAAG,KAAG,OAErC,CAAA;AAwDD,eAAO,MAAM,MAAM,GAAI,cAAc,YAAY,WAEhD,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,cAAc,YAAY,WAEhD,CAAA"}
package/dist/net/uri.js CHANGED
@@ -4,7 +4,6 @@ import * as Objects from "@bessemer/cornerstone/object";
4
4
  import * as Arrays from "@bessemer/cornerstone/array";
5
5
  import * as ResourceKeys from "@bessemer/cornerstone/resource-key";
6
6
  import * as Results from "@bessemer/cornerstone/result";
7
- import { success as success2 } from "@bessemer/cornerstone/result";
8
7
  import * as ErrorEvents from "@bessemer/cornerstone/error/error-event";
9
8
  import { structuredTransform } from "@bessemer/cornerstone/zod-util";
10
9
  import Zod from "zod";
@@ -14,17 +13,12 @@ import * as UriHostNames from "@bessemer/cornerstone/net/uri-host-name";
14
13
  var Namespace = ResourceKeys.createNamespace("uri");
15
14
  var UrlNamespace = ResourceKeys.createNamespace("url");
16
15
  var EqualBy = Equalitors.deepNatural();
17
- var parseString3 = (value) => {
16
+ var parseString3 = (value, mode = UriParseMode.Strict) => {
18
17
  if (Strings.isBlank(value)) {
19
- return Results.failure(
20
- ErrorEvents.required({
21
- namespace: Namespace,
22
- message: `[${Namespace}]: Unable to parse Uri from empty string.`
23
- })
24
- );
18
+ return Results.success(empty());
25
19
  }
26
20
  const schemeResult = parseSchemePart(value);
27
- if (!schemeResult.isSuccess) {
21
+ if (Results.isFailure(schemeResult)) {
28
22
  return Results.failure(
29
23
  ErrorEvents.invalidValue(value, {
30
24
  namespace: Namespace,
@@ -33,9 +27,9 @@ var parseString3 = (value) => {
33
27
  })
34
28
  );
35
29
  }
36
- const [scheme, rest1] = schemeResult.value;
37
- const authorityPartResult = parseAuthorityPart(rest1);
38
- if (!authorityPartResult.isSuccess) {
30
+ const [scheme, rest1] = schemeResult;
31
+ const authorityPartResult = parseAuthorityPart(rest1, mode);
32
+ if (Results.isFailure(authorityPartResult)) {
39
33
  return Results.failure(
40
34
  ErrorEvents.invalidValue(value, {
41
35
  namespace: Namespace,
@@ -44,7 +38,7 @@ var parseString3 = (value) => {
44
38
  })
45
39
  );
46
40
  }
47
- const [authority, rest2] = authorityPartResult.value;
41
+ const [authority, rest2] = authorityPartResult;
48
42
  const location = parseLocation(rest2);
49
43
  const structure = {
50
44
  _type: Namespace,
@@ -58,6 +52,12 @@ var parseString3 = (value) => {
58
52
  href: formatInternal(structure)
59
53
  });
60
54
  };
55
+ var UriParseMode = {
56
+ // Normal href-style url parsing
57
+ Strict: "strict",
58
+ // Will parse 'www.google.com' as a hostname rather than a path, but loses support for relative urls
59
+ Permissive: "permissive"
60
+ };
61
61
  function from2(value) {
62
62
  if (Objects.isNil(value)) {
63
63
  return value;
@@ -77,7 +77,21 @@ function toLiteral(likeValue) {
77
77
  const value = from2(likeValue);
78
78
  return format(value);
79
79
  }
80
- var SchemaLiteral = structuredTransform(Zod.string(), (it) => parseString3(it).map((it2) => toLiteral(it2)));
80
+ var SchemaLiteral = structuredTransform(Zod.string(), (it) => Results.map(parseString3(it), (it2) => toLiteral(it2)));
81
+ var empty = () => {
82
+ return {
83
+ _type: Namespace,
84
+ href: "",
85
+ scheme: null,
86
+ authentication: null,
87
+ host: null,
88
+ location: {
89
+ path: null,
90
+ query: null,
91
+ fragment: null
92
+ }
93
+ };
94
+ };
81
95
  var isUri = (value) => {
82
96
  if (!Objects.isObject(value)) {
83
97
  return false;
@@ -85,13 +99,17 @@ var isUri = (value) => {
85
99
  const uriValue = value;
86
100
  return uriValue._type === Namespace || uriValue._type === UrlNamespace;
87
101
  };
88
- var merge = (element, builder) => {
102
+ var update = (element, builder) => {
89
103
  const uri = from2(element);
90
104
  let location;
91
105
  if (Strings.isString(builder.location) || Objects.isNull(builder.location)) {
92
106
  location = builder.location;
93
107
  } else {
94
- location = { ...uri.location, ...builder.location ?? {} };
108
+ location = {
109
+ path: Objects.isUndefined(builder.location?.path) ? uri.location.path : builder.location?.path,
110
+ query: Objects.isUndefined(builder.location?.query) ? uri.location.query : builder.location?.query,
111
+ fragment: Objects.isUndefined(builder.location?.fragment) ? uri.location.fragment : builder.location?.fragment
112
+ };
95
113
  }
96
114
  const uriBuilder = {
97
115
  scheme: Objects.isUndefined(builder.scheme) ? uri.scheme : builder.scheme,
@@ -101,6 +119,29 @@ var merge = (element, builder) => {
101
119
  };
102
120
  return from2(uriBuilder);
103
121
  };
122
+ var merge = (...uris) => {
123
+ if (uris.length === 0) {
124
+ return empty();
125
+ }
126
+ if (uris.length === 1) {
127
+ return from2(uris[0]);
128
+ }
129
+ return uris.reduce((aggregate, next) => {
130
+ const nextUri = from2(next);
131
+ const builder = {
132
+ scheme: nextUri.scheme ?? void 0,
133
+ host: nextUri.host ?? void 0,
134
+ authentication: nextUri.authentication ?? void 0,
135
+ location: {
136
+ path: nextUri.location.path ?? void 0,
137
+ query: nextUri.location.query ?? void 0,
138
+ fragment: nextUri.location.fragment ?? void 0
139
+ }
140
+ };
141
+ const uri = update(aggregate, builder);
142
+ return uri;
143
+ }, from2(uris[0]));
144
+ };
104
145
  var parseSchemePart = (url) => {
105
146
  const schemeMatch = Strings.splitFirst(url, /(\/\/|:)/);
106
147
  if (Objects.isNil(schemeMatch.selection) || schemeMatch.separator === "//") {
@@ -110,10 +151,10 @@ var parseSchemePart = (url) => {
110
151
  return Results.success([null, ":" + schemeMatch.rest]);
111
152
  } else {
112
153
  const schemeResult = parseScheme(schemeMatch.selection);
113
- if (!schemeResult.isSuccess) {
154
+ if (Results.isFailure(schemeResult)) {
114
155
  return schemeResult;
115
156
  }
116
- return Results.success([schemeResult.value, schemeMatch.rest]);
157
+ return Results.success([schemeResult, schemeMatch.rest]);
117
158
  }
118
159
  };
119
160
  var parseScheme = (scheme) => {
@@ -128,22 +169,25 @@ var parseScheme = (scheme) => {
128
169
  }
129
170
  return Results.success(scheme);
130
171
  };
131
- var parseAuthorityPart = (initialUrl) => {
132
- if (!initialUrl.startsWith("//")) {
133
- return success2([{ host: null, authentication: null }, initialUrl]);
172
+ var parseAuthorityPart = (initialUrl, mode) => {
173
+ if (mode === UriParseMode.Strict && !initialUrl.startsWith("//")) {
174
+ return Results.success([{ host: null, authentication: null }, initialUrl]);
175
+ }
176
+ if (mode === UriParseMode.Permissive && initialUrl.startsWith("/")) {
177
+ return Results.success([{ host: null, authentication: null }, initialUrl]);
134
178
  }
135
179
  const url = Strings.removeStart(initialUrl, "//");
136
180
  const authenticationPartResult = parseAuthenticationPart(url);
137
- if (!authenticationPartResult.isSuccess) {
181
+ if (Results.isFailure(authenticationPartResult)) {
138
182
  return authenticationPartResult;
139
183
  }
140
- const [authentication, rest1] = authenticationPartResult.value;
184
+ const [authentication, rest1] = authenticationPartResult;
141
185
  const hostPartResult = parseHostPart(rest1);
142
- if (!hostPartResult.isSuccess) {
186
+ if (Results.isFailure(hostPartResult)) {
143
187
  return hostPartResult;
144
188
  }
145
- const [host, rest2] = hostPartResult.value;
146
- return success2([{ host, authentication }, rest2]);
189
+ const [host, rest2] = hostPartResult;
190
+ return Results.success([{ host, authentication }, rest2]);
147
191
  };
148
192
  var parseAuthenticationPart = (url) => {
149
193
  let targetPart = url;
@@ -160,10 +204,10 @@ var parseAuthenticationPart = (url) => {
160
204
  }
161
205
  const { rest } = Strings.splitFirst(url, "@");
162
206
  const authenticationParseResult = parseAuthentication(authentication);
163
- if (!authenticationParseResult.isSuccess) {
207
+ if (Results.isFailure(authenticationParseResult)) {
164
208
  return authenticationParseResult;
165
209
  }
166
- return Results.success([authenticationParseResult.value, rest]);
210
+ return Results.success([authenticationParseResult, rest]);
167
211
  };
168
212
  var parseAuthentication = (authentication) => {
169
213
  const { selection: principal, rest: authenticationRest } = Strings.splitFirst(authentication, ":");
@@ -231,17 +275,17 @@ var parseHostPart = (url) => {
231
275
  return Results.success([null, rest]);
232
276
  }
233
277
  const parseHostResult = parseHost(host);
234
- if (!parseHostResult.isSuccess) {
278
+ if (Results.isFailure(parseHostResult)) {
235
279
  return parseHostResult;
236
280
  }
237
- return Results.success([parseHostResult.value, rest]);
281
+ return Results.success([parseHostResult, rest]);
238
282
  };
239
283
  var parseHost = (host) => {
240
284
  if (host.startsWith("[")) {
241
285
  const ipMatch = Strings.splitFirst(Strings.removeStart(host, "["), "]");
242
286
  if (Objects.isPresent(ipMatch.selection)) {
243
287
  const ipV6Result = IpV6Addresses.parseString(ipMatch.selection);
244
- if (!ipV6Result.isSuccess) {
288
+ if (Results.isFailure(ipV6Result)) {
245
289
  return ipV6Result;
246
290
  }
247
291
  const portMatch = Strings.splitFirst(ipMatch.rest, ":");
@@ -258,7 +302,7 @@ var parseHost = (host) => {
258
302
  let hostMatch = Strings.splitFirst(host, ":");
259
303
  if (Objects.isNil(hostMatch.selection)) {
260
304
  const hostNameResult2 = UriHostNames.parseString(hostMatch.rest);
261
- if (!hostNameResult2.isSuccess) {
305
+ if (Results.isFailure(hostNameResult2)) {
262
306
  return Results.failure(
263
307
  ErrorEvents.invalidValue(host, {
264
308
  namespace: Namespace,
@@ -267,7 +311,7 @@ var parseHost = (host) => {
267
311
  })
268
312
  );
269
313
  }
270
- return Results.success({ value: hostNameResult2.value, port: null });
314
+ return Results.success({ value: hostNameResult2, port: null });
271
315
  }
272
316
  if (Strings.isEmpty(hostMatch.selection)) {
273
317
  return Results.failure(
@@ -281,7 +325,7 @@ var parseHost = (host) => {
281
325
  );
282
326
  }
283
327
  const hostNameResult = UriHostNames.parseString(hostName);
284
- if (!hostNameResult.isSuccess) {
328
+ if (Results.isFailure(hostNameResult)) {
285
329
  return Results.failure(
286
330
  ErrorEvents.invalidValue(host, {
287
331
  namespace: Namespace,
@@ -290,7 +334,7 @@ var parseHost = (host) => {
290
334
  })
291
335
  );
292
336
  }
293
- return Results.success({ value: hostNameResult.value, port: Number(hostMatch.rest) });
337
+ return Results.success({ value: hostNameResult, port: Number(hostMatch.rest) });
294
338
  };
295
339
  var parseLocation = (url) => {
296
340
  const location = { path: null, query: null, fragment: null };
@@ -380,6 +424,9 @@ var UriComponentType = {
380
424
  var format = (uriLike, excludedUriComponents = []) => {
381
425
  return formatInternal(from2(uriLike), excludedUriComponents);
382
426
  };
427
+ var isComplete = (uri) => {
428
+ return Objects.isPresent(uri.scheme) && Objects.isPresent(uri.host);
429
+ };
383
430
  var formatInternal = (uri, excludedUriComponents = []) => {
384
431
  let urlString = "";
385
432
  if (Objects.isPresent(uri.scheme) && !Arrays.contains(excludedUriComponents, UriComponentType.Scheme)) {
@@ -431,14 +478,18 @@ export {
431
478
  Namespace,
432
479
  SchemaLiteral,
433
480
  UriComponentType,
481
+ UriParseMode,
434
482
  UrlNamespace,
435
483
  decode,
484
+ empty,
436
485
  encode,
437
486
  format,
438
487
  from2 as from,
488
+ isComplete,
439
489
  isUri,
440
490
  merge,
441
491
  parseString3 as parseString,
442
- toLiteral
492
+ toLiteral,
493
+ update
443
494
  };
444
495
  //# sourceMappingURL=uri.js.map