Skip to content

Commit ce9408e

Browse files
committed
1.4.1 and 1.4.2
1 parent 727bd41 commit ce9408e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+1105
-763
lines changed

benchmark/CHANGELOG.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,21 @@
11
# seroval-benchmarks
22

3+
## 1.3.6
4+
5+
### Patch Changes
6+
7+
- Updated dependencies
8+
- seroval@1.4.2
9+
- seroval-plugins@1.4.2
10+
11+
## 1.3.5
12+
13+
### Patch Changes
14+
15+
- Updated dependencies [3995cc1]
16+
- seroval-plugins@1.4.1
17+
- seroval@1.4.1
18+
319
## 1.3.4
420

521
### Patch Changes

benchmark/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,5 @@
4343
"typesVersions": {
4444
"*": {}
4545
},
46-
"version": "1.3.4"
46+
"version": "1.3.6"
4747
}

docs/compatibility.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ By default, all feature flags are enabled. The following are the feature flags a
5353
- Affects `Iterable`, `Error`, `AggregateError` and `Object.create(null)`
5454
- [`BigIntTypedArray`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt64Array)
5555
- Disables serialization of `BigInt64Array` and `BigUint64Array`
56+
- `RegExp`
57+
- Disables serialization (and deserialization) of `RegExp`
5658

5759
## Supported Types
5860

@@ -75,7 +77,7 @@ By default, all feature flags are enabled. The following are the feature flags a
7577
| `Array` ||||
7678
| sparse (holey) `Arrays` ||||
7779
| `Object` ||||
78-
| `RegExp` | | | |
80+
| `RegExp` | [^6] |[^6] |[^6] |
7981
| `Date` ||||
8082
| `Map` ||||
8183
| `Set` ||||
@@ -133,3 +135,4 @@ By default, all feature flags are enabled. The following are the feature flags a
133135
[^3]: `Feature.AggregateError` must be enabled, otherwise `AggregateError` is serialized into an `Error` instance.
134136
[^4]: `FormData` is partially supported if it doesn't contain any `Blob` or `File` instances.
135137
[^5]: Due to the nature of `Blob` and `File` being an async type (in that it returns a `Promise`-based serializable data) while having a sync constructor, it cannot be represented in a way that the type is consistent to its original declaration.
138+
[^6]: `Feature.RegExp` must be enabled, otherwise throws an `SerovalUnsupportedTypeError` and `SerovalUnsupportedNodeError`.

packages/plugins/CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
# seroval-plugins
22

3+
## 1.4.2
4+
5+
## 1.4.1
6+
7+
### Patch Changes
8+
9+
- 3995cc1: security enhancements
10+
311
## 1.4.0
412

513
### Minor Changes

