@typed/navigation 0.17.0 → 0.18.1

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 (115) hide show
  1. package/.nvmrc +1 -0
  2. package/biome.json +39 -0
  3. package/dist/Blocking.d.ts +23 -0
  4. package/dist/Blocking.js +41 -0
  5. package/dist/Blocking.js.map +1 -0
  6. package/dist/Destination.d.ts +11 -0
  7. package/dist/Destination.js +10 -0
  8. package/dist/Destination.js.map +1 -0
  9. package/dist/Error.d.ts +33 -0
  10. package/dist/Error.js +22 -0
  11. package/dist/Error.js.map +1 -0
  12. package/dist/Event.d.ts +45 -0
  13. package/dist/Event.js +17 -0
  14. package/dist/Event.js.map +1 -0
  15. package/dist/Forms.d.ts +79 -0
  16. package/dist/Forms.js +111 -0
  17. package/dist/Forms.js.map +1 -0
  18. package/dist/Handler.d.ts +6 -0
  19. package/dist/Handler.js +2 -0
  20. package/dist/Handler.js.map +1 -0
  21. package/dist/{dts/Layer.d.ts → Layer.d.ts} +11 -8
  22. package/dist/{esm/Layer.js → Layer.js} +2 -2
  23. package/dist/Layer.js.map +1 -0
  24. package/dist/NavigateOptions.d.ts +7 -0
  25. package/dist/NavigateOptions.js +7 -0
  26. package/dist/NavigateOptions.js.map +1 -0
  27. package/dist/Navigation.d.ts +79 -0
  28. package/dist/Navigation.js +49 -0
  29. package/dist/Navigation.js.map +1 -0
  30. package/dist/NavigationType.d.ts +3 -0
  31. package/dist/NavigationType.js +3 -0
  32. package/dist/NavigationType.js.map +1 -0
  33. package/dist/ProposedDestination.d.ts +13 -0
  34. package/dist/ProposedDestination.js +4 -0
  35. package/dist/ProposedDestination.js.map +1 -0
  36. package/dist/Url.d.ts +13 -0
  37. package/dist/Url.js +72 -0
  38. package/dist/Url.js.map +1 -0
  39. package/dist/index.d.ts +12 -0
  40. package/dist/index.js +13 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/internal/fromWindow.d.ts +4 -0
  43. package/dist/internal/fromWindow.js +358 -0
  44. package/dist/internal/fromWindow.js.map +1 -0
  45. package/dist/internal/memory.d.ts +6 -0
  46. package/dist/internal/memory.js +59 -0
  47. package/dist/internal/memory.js.map +1 -0
  48. package/dist/internal/shared.d.ts +109 -0
  49. package/dist/{esm/internal → internal}/shared.js +134 -165
  50. package/dist/internal/shared.js.map +1 -0
  51. package/package.json +35 -52
  52. package/readme.md +243 -0
  53. package/src/Blocking.ts +65 -65
  54. package/src/Destination.ts +14 -0
  55. package/src/Error.ts +28 -0
  56. package/src/Event.ts +26 -0
  57. package/src/Forms.ts +216 -0
  58. package/src/Handler.ts +16 -0
  59. package/src/Layer.ts +20 -9
  60. package/src/NavigateOptions.ts +9 -0
  61. package/src/Navigation.test.ts +697 -0
  62. package/src/Navigation.ts +133 -468
  63. package/src/NavigationType.ts +5 -0
  64. package/src/ProposedDestination.ts +8 -0
  65. package/src/Url.ts +106 -0
  66. package/src/index.ts +12 -17
  67. package/src/internal/fromWindow.ts +250 -180
  68. package/src/internal/memory.ts +62 -49
  69. package/src/internal/shared.ts +238 -305
  70. package/tsconfig.json +30 -0
  71. package/Blocking/package.json +0 -6
  72. package/LICENSE +0 -21
  73. package/Layer/package.json +0 -6
  74. package/Navigation/package.json +0 -6
  75. package/README.md +0 -5
  76. package/dist/cjs/Blocking.js +0 -58
  77. package/dist/cjs/Blocking.js.map +0 -1
  78. package/dist/cjs/Layer.js +0 -27
  79. package/dist/cjs/Layer.js.map +0 -1
  80. package/dist/cjs/Navigation.js +0 -275
  81. package/dist/cjs/Navigation.js.map +0 -1
  82. package/dist/cjs/index.js +0 -39
  83. package/dist/cjs/index.js.map +0 -1
  84. package/dist/cjs/internal/fromWindow.js +0 -421
  85. package/dist/cjs/internal/fromWindow.js.map +0 -1
  86. package/dist/cjs/internal/memory.js +0 -72
  87. package/dist/cjs/internal/memory.js.map +0 -1
  88. package/dist/cjs/internal/shared.js +0 -522
  89. package/dist/cjs/internal/shared.js.map +0 -1
  90. package/dist/dts/Blocking.d.ts +0 -34
  91. package/dist/dts/Blocking.d.ts.map +0 -1
  92. package/dist/dts/Layer.d.ts.map +0 -1
  93. package/dist/dts/Navigation.d.ts +0 -462
  94. package/dist/dts/Navigation.d.ts.map +0 -1
  95. package/dist/dts/index.d.ts +0 -17
  96. package/dist/dts/index.d.ts.map +0 -1
  97. package/dist/dts/internal/fromWindow.d.ts +0 -12
  98. package/dist/dts/internal/fromWindow.d.ts.map +0 -1
  99. package/dist/dts/internal/memory.d.ts +0 -6
  100. package/dist/dts/internal/memory.d.ts.map +0 -1
  101. package/dist/dts/internal/shared.d.ts +0 -114
  102. package/dist/dts/internal/shared.d.ts.map +0 -1
  103. package/dist/esm/Blocking.js +0 -46
  104. package/dist/esm/Blocking.js.map +0 -1
  105. package/dist/esm/Layer.js.map +0 -1
  106. package/dist/esm/Navigation.js +0 -237
  107. package/dist/esm/Navigation.js.map +0 -1
  108. package/dist/esm/index.js +0 -17
  109. package/dist/esm/index.js.map +0 -1
  110. package/dist/esm/internal/fromWindow.js +0 -310
  111. package/dist/esm/internal/fromWindow.js.map +0 -1
  112. package/dist/esm/internal/memory.js +0 -56
  113. package/dist/esm/internal/memory.js.map +0 -1
  114. package/dist/esm/internal/shared.js.map +0 -1
  115. package/dist/esm/package.json +0 -4
