@typed/navigation 0.18.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.
- package/.nvmrc +1 -0
- package/biome.json +39 -0
- package/dist/Blocking.d.ts +23 -0
- package/dist/Blocking.js +41 -0
- package/dist/Blocking.js.map +1 -0
- package/dist/Destination.d.ts +11 -0
- package/dist/Destination.js +10 -0
- package/dist/Destination.js.map +1 -0
- package/dist/Error.d.ts +33 -0
- package/dist/Error.js +22 -0
- package/dist/Error.js.map +1 -0
- package/dist/Event.d.ts +45 -0
- package/dist/Event.js +17 -0
- package/dist/Event.js.map +1 -0
- package/dist/Forms.d.ts +79 -0
- package/dist/Forms.js +111 -0
- package/dist/Forms.js.map +1 -0
- package/dist/Handler.d.ts +6 -0
- package/dist/Handler.js +2 -0
- package/dist/Handler.js.map +1 -0
- package/dist/{dts/Layer.d.ts → Layer.d.ts} +11 -8
- package/dist/{esm/Layer.js → Layer.js} +2 -2
- package/dist/Layer.js.map +1 -0
- package/dist/NavigateOptions.d.ts +7 -0
- package/dist/NavigateOptions.js +7 -0
- package/dist/NavigateOptions.js.map +1 -0
- package/dist/Navigation.d.ts +79 -0
- package/dist/Navigation.js +49 -0
- package/dist/Navigation.js.map +1 -0
- package/dist/NavigationType.d.ts +3 -0
- package/dist/NavigationType.js +3 -0
- package/dist/NavigationType.js.map +1 -0
- package/dist/ProposedDestination.d.ts +13 -0
- package/dist/ProposedDestination.js +4 -0
- package/dist/ProposedDestination.js.map +1 -0
- package/dist/Url.d.ts +13 -0
- package/dist/Url.js +72 -0
- package/dist/Url.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/fromWindow.d.ts +4 -0
- package/dist/{esm/internal → internal}/fromWindow.js +125 -136
- package/dist/internal/fromWindow.js.map +1 -0
- package/dist/internal/memory.d.ts +6 -0
- package/dist/internal/memory.js +59 -0
- package/dist/internal/memory.js.map +1 -0
- package/dist/{dts/internal → internal}/shared.d.ts +44 -46
- package/dist/{esm/internal → internal}/shared.js +121 -168
- package/dist/internal/shared.js.map +1 -0
- package/package.json +35 -53
- package/readme.md +243 -0
- package/src/Blocking.ts +65 -65
- package/src/Destination.ts +14 -0
- package/src/Error.ts +28 -0
- package/src/Event.ts +26 -0
- package/src/Forms.ts +216 -0
- package/src/Handler.ts +16 -0
- package/src/Layer.ts +20 -9
- package/src/NavigateOptions.ts +9 -0
- package/src/Navigation.test.ts +697 -0
- package/src/Navigation.ts +135 -472
- package/src/NavigationType.ts +5 -0
- package/src/ProposedDestination.ts +8 -0
- package/src/Url.ts +106 -0
- package/src/index.ts +12 -17
- package/src/internal/fromWindow.ts +163 -234
- package/src/internal/memory.ts +62 -49
- package/src/internal/shared.ts +218 -377
- package/tsconfig.json +30 -0
- package/Blocking/package.json +0 -6
- package/LICENSE +0 -21
- package/Layer/package.json +0 -6
- package/Navigation/package.json +0 -6
- package/README.md +0 -5
- package/dist/cjs/Blocking.js +0 -58
- package/dist/cjs/Blocking.js.map +0 -1
- package/dist/cjs/Layer.js +0 -27
- package/dist/cjs/Layer.js.map +0 -1
- package/dist/cjs/Navigation.js +0 -278
- package/dist/cjs/Navigation.js.map +0 -1
- package/dist/cjs/index.js +0 -39
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/internal/fromWindow.js +0 -436
- package/dist/cjs/internal/fromWindow.js.map +0 -1
- package/dist/cjs/internal/memory.js +0 -72
- package/dist/cjs/internal/memory.js.map +0 -1
- package/dist/cjs/internal/shared.js +0 -525
- package/dist/cjs/internal/shared.js.map +0 -1
- package/dist/dts/Blocking.d.ts +0 -34
- package/dist/dts/Blocking.d.ts.map +0 -1
- package/dist/dts/Layer.d.ts.map +0 -1
- package/dist/dts/Navigation.d.ts +0 -451
- package/dist/dts/Navigation.d.ts.map +0 -1
- package/dist/dts/index.d.ts +0 -17
- package/dist/dts/index.d.ts.map +0 -1
- package/dist/dts/internal/fromWindow.d.ts +0 -12
- package/dist/dts/internal/fromWindow.d.ts.map +0 -1
- package/dist/dts/internal/memory.d.ts +0 -6
- package/dist/dts/internal/memory.d.ts.map +0 -1
- package/dist/dts/internal/shared.d.ts.map +0 -1
- package/dist/esm/Blocking.js +0 -46
- package/dist/esm/Blocking.js.map +0 -1
- package/dist/esm/Layer.js.map +0 -1
- package/dist/esm/Navigation.js +0 -238
- package/dist/esm/Navigation.js.map +0 -1
- package/dist/esm/index.js +0 -17
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/internal/fromWindow.js.map +0 -1
- package/dist/esm/internal/memory.js +0 -56
- package/dist/esm/internal/memory.js.map +0 -1
- package/dist/esm/internal/shared.js.map +0 -1
- 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
|
-
*
|
|
3
|
-
*
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
*
|
|
8
|
-
|
|
9
|
-
export * from
|
|
10
|
-
|
|
11
|
-
*
|
|
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'
|