packages/plugins/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "seroval-plugins",
33
"type": "module",
4-
"version": "1.4.0",
4+
"version": "1.4.2",
55
"files": [
66
"dist",
77
"web"
@@ -17,7 +17,7 @@
1717
"@types/node": "^24.10.0",
1818
"@vitest/ui": "^4.0.6",
1919
"pridepack": "2.6.4",
20-
"seroval": "1.4.0",
20+
"seroval": "1.4.2",
2121
"tslib": "^2.8.1",
2222
"typescript": "^5.9.3",
2323
"vitest": "^4.0.6"

packages/plugins/tests/web/__snapshots__/abort-signal.test.ts.snap

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,10 @@ exports[`AbortSignal > toCrossJSONStream > supports future AbortSignal 1`] = `"{
9494

9595
exports[`AbortSignal > toCrossJSONStream > supports future AbortSignal 2`] = `"{"t":25,"i":2,"s":{"controller":{"t":4,"i":1},"reason":{"t":1,"s":"aborted!"}},"c":"seroval-plugins/web/AbortSignalAbort"}"`;
9696

97-
exports[`AbortSignal > toJSON > supports aborted AbortSignal 1`] = `"{"t":{"t":25,"i":0,"s":{"type":1,"reason":{"t":1,"s":"aborted!"}},"c":"seroval-plugins/web/AbortSignal"},"f":31,"m":[]}"`;
97+
exports[`AbortSignal > toJSON > supports aborted AbortSignal 1`] = `"{"t":{"t":25,"i":0,"s":{"type":1,"reason":{"t":1,"s":"aborted!"}},"c":"seroval-plugins/web/AbortSignal"},"f":63,"m":[]}"`;
9898

99-
exports[`AbortSignal > toJSON > supports future AbortSignal 1`] = `"{"t":{"t":25,"i":0,"s":{"type":0},"c":"seroval-plugins/web/AbortSignal"},"f":31,"m":[]}"`;
99+
exports[`AbortSignal > toJSON > supports future AbortSignal 1`] = `"{"t":{"t":25,"i":0,"s":{"type":0},"c":"seroval-plugins/web/AbortSignal"},"f":63,"m":[]}"`;
100100

101-
exports[`AbortSignal > toJSONAsync > supports aborted AbortSignal 1`] = `"{"t":{"t":12,"i":0,"s":1,"f":{"t":25,"i":1,"s":{"type":1,"reason":{"t":1,"s":"aborted!"}},"c":"seroval-plugins/web/AbortSignal"}},"f":31,"m":[]}"`;
101+
exports[`AbortSignal > toJSONAsync > supports aborted AbortSignal 1`] = `"{"t":{"t":12,"i":0,"s":1,"f":{"t":25,"i":1,"s":{"type":1,"reason":{"t":1,"s":"aborted!"}},"c":"seroval-plugins/web/AbortSignal"}},"f":63,"m":[]}"`;
102102

103-
exports[`AbortSignal > toJSONAsync > supports future AbortSignal 1`] = `"{"t":{"t":25,"i":0,"s":{"type":1,"reason":{"t":1,"s":"aborted!"}},"c":"seroval-plugins/web/AbortSignal"},"f":31,"m":[]}"`;
103+
exports[`AbortSignal > toJSONAsync > supports future AbortSignal 1`] = `"{"t":{"t":25,"i":0,"s":{"type":1,"reason":{"t":1,"s":"aborted!"}},"c":"seroval-plugins/web/AbortSignal"},"f":63,"m":[]}"`;
Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,41 @@
11
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
22

33
exports[`Blob > crossSerializeAsync > scoped > supports Blob 1`] = `
4-
"($R=>$R[0]=Promise.resolve($R[1]=new Blob([$R[2]=($R[3]=(length, b64) => {
4+
"($R=>$R[0]=Promise.resolve($R[1]=new Blob([$R[2]=($R[3]=(b64) => {
55
const decoded = atob(b64);
6+
const length = decoded.length;
67
const arr = new Uint8Array(length);
78
for (let i = 0; i < length; i++) {
89
arr[i] = decoded.charCodeAt(i);
910
};
1011
return arr.buffer;
11-
})(11,"SGVsbG8gV29ybGQ=")],{type:"text/plain"})))($R["example"])"
12+
})("SGVsbG8gV29ybGQ=")],{type:"text/plain"})))($R["example"])"
1213
`;
1314

1415
exports[`Blob > crossSerializeAsync > supports Blob 1`] = `
15-
"$R[0]=new Blob([$R[1]=($R[2]=(length, b64) => {
16+
"$R[0]=new Blob([$R[1]=($R[2]=(b64) => {
1617
const decoded = atob(b64);
18+
const length = decoded.length;
1719
const arr = new Uint8Array(length);
1820
for (let i = 0; i < length; i++) {
1921
arr[i] = decoded.charCodeAt(i);
2022
};
2123
return arr.buffer;
22-
})(11,"SGVsbG8gV29ybGQ=")],{type:"text/plain"})"
24+
})("SGVsbG8gV29ybGQ=")],{type:"text/plain"})"
2325
`;
2426

2527
exports[`Blob > serializeAsync > supports Blob 1`] = `
26-
"new Blob([((length, b64) => {
28+
"new Blob([((b64) => {
2729
const decoded = atob(b64);
30+
const length = decoded.length;
2831
const arr = new Uint8Array(length);
2932
for (let i = 0; i < length; i++) {
3033
arr[i] = decoded.charCodeAt(i);
3134
};
3235
return arr.buffer;
33-
})(11,"SGVsbG8gV29ybGQ=")],{type:"text/plain"})"
36+
})("SGVsbG8gV29ybGQ=")],{type:"text/plain"})"
3437
`;
3538

36-
exports[`Blob > toCrossJSONAsync > supports Blob 1`] = `"{"t":25,"i":0,"s":{"type":{"t":1,"s":"text/plain"},"buffer":{"t":19,"i":1,"s":"SGVsbG8gV29ybGQ=","l":11,"f":{"t":26,"i":2,"s":5}}},"c":"seroval-plugins/web/Blob"}"`;
39+
exports[`Blob > toCrossJSONAsync > supports Blob 1`] = `"{"t":25,"i":0,"s":{"type":{"t":1,"s":"text/plain"},"buffer":{"t":19,"i":1,"s":"SGVsbG8gV29ybGQ=","f":{"t":26,"i":2,"s":5}}},"c":"seroval-plugins/web/Blob"}"`;
3740

38-
exports[`Blob > toJSONAsync > supports Blob 1`] = `"{"t":{"t":25,"i":0,"s":{"type":{"t":1,"s":"text/plain"},"buffer":{"t":19,"i":1,"s":"SGVsbG8gV29ybGQ=","l":11,"f":{"t":26,"i":2,"s":5}}},"c":"seroval-plugins/web/Blob"},"f":31,"m":[]}"`;
41+
exports[`Blob > toJSONAsync > supports Blob 1`] = `"{"t":{"t":25,"i":0,"s":{"type":{"t":1,"s":"text/plain"},"buffer":{"t":19,"i":1,"s":"SGVsbG8gV29ybGQ=","f":{"t":26,"i":2,"s":5}}},"c":"seroval-plugins/web/Blob"},"f":63,"m":[]}"`;

packages/plugins/tests/web/__snapshots__/custom-event.test.ts.snap

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,14 @@ exports[`CustomEvent > serialize > supports CustomEvent 1`] = `"((h,j)=>(j=new C
5858