package/src/Url.ts ADDED
@@ -0,0 +1,106 @@
1
+ import * as Effect from 'effect/Effect'
2
+ import * as ParseResult from 'effect/ParseResult'
3
+ import * as Schema from 'effect/Schema'
4
+
5
+ export const UrlFromSelf = Schema.instanceOf(URL).annotations({
6
+ equivalence: () => (a, b) => a.href === b.href,
7
+ jsonSchema: {
8
+ title: 'URL',
9
+ identifier: 'URL',
10
+ type: 'string',
11
+ format: 'uri',
12
+ },
13
+ })
14
+
15
+ export const Url = Schema.String.pipe(
16
+ Schema.transformOrFail(UrlFromSelf, {
17
+ decode: (s) =>
18
+ Effect.try({
19
+ try: () => new URL(s),
20
+ catch: () => new ParseResult.Type(UrlFromSelf.ast, s, 'Expected a URL'),
21
+ }),
22
+ encode: (url) => Effect.succeed(url.href),
23
+ }),
24
+ )
25
+
26
+ export const UrlSearchParamsFromSelf = Schema.instanceOf(URLSearchParams).annotations({
27
+ equivalence: () => (a, b) => a.toString() === b.toString(),
28
+ })
29
+
30
+ export const UrlSearchParamsFromString = Schema.String.pipe(
31
+ Schema.transform(UrlSearchParamsFromSelf, {
32
+ decode: (s) => new URLSearchParams(s),
33
+ encode: (searchParams) => `?${searchParams.toString()}`,
34
+ }),
35
+ )
36
+
37
+ export const UrlSearchParams = Schema.Record({
38
+ key: Schema.String,
39
+ value: Schema.Union(Schema.String, Schema.Array(Schema.String)),
40
+ }).pipe(
41
+ Schema.transform(UrlSearchParamsFromSelf, {
42
+ strict: true,
43
+ decode: structToUrlSearchParams,
44
+ encode: urlSearchParamsToStruct,
45
+ }),
46
+ )
47
+
48
+ type AnySchemaEncoded<T> = Schema.Schema<any, T, any> | Schema.Schema<any, T, never>
49
+ type AnyFormDataFieldSchema =
50
+ | AnySchemaEncoded<string>
51
+ | AnySchemaEncoded<readonly string[]>
52
+ | AnySchemaEncoded<string | readonly string[]>
53
+
54
+ type UrlSearchParamsFields = Record<string, AnyFormDataFieldSchema>
55
+
56
+ export function schemaUrlSearchParams<const Fields extends UrlSearchParamsFields>(
57
+ fields: Fields,
58
+ ): Schema.Schema<
59
+ { readonly [K in keyof Schema.Struct.Type<Fields>]: Schema.Struct.Type<Fields>[K] },
60
+ URLSearchParams,
61
+ Schema.Schema.Context<Fields[keyof Fields]>
62
+ > {
63
+ const struct = Schema.Struct(fields)
64
+ const encode = ParseResult.encode(struct)
65
+ const decode = ParseResult.decodeUnknown(struct)
66
+
67
+ return Schema.transformOrFail(UrlSearchParamsFromSelf, Schema.typeSchema(struct), {
68
+ strict: true,
69
+ decode: (searchParams) => decode(urlSearchParamsToStruct(searchParams)),
70
+ encode: (struct) =>
71
+ Effect.map(encode(struct), (_) =>
72
+ structToUrlSearchParams(_ as Readonly<Record<string, string | readonly string[]>>),
73
+ ),
74
+ })
75
+ }
76
+
77
+ function structToUrlSearchParams(
78
+ struct: Readonly<Record<string, string | readonly string[]>>,
79
+ ): URLSearchParams {
80
+ const searchParams = new URLSearchParams()
81
+ for (const [key, value] of Object.entries(struct)) {
82
+ if (Array.isArray(value)) {
83
+ for (const v of value) {
84
+ searchParams.append(key, v)
85
+ }
86
+ } else {
87
+ searchParams.set(key, value as string)
88
+ }
89
+ }
90
+ return searchParams
91
+ }
92
+
93
+ function urlSearchParamsToStruct(
94
+ searchParams: URLSearchParams,
95
+ ): Readonly<Record<string, string | readonly string[]>> {
96
+ const struct: Record<string, string | readonly string[]> = {}
97
+ searchParams.forEach((_, key) => {
98
+ const values = searchParams.getAll(key)
99
+ if (values.length === 1) {
100
+ struct[key] = values[0]
101
+ } else {
102
+ struct[key] = values
103
+ }
104
+ })
105
+ return struct
106
+ }
package/src/index.ts CHANGED
@@ -1,17 +1,12 @@
1
- /**
2
- * Re-exports of other modules
3
- * @since 1.0.0
4
- */
5
-
6
- /**
7
- * @since 1.0.0
8
- */
9
- export * from "./Blocking.js"
10
- /**
11
- * @since 1.0.0
12
- */
13
- export * from "./Layer.js"
14
- /**
15
- * @since 1.0.0
16
- */
17
- export * from "./Navigation.js"
1
+ export * from './Blocking.js'
2
+ export * from './Destination.js'
3
+ export * from './Error.js'
4
+ export * from './Event.js'
5
+ export * from './Forms.js'
6
+ export * from './Handler.js'
7
+ export * from './Layer.js'
8
+ export * from './NavigateOptions.js'
9
+ export * from './Navigation.js'
10
+ export * from './NavigationType.js'
11
+ export * from './ProposedDestination.js'
12
+ export * from './Url.js'