@outfoxx/sunday 1.1.0-alpha.12 → 1.1.0-alpha.13
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.
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
|
-
import { Instant } from '@js-joda/core';
|
|
14
|
+
import { DateTimeFormatter, Instant, LocalDate, LocalDateTime, LocalTime, OffsetDateTime, OffsetTime, Temporal, ZonedDateTime, } from '@js-joda/core';
|
|
15
15
|
import { JsonStringifier } from '@outfoxx/jackson-js';
|
|
16
16
|
export class WWWFormUrlEncoder {
|
|
17
17
|
constructor(arrayEncoding, boolEncoding, dateEncoding, json = new JsonStringifier(), encoder = new TextEncoder()) {
|
|
@@ -50,11 +50,17 @@ export class WWWFormUrlEncoder {
|
|
|
50
50
|
components.push(...this.encodeQueryComponent(encodeArrayKey(key, this.arrayEncoding), item));
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
|
-
else if (value instanceof
|
|
53
|
+
else if (value instanceof Date) {
|
|
54
54
|
//
|
|
55
55
|
components.push(encodeURIComponent(key) +
|
|
56
56
|
'=' +
|
|
57
|
-
encodeURIComponent(
|
|
57
|
+
encodeURIComponent(encodeInstant(Instant.ofEpochMilli(value.getTime()), this.dateEncoding)));
|
|
58
|
+
}
|
|
59
|
+
else if (value instanceof Temporal) {
|
|
60
|
+
//
|
|
61
|
+
components.push(encodeURIComponent(key) +
|
|
62
|
+
'=' +
|
|
63
|
+
encodeURIComponent(encodeTemporal(value, this.dateEncoding)));
|
|
58
64
|
}
|
|
59
65
|
else if (typeof value === 'boolean') {
|
|
60
66
|
//
|
|
@@ -91,15 +97,46 @@ function encodeBoolean(value, encoding) {
|
|
|
91
97
|
throw new Error('unknown boolean encoding');
|
|
92
98
|
}
|
|
93
99
|
}
|
|
94
|
-
function
|
|
95
|
-
|
|
100
|
+
function encodeTemporal(value, encoding) {
|
|
101
|
+
if (value instanceof Instant) {
|
|
102
|
+
return encodeInstant(value, encoding);
|
|
103
|
+
}
|
|
104
|
+
else if (value instanceof OffsetDateTime) {
|
|
105
|
+
if (encoding == WWWFormUrlEncoder.DateEncoding.ISO8601) {
|
|
106
|
+
return value.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
|
|
107
|
+
}
|
|
108
|
+
return encodeInstant(value.toInstant(), encoding);
|
|
109
|
+
}
|
|
110
|
+
else if (value instanceof ZonedDateTime) {
|
|
111
|
+
if (encoding == WWWFormUrlEncoder.DateEncoding.ISO8601) {
|
|
112
|
+
return value.format(DateTimeFormatter.ISO_ZONED_DATE_TIME);
|
|
113
|
+
}
|
|
114
|
+
return encodeInstant(value.toInstant(), encoding);
|
|
115
|
+
}
|
|
116
|
+
else if (value instanceof LocalDateTime) {
|
|
117
|
+
return value.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
|
|
118
|
+
}
|
|
119
|
+
else if (value instanceof LocalDate) {
|
|
120
|
+
return value.format(DateTimeFormatter.ISO_LOCAL_DATE);
|
|
121
|
+
}
|
|
122
|
+
else if (value instanceof LocalTime) {
|
|
123
|
+
return value.format(DateTimeFormatter.ISO_LOCAL_TIME);
|
|
124
|
+
}
|
|
125
|
+
else if (value instanceof OffsetTime) {
|
|
126
|
+
return value.format(DateTimeFormatter.ISO_OFFSET_TIME);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
throw Error('unsupported temporal value for ');
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
function encodeInstant(value, encoding) {
|
|
96
133
|
switch (encoding) {
|
|
97
134
|
case WWWFormUrlEncoder.DateEncoding.DECIMAL_SECONDS_SINCE_EPOCH:
|
|
98
135
|
return (value.epochSecond() + value.nano() / 1000000000).toFixed(7);
|
|
99
136
|
case WWWFormUrlEncoder.DateEncoding.MILLISECONDS_SINCE_EPOCH:
|
|
100
137
|
return `${value.toEpochMilli()}`;
|
|
101
138
|
case WWWFormUrlEncoder.DateEncoding.ISO8601:
|
|
102
|
-
return
|
|
139
|
+
return DateTimeFormatter.ISO_INSTANT.format(value);
|
|
103
140
|
default:
|
|
104
141
|
throw new Error('unknown date encoding');
|
|
105
142
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"www-form-url-encoder.js","sourceRoot":"","sources":["../../src/media-type-codecs/www-form-url-encoder.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,OAAO,
|
|
1
|
+
{"version":3,"file":"www-form-url-encoder.js","sourceRoot":"","sources":["../../src/media-type-codecs/www-form-url-encoder.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -12,7 +12,17 @@
|
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
14
|
|
|
15
|
-
import {
|
|
15
|
+
import {
|
|
16
|
+
DateTimeFormatter,
|
|
17
|
+
Instant,
|
|
18
|
+
LocalDate,
|
|
19
|
+
LocalDateTime,
|
|
20
|
+
LocalTime,
|
|
21
|
+
OffsetDateTime,
|
|
22
|
+
OffsetTime,
|
|
23
|
+
Temporal,
|
|
24
|
+
ZonedDateTime,
|
|
25
|
+
} from '@js-joda/core';
|
|
16
26
|
import { JsonStringifier } from '@outfoxx/jackson-js';
|
|
17
27
|
import { URLQueryParamsEncoder } from './media-type-encoder';
|
|
18
28
|
|
|
@@ -68,12 +78,24 @@ export class WWWFormUrlEncoder implements URLQueryParamsEncoder {
|
|
|
68
78
|
)
|
|
69
79
|
);
|
|
70
80
|
}
|
|
71
|
-
} else if (value instanceof
|
|
81
|
+
} else if (value instanceof Date) {
|
|
72
82
|
//
|
|
73
83
|
components.push(
|
|
74
84
|
encodeURIComponent(key) +
|
|
75
85
|
'=' +
|
|
76
|
-
encodeURIComponent(
|
|
86
|
+
encodeURIComponent(
|
|
87
|
+
encodeInstant(
|
|
88
|
+
Instant.ofEpochMilli(value.getTime()),
|
|
89
|
+
this.dateEncoding
|
|
90
|
+
)
|
|
91
|
+
)
|
|
92
|
+
);
|
|
93
|
+
} else if (value instanceof Temporal) {
|
|
94
|
+
//
|
|
95
|
+
components.push(
|
|
96
|
+
encodeURIComponent(key) +
|
|
97
|
+
'=' +
|
|
98
|
+
encodeURIComponent(encodeTemporal(value, this.dateEncoding))
|
|
77
99
|
);
|
|
78
100
|
} else if (typeof value === 'boolean') {
|
|
79
101
|
//
|
|
@@ -125,18 +147,46 @@ function encodeBoolean(
|
|
|
125
147
|
}
|
|
126
148
|
}
|
|
127
149
|
|
|
128
|
-
function
|
|
129
|
-
value:
|
|
150
|
+
function encodeTemporal(
|
|
151
|
+
value: Temporal,
|
|
152
|
+
encoding: WWWFormUrlEncoder.DateEncoding
|
|
153
|
+
): string {
|
|
154
|
+
if (value instanceof Instant) {
|
|
155
|
+
return encodeInstant(value, encoding);
|
|
156
|
+
} else if (value instanceof OffsetDateTime) {
|
|
157
|
+
if (encoding == WWWFormUrlEncoder.DateEncoding.ISO8601) {
|
|
158
|
+
return value.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
|
|
159
|
+
}
|
|
160
|
+
return encodeInstant(value.toInstant(), encoding);
|
|
161
|
+
} else if (value instanceof ZonedDateTime) {
|
|
162
|
+
if (encoding == WWWFormUrlEncoder.DateEncoding.ISO8601) {
|
|
163
|
+
return value.format(DateTimeFormatter.ISO_ZONED_DATE_TIME);
|
|
164
|
+
}
|
|
165
|
+
return encodeInstant(value.toInstant(), encoding);
|
|
166
|
+
} else if (value instanceof LocalDateTime) {
|
|
167
|
+
return value.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
|
|
168
|
+
} else if (value instanceof LocalDate) {
|
|
169
|
+
return value.format(DateTimeFormatter.ISO_LOCAL_DATE);
|
|
170
|
+
} else if (value instanceof LocalTime) {
|
|
171
|
+
return value.format(DateTimeFormatter.ISO_LOCAL_TIME);
|
|
172
|
+
} else if (value instanceof OffsetTime) {
|
|
173
|
+
return value.format(DateTimeFormatter.ISO_OFFSET_TIME);
|
|
174
|
+
} else {
|
|
175
|
+
throw Error('unsupported temporal value for ');
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
function encodeInstant(
|
|
180
|
+
value: Instant,
|
|
130
181
|
encoding: WWWFormUrlEncoder.DateEncoding
|
|
131
182
|
): string {
|
|
132
|
-
value = value instanceof Date ? Instant.ofEpochMilli(value.getTime()) : value;
|
|
133
183
|
switch (encoding) {
|
|
134
184
|
case WWWFormUrlEncoder.DateEncoding.DECIMAL_SECONDS_SINCE_EPOCH:
|
|
135
185
|
return (value.epochSecond() + value.nano() / 1_000_000_000.0).toFixed(7);
|
|
136
186
|
case WWWFormUrlEncoder.DateEncoding.MILLISECONDS_SINCE_EPOCH:
|
|
137
187
|
return `${value.toEpochMilli()}`;
|
|
138
188
|
case WWWFormUrlEncoder.DateEncoding.ISO8601:
|
|
139
|
-
return
|
|
189
|
+
return DateTimeFormatter.ISO_INSTANT.format(value);
|
|
140
190
|
default:
|
|
141
191
|
throw new Error('unknown date encoding');
|
|
142
192
|
}
|