5959
exports[`CustomEvent > serializeAsync > supports CustomEvent 1`] = `"((h,j)=>(j=Promise.resolve(new CustomEvent("example",{detail:h={},bubbles:!1,cancelable:!1,composed:!1})),h.self=h,j))()"`;
6060

61-
exports[`CustomEvent > toCrossJSON > supports CustomEvent 1`] = `"{"t":25,"i":0,"s":{"type":{"t":1,"s":"example"},"options":{"t":10,"i":1,"p":{"k":["detail","bubbles","cancelable","composed"],"v":[{"t":10,"i":2,"p":{"k":["self"],"v":[{"t":4,"i":2}],"s":1},"o":0},{"t":2,"s":3},{"t":2,"s":3},{"t":2,"s":3}],"s":4},"o":0}},"c":"seroval-plugins/web/CustomEvent"}"`;
61+
exports[`CustomEvent > toCrossJSON > supports CustomEvent 1`] = `"{"t":25,"i":0,"s":{"type":{"t":1,"s":"example"},"options":{"t":10,"i":1,"p":{"k":["detail","bubbles","cancelable","composed"],"v":[{"t":10,"i":2,"p":{"k":["self"],"v":[{"t":4,"i":2}]},"o":0},{"t":2,"s":3},{"t":2,"s":3},{"t":2,"s":3}]},"o":0}},"c":"seroval-plugins/web/CustomEvent"}"`;
6262

63-
exports[`CustomEvent > toCrossJSONAsync > supports CustomEvent 1`] = `"{"t":12,"i":0,"s":1,"f":{"t":25,"i":1,"s":{"type":{"t":1,"s":"example"},"options":{"t":10,"i":2,"p":{"k":["detail","bubbles","cancelable","composed"],"v":[{"t":10,"i":3,"p":{"k":["self"],"v":[{"t":4,"i":3}],"s":1},"o":0},{"t":2,"s":3},{"t":2,"s":3},{"t":2,"s":3}],"s":4},"o":0}},"c":"seroval-plugins/web/CustomEvent"}}"`;
63+
exports[`CustomEvent > toCrossJSONAsync > supports CustomEvent 1`] = `"{"t":12,"i":0,"s":1,"f":{"t":25,"i":1,"s":{"type":{"t":1,"s":"example"},"options":{"t":10,"i":2,"p":{"k":["detail","bubbles","cancelable","composed"],"v":[{"t":10,"i":3,"p":{"k":["self"],"v":[{"t":4,"i":3}]},"o":0},{"t":2,"s":3},{"t":2,"s":3},{"t":2,"s":3}]},"o":0}},"c":"seroval-plugins/web/CustomEvent"}}"`;
6464

6565
exports[`CustomEvent > toCrossJSONStream > supports CustomEvent 1`] = `"{"t":22,"i":0,"s":1,"f":{"t":26,"i":2,"s":1}}"`;
6666

67-
exports[`CustomEvent > toCrossJSONStream > supports CustomEvent 2`] = `"{"t":23,"i":1,"a":[{"t":26,"i":6,"s":2},{"t":25,"i":3,"s":{"type":{"t":1,"s":"example"},"options":{"t":10,"i":4,"p":{"k":["detail","bubbles","cancelable","composed"],"v":[{"t":10,"i":5,"p":{"k":["self"],"v":[{"t":4,"i":5}],"s":1},"o":0},{"t":2,"s":3},{"t":2,"s":3},{"t":2,"s":3}],"s":4},"o":0}},"c":"seroval-plugins/web/CustomEvent"}]}"`;
67+
exports[`CustomEvent > toCrossJSONStream > supports CustomEvent 2`] = `"{"t":23,"i":1,"a":[{"t":26,"i":6,"s":2},{"t":25,"i":3,"s":{"type":{"t":1,"s":"example"},"options":{"t":10,"i":4,"p":{"k":["detail","bubbles","cancelable","composed"],"v":[{"t":10,"i":5,"p":{"k":["self"],"v":[{"t":4,"i":5}]},"o":0},{"t":2,"s":3},{"t":2,"s":3},{"t":2,"s":3}]},"o":0}},"c":"seroval-plugins/web/CustomEvent"}]}"`;
6868

69-
exports[`CustomEvent > toJSON > supports CustomEvent 1`] = `"{"t":{"t":25,"i":0,"s":{"type":{"t":1,"s":"example"},"options":{"t":10,"i":1,"p":{"k":["detail","bubbles","cancelable","composed"],"v":[{"t":10,"i":2,"p":{"k":["self"],"v":[{"t":4,"i":2}],"s":1},"o":0},{"t":2,"s":3},{"t":2,"s":3},{"t":2,"s":3}],"s":4},"o":0}},"c":"seroval-plugins/web/CustomEvent"},"f":31,"m":[2]}"`;
69+
exports[`CustomEvent > toJSON > supports CustomEvent 1`] = `"{"t":{"t":25,"i":0,"s":{"type":{"t":1,"s":"example"},"options":{"t":10,"i":1,"p":{"k":["detail","bubbles","cancelable","composed"],"v":[{"t":10,"i":2,"p":{"k":["self"],"v":[{"t":4,"i":2}]},"o":0},{"t":2,"s":3},{"t":2,"s":3},{"t":2,"s":3}]},"o":0}},"c":"seroval-plugins/web/CustomEvent"},"f":63,"m":[2]}"`;
7070

71-
exports[`CustomEvent > toJSONAsync > supports CustomEvent 1`] = `"{"t":{"t":12,"i":0,"s":1,"f":{"t":25,"i":1,"s":{"type":{"t":1,"s":"example"},"options":{"t":10,"i":2,"p":{"k":["detail","bubbles","cancelable","composed"],"v":[{"t":10,"i":3,"p":{"k":["self"],"v":[{"t":4,"i":3}],"s":1},"o":0},{"t":2,"s":3},{"t":2,"s":3},{"t":2,"s":3}],"s":4},"o":0}},"c":"seroval-plugins/web/CustomEvent"}},"f":31,"m":[3]}"`;
71+
exports[`CustomEvent > toJSONAsync > supports CustomEvent 1`] = `"{"t":{"t":12,"i":0,"s":1,"f":{"t":25,"i":1,"s":{"type":{"t":1,"s":"example"},"options":{"t":10,"i":2,"p":{"k":["detail","bubbles","cancelable","composed"],"v":[{"t":10,"i":3,"p":{"k":["self"],"v":[{"t":4,"i":3}]},"o":0},{"t":2,"s":3},{"t":2,"s":3},{"t":2,"s":3}]},"o":0}},"c":"seroval-plugins/web/CustomEvent"}},"f":63,"m":[3]}"`;

packages/plugins/tests/web/__snapshots__/dom-exception.test.ts.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,6 @@ exports[`DOMException > toCrossJSONStream > supports DOMException 1`] = `"{"t":2
6666

6767
exports[`DOMException > toCrossJSONStream > supports DOMException 2`] = `"{"t":23,"i":1,"a":[{"t":26,"i":4,"s":2},{"t":25,"i":3,"s":{"name":{"t":1,"s":"Example"},"message":{"t":1,"s":"This is an example message."}},"c":"seroval-plugins/web/DOMException"}]}"`;
6868

69-
exports[`DOMException > toJSON > supports DOMException 1`] = `"{"t":{"t":25,"i":0,"s":{"name":{"t":1,"s":"Example"},"message":{"t":1,"s":"This is an example message."}},"c":"seroval-plugins/web/DOMException"},"f":31,"m":[]}"`;
69+
exports[`DOMException > toJSON > supports DOMException 1`] = `"{"t":{"t":25,"i":0,"s":{"name":{"t":1,"s":"Example"},"message":{"t":1,"s":"This is an example message."}},"c":"seroval-plugins/web/DOMException"},"f":63,"m":[]}"`;
7070

71-
exports[`DOMException > toJSONAsync > supports DOMException 1`] = `"{"t":{"t":12,"i":0,"s":1,"f":{"t":25,"i":1,"s":{"name":{"t":1,"s":"Example"},"message":{"t":1,"s":"This is an example message."}},"c":"seroval-plugins/web/DOMException"}},"f":31,"m":[]}"`;
71+
exports[`DOMException > toJSONAsync > supports DOMException 1`] = `"{"t":{"t":12,"i":0,"s":1,"f":{"t":25,"i":1,"s":{"name":{"t":1,"s":"Example"},"message":{"t":1,"s":"This is an example message."}},"c":"seroval-plugins/web/DOMException"}},"f":63,"m":[]}"`;

packages/plugins/tests/web/__snapshots__/event.test.ts.snap

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,14 @@ exports[`Event > serialize > supports Event 1`] = `"new Event("example",{bubbles
5858

5959
exports[`Event > serializeAsync > supports Event 1`] = `"Promise.resolve(new Event("example",{bubbles:!1,cancelable:!1,composed:!1}))"`;
6060

61-
exports[`Event > toCrossJSON > supports Event 1`] = `"{"t":25,"i":0,"s":{"type":{"t":1,"s":"example"},"options":{"t":10,"i":1,"p":{"k":["bubbles","cancelable","composed"],"v":[{"t":2,"s":3},{"t":2,"s":3},{"t":2,"s":3}],"s":3},"o":0}},"c":"seroval-plugins/web/Event"}"`;
61+
exports[`Event > toCrossJSON > supports Event 1`] = `"{"t":25,"i":0,"s":{"type":{"t":1,"s":"example"},"options":{"t":10,"i":1,"p":{"k":["bubbles","cancelable","composed"],"v":[{"t":2,"s":3},{"t":2,"s":3},{"t":2,"s":3}]},"o":0}},"c":"seroval-plugins/web/Event"}"`;
6262

63-
exports[`Event > toCrossJSONAsync > supports Event 1`] = `"{"t":12,"i":0,"s":1,"f":{"t":25,"i":1,"s":{"type":{"t":1,"s":"example"},"options":{"t":10,"i":2,"p":{"k":["bubbles","cancelable","composed"],"v":[{"t":2,"s":3},{"t":2,"s":3},{"t":2,"s":3}],"s":3},"o":0}},"c":"seroval-plugins/web/Event"}}"`;
63+
exports[`Event > toCrossJSONAsync > supports Event 1`] = `"{"t":12,"i":0,"s":1,"f":{"t":25,"i":1,"s":{"type":{"t":1,"s":"example"},"options":{"t":10,"i":2,"p":{"k":["bubbles","cancelable","composed"],"v":[{"t":2,"s":3},{"t":2,"s":3},{"t":2,"s":3}]},"o":0}},"c":"seroval-plugins/web/Event"}}"`;
6464

6565
exports[`Event > toCrossJSONStream > supports Event 1`] = `"{"t":22,"i":0,"s":1,"f":{"t":26,"i":2,"s":1}}"`;
6666

67-
exports[`Event > toCrossJSONStream > supports Event 2`] = `"{"t":23,"i":1,"a":[{"t":26,"i":5,"s":2},{"t":25,"i":3,"s":{"type":{"t":1,"s":"example"},"options":{"t":10,"i":4,"p":{"k":["bubbles","cancelable","composed"],"v":[{"t":2,"s":3},{"t":2,"s":3},{"t":2,"s":3}],"s":3},"o":0}},"c":"seroval-plugins/web/Event"}]}"`;
67+
exports[`Event > toCrossJSONStream > supports Event 2`] = `"{"t":23,"i":1,"a":[{"t":26,"i":5,"s":2},{"t":25,"i":3,"s":{"type":{"t":1,"s":"example"},"options":{"t":10,"i":4,"p":{"k":["bubbles","cancelable","composed"],"v":[{"t":2,"s":3},{"t":2,"s":3},{"t":2,"s":3}]},"o":0}},"c":"seroval-plugins/web/Event"}]}"`;
6868

69-
exports[`Event > toJSON > supports Event 1`] = `"{"t":{"t":25,"i":0,"s":{"type":{"t":1,"s":"example"},"options":{"t":10,"i":1,"p":{"k":["bubbles","cancelable","composed"],"v":[{"t":2,"s":3},{"t":2,"s":3},{"t":2,"s":3}],"s":3},"o":0}},"c":"seroval-plugins/web/Event"},"f":31,"m":[]}"`;
69+
exports[`Event > toJSON > supports Event 1`] = `"{"t":{"t":25,"i":0,"s":{"type":{"t":1,"s":"example"},"options":{"t":10,"i":1,"p":{"k":["bubbles","cancelable","composed"],"v":[{"t":2,"s":3},{"t":2,"s":3},{"t":2,"s":3}]},"o":0}},"c":"seroval-plugins/web/Event"},"f":63,"m":[]}"`;
7070

71-
exports[`Event > toJSONAsync > supports Event 1`] = `"{"t":{"t":12,"i":0,"s":1,"f":{"t":25,"i":1,"s":{"type":{"t":1,"s":"example"},"options":{"t":10,"i":2,"p":{"k":["bubbles","cancelable","composed"],"v":[{"t":2,"s":3},{"t":2,"s":3},{"t":2,"s":3}],"s":3},"o":0}},"c":"seroval-plugins/web/Event"}},"f":31,"m":[]}"`;
71+
exports[`Event > toJSONAsync > supports Event 1`] = `"{"t":{"t":12,"i":0,"s":1,"f":{"t":25,"i":1,"s":{"type":{"t":1,"s":"example"},"options":{"t":10,"i":2,"p":{"k":["bubbles","cancelable","composed"],"v":[{"t":2,"s":3},{"t":2,"s":3},{"t":2,"s":3}]},"o":0}},"c":"seroval-plugins/web/Event"}},"f":63,"m":[]}"`;

0 commit comments

Comments
 (0)