schemind 0.0.2 → 0.0.3
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/README.md +66 -10
- package/dist/schemind.cjs +1 -1
- package/dist/schemind.d.ts +38 -7
- package/dist/schemind.iife.js +1 -1
- package/dist/schemind.js +66 -43
- package/dist/schemind.umd.cjs +1 -1
- package/package.json +8 -8
package/README.md
CHANGED
|
@@ -1,11 +1,57 @@
|
|
|
1
|
-
|
|
1
|
+
# schemind
|
|
2
|
+
[](https://www.npmjs.com/package/schemind)
|
|
2
3
|

|
|
4
|
+
[](https://bundlejs.com/?q=schemind&treeshake=%5B*%5D&config=%7B%22compression%22%3A%22brotli%22%7D)
|
|
3
5
|
|
|
4
|
-
|
|
5
|
-
Read and write to messages serialized as arrays (aka indexed keys) by defining a schema.
|
|
6
|
+
Read and write to messages serialized as arrays (aka indexed keys messages) by defining a schema. Protocol‑agnostic.
|
|
6
7
|
|
|
7
8
|
## What?
|
|
8
|
-
|
|
9
|
+
In formats like JSON, a message normally looks something like this:
|
|
10
|
+
```json
|
|
11
|
+
{
|
|
12
|
+
"id": 1,
|
|
13
|
+
"fullName": "John Doe",
|
|
14
|
+
"email": "johndoe@example.com",
|
|
15
|
+
"birthDate": "1973-01-22",
|
|
16
|
+
"address": {
|
|
17
|
+
"street": "123 Main Street",
|
|
18
|
+
"city": "Anytown",
|
|
19
|
+
"zipcode": "12345-6789",
|
|
20
|
+
"geo": {
|
|
21
|
+
"lat": 42.1234,
|
|
22
|
+
"lng": -71.2345
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"website": "www.johndoe.com"
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
*I'm using JSON as an example here, but schemind is essentially protocol-agnostic. I use it with MessagePack.*
|
|
29
|
+
|
|
30
|
+
If you desperately need to make this message more compact, you could alternatively serialize it as such:
|
|
31
|
+
```json
|
|
32
|
+
[
|
|
33
|
+
1,
|
|
34
|
+
"John Doe",
|
|
35
|
+
"johndoe@example.com",
|
|
36
|
+
"1973-01-22",
|
|
37
|
+
[
|
|
38
|
+
"123 Main Street",
|
|
39
|
+
"Anytown",
|
|
40
|
+
"12345-6789",
|
|
41
|
+
[
|
|
42
|
+
42.1234,
|
|
43
|
+
-71.2345
|
|
44
|
+
]
|
|
45
|
+
],
|
|
46
|
+
"www.johndoe.com"
|
|
47
|
+
]
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
This is sometimes referred to as a message with *indexed keys*.
|
|
51
|
+
|
|
52
|
+
*Note that this obviously has some drawbacks: [recommended reading about the pros and cons of this format](https://github.com/MessagePack-CSharp/MessagePack-CSharp#use-indexed-keys-instead-of-string-keys-contractless).*
|
|
53
|
+
|
|
54
|
+
**Schemind** helps you create and read such messages, if your (de)serializer doesn't support this technique.
|
|
9
55
|
|
|
10
56
|
## Installation
|
|
11
57
|
|
|
@@ -16,13 +62,23 @@ npm install schemind
|
|
|
16
62
|
## Usage
|
|
17
63
|
TODO
|
|
18
64
|
|
|
19
|
-
## FAQ
|
|
20
|
-
|
|
65
|
+
## FAQ
|
|
66
|
+
### Shouldn't this be an extension of a serializer?
|
|
67
|
+
Probably.
|
|
68
|
+
|
|
69
|
+
### Wouldn't it be better to use protobuf at this point?
|
|
70
|
+
Possibly. But if you're already using JSON / MessagePack / CBOR etc. in your app, and you need more compact messages for some features — *schemind* could be useful.
|
|
71
|
+
|
|
72
|
+
Additionally, in some languages (backend or frontend) there's a MessagePack or JSON implementation that's faster, or allocates less memory, than protobuf.
|
|
73
|
+
|
|
74
|
+
### Why is `get` so inconvenient?
|
|
75
|
+
The `get` function prioritizes performance over convenience. The main goal here is to avoid any heap allocations (beyond what your deserializer allocates). I use *schemind* in performance-critical scenarios, where avoiding GC pauses is crucial.
|
|
76
|
+
Use the `toPlainObject` function instead, if you don't mind some extra allocations.
|
|
21
77
|
|
|
22
78
|
## Related work
|
|
23
|
-
* https://github.com/MessagePack-CSharp/MessagePack-CSharp#use-indexed-keys-instead-of-string-keys-contractless
|
|
24
|
-
* https://aarnott.github.io/Nerdbank.MessagePack/docs/customizing-serialization.html?q=indexed#serialize-objects-with-indexes-for-keys
|
|
79
|
+
* [MessagePack-CSharp (.NET)](https://github.com/MessagePack-CSharp/MessagePack-CSharp#use-indexed-keys-instead-of-string-keys-contractless)
|
|
80
|
+
* [Nerdbank.MessagePack (.NET)](https://aarnott.github.io/Nerdbank.MessagePack/docs/customizing-serialization.html?q=indexed#serialize-objects-with-indexes-for-keys)
|
|
25
81
|
|
|
26
82
|
|
|
27
|
-
* https://github.com/Idein/msgpack-schema
|
|
28
|
-
* https://github.com/serde-rs/serde/issues/959
|
|
83
|
+
* [Idein/msgpack-schema (Rust)](https://github.com/Idein/msgpack-schema)
|
|
84
|
+
* [serde (Rust)](https://github.com/serde-rs/serde/issues/959)
|
package/dist/schemind.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function h(e){return t=>t?(
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=Symbol("isSchemaLeaf");class r extends Error{constructor(){super("Invalid schema. Make sure there are no duplicate indexes, and that nested objects are also wrapped with withIndex."),this.name="InvalidSchemaError"}}function P(e){return h(e,[],0),e}function h(e,t,s){for(const[o,d]of Object.entries(e)){const n=d;i(n)?I(n,t,s):h(n,t,s+1)}}function I(e,t,s){if(t.some(n=>n.length===e.indexesPathReversed.length&&n.every((a,S)=>a===e.indexesPathReversed[S])))throw new r;if(t.push(e.indexesPathReversed),e.indexesPathReversed.length!==s+1)throw new r}function b(e){return t=>t?(l(t,e),t):{indexesPathReversed:[e],fieldType:void 0,[c]:!0}}function i(e){return Object.hasOwn(e,c)}function l(e,t){for(const[s,o]of Object.entries(e)){const d=o;i(d)?d.indexesPathReversed.push(t):l(d,t)}}function f(e,t){const s=t.indexesPathReversed;let o=e;for(let n=t.indexesPathReversed.length-1;n>=1;n--)o=o[s[n]];const d=s[0];return o[d]}function u(e,t,s){const o=t.indexesPathReversed;let d=e;for(let a=t.indexesPathReversed.length-1;a>=1;a--)d[o[a]]===void 0&&(d[o[a]]=[]),d=d[o[a]];const n=o[0];d[n]=s}function v(e,t){const s={};for(const[o,d]of Object.entries(t)){const n=d;let a;i(n)?a=f(e,n):a=v(e,n),s[o]=a}return s}function g(e,t){const s=[];return x(s,e,t),s}function x(e,t,s){for(const[o,d]of Object.entries(s)){const n=d,a=t[o];i(n)?u(e,n,a):x(e,a,n)}}exports.InvalidSchemaError=r;exports.get=f;exports.set=u;exports.toIndexedKeysMessage=g;exports.toPlainObject=v;exports.validateSchema=P;exports.withIndex=b;
|
package/dist/schemind.d.ts
CHANGED
|
@@ -1,27 +1,58 @@
|
|
|
1
1
|
import { NonNegativeInteger } from 'type-fest';
|
|
2
2
|
|
|
3
|
-
export declare function get<const TField>(message: readonly unknown[], schemaField:
|
|
3
|
+
export declare function get<const TField>(message: readonly unknown[], schemaField: ValidSchemaLeaf<TField>): TField;
|
|
4
4
|
|
|
5
5
|
declare type IndexedKeysMessageSchema<TSchema> = {
|
|
6
6
|
[K in keyof TSchema]: TSchema[K] extends SchemaLeaf<infer TField> ? SchemaLeaf<TField> : IndexedKeysMessageSchema<TSchema[K]>;
|
|
7
7
|
};
|
|
8
8
|
|
|
9
|
-
declare type
|
|
10
|
-
|
|
9
|
+
declare type IndexesPath = number[];
|
|
10
|
+
|
|
11
|
+
declare type Invalid<T extends string> = {
|
|
12
|
+
[invalid]: T;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
declare const invalid: unique symbol;
|
|
16
|
+
|
|
17
|
+
export declare class InvalidSchemaError extends Error {
|
|
18
|
+
constructor();
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
declare const isSchemaLeafTag: unique symbol;
|
|
22
|
+
|
|
23
|
+
declare const isValidSchemaLeaf: unique symbol;
|
|
24
|
+
|
|
25
|
+
declare type PlainObjectOfSchema<TSchema> = TSchema extends ValidIndexedKeysMessageSchema<unknown> ? {
|
|
26
|
+
[K in keyof TSchema]: TSchema[K] extends ValidSchemaLeaf<infer TField> ? TField : TSchema[K] extends SchemaLeaf<unknown> ? Invalid<"Schema needs to be validated before you use it!"> : PlainObjectOfSchema<TSchema[K]>;
|
|
11
27
|
} : never;
|
|
12
28
|
|
|
13
29
|
declare type ReturnedSchemaNode<TField, TNestedSchema> = TNestedSchema extends undefined ? SchemaLeaf<TField> : TNestedSchema;
|
|
14
30
|
|
|
15
31
|
declare type SchemaLeaf<TField> = {
|
|
16
|
-
indexesPathReversed:
|
|
32
|
+
indexesPathReversed: IndexesPath;
|
|
17
33
|
fieldType: TField;
|
|
34
|
+
[isSchemaLeafTag]: true;
|
|
18
35
|
};
|
|
19
36
|
|
|
20
|
-
export declare function set<const TField>(targetMessage: unknown[], schemaField:
|
|
37
|
+
export declare function set<const TField>(targetMessage: unknown[], schemaField: ValidSchemaLeaf<TField>, value: TField): void;
|
|
21
38
|
|
|
22
|
-
export declare function toIndexedKeysMessage<TSchema extends
|
|
39
|
+
export declare function toIndexedKeysMessage<TSchema extends ValidIndexedKeysMessageSchema<TSchemaInner>, TSchemaInner>(plainObject: PlainObjectOfSchema<TSchema>, schema: TSchema): unknown[];
|
|
23
40
|
|
|
24
|
-
export declare function toPlainObject<TSchema extends
|
|
41
|
+
export declare function toPlainObject<TSchema extends ValidIndexedKeysMessageSchema<TSchemaInner>, TSchemaInner>(message: readonly unknown[], schema: TSchema): PlainObjectOfSchema<TSchema>;
|
|
42
|
+
|
|
43
|
+
declare type ToValidIndexedKeysMessageSchema<TSchema> = {
|
|
44
|
+
[K in keyof TSchema]: TSchema[K] extends SchemaLeaf<infer TField> ? ValidSchemaLeaf<TField> : ToValidIndexedKeysMessageSchema<TSchema[K]>;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export declare function validateSchema<TSchema extends IndexedKeysMessageSchema<TSchemaInner>, TSchemaInner>(schema: TSchema): ToValidIndexedKeysMessageSchema<TSchema>;
|
|
48
|
+
|
|
49
|
+
export declare type ValidIndexedKeysMessageSchema<TSchema> = {
|
|
50
|
+
[K in keyof TSchema]: TSchema[K] extends ValidSchemaLeaf<infer TField> ? ValidSchemaLeaf<TField> : TSchema[K] extends SchemaLeaf<unknown> ? Invalid<"Schema needs to be validated before you use it, did you forget to call validateSchema()?"> : ToValidIndexedKeysMessageSchema<TSchema[K]>;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
declare type ValidSchemaLeaf<TField> = SchemaLeaf<TField> & {
|
|
54
|
+
[isValidSchemaLeaf]: true;
|
|
55
|
+
};
|
|
25
56
|
|
|
26
57
|
export declare function withIndex<const TIndex extends number>(index: NonNegativeInteger<TIndex>): <const TField = undefined, TNestedSchema extends IndexedKeysMessageSchema<TNestedSchema> | undefined = undefined>(nestedSchema?: TNestedSchema) => ReturnedSchemaNode<TField, TNestedSchema>;
|
|
27
58
|
|
package/dist/schemind.iife.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var Schemind=function(
|
|
1
|
+
var Schemind=function(o){"use strict";const h=Symbol("isSchemaLeaf");class r extends Error{constructor(){super("Invalid schema. Make sure there are no duplicate indexes, and that nested objects are also wrapped with withIndex."),this.name="InvalidSchemaError"}}function x(e){return l(e,[],0),e}function l(e,t,s){for(const[i,d]of Object.entries(e)){const n=d;c(n)?I(n,t,s):l(n,t,s+1)}}function I(e,t,s){if(t.some(n=>n.length===e.indexesPathReversed.length&&n.every((a,R)=>a===e.indexesPathReversed[R])))throw new r;if(t.push(e.indexesPathReversed),e.indexesPathReversed.length!==s+1)throw new r}function b(e){return t=>t?(f(t,e),t):{indexesPathReversed:[e],fieldType:void 0,[h]:!0}}function c(e){return Object.hasOwn(e,h)}function f(e,t){for(const[s,i]of Object.entries(e)){const d=i;c(d)?d.indexesPathReversed.push(t):f(d,t)}}function u(e,t){const s=t.indexesPathReversed;let i=e;for(let n=t.indexesPathReversed.length-1;n>=1;n--)i=i[s[n]];const d=s[0];return i[d]}function v(e,t,s){const i=t.indexesPathReversed;let d=e;for(let a=t.indexesPathReversed.length-1;a>=1;a--)d[i[a]]===void 0&&(d[i[a]]=[]),d=d[i[a]];const n=i[0];d[n]=s}function S(e,t){const s={};for(const[i,d]of Object.entries(t)){const n=d;let a;c(n)?a=u(e,n):a=S(e,n),s[i]=a}return s}function g(e,t){const s=[];return P(s,e,t),s}function P(e,t,s){for(const[i,d]of Object.entries(s)){const n=d,a=t[i];c(n)?v(e,n,a):P(e,a,n)}}return o.InvalidSchemaError=r,o.get=u,o.set=v,o.toIndexedKeysMessage=g,o.toPlainObject=S,o.validateSchema=x,o.withIndex=b,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),o}({});
|
package/dist/schemind.js
CHANGED
|
@@ -1,58 +1,81 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
const c = Symbol("isSchemaLeaf");
|
|
2
|
+
class a extends Error {
|
|
3
|
+
constructor() {
|
|
4
|
+
super("Invalid schema. Make sure there are no duplicate indexes, and that nested objects are also wrapped with withIndex."), this.name = "InvalidSchemaError";
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
function I(e) {
|
|
8
|
+
return h(e, [], 0), e;
|
|
9
|
+
}
|
|
10
|
+
function h(e, t, s) {
|
|
11
|
+
for (const [o, d] of Object.entries(e)) {
|
|
12
|
+
const n = d;
|
|
13
|
+
r(n) ? v(n, t, s) : h(n, t, s + 1);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function v(e, t, s) {
|
|
17
|
+
if (t.some((n) => n.length === e.indexesPathReversed.length && n.every((i, u) => i === e.indexesPathReversed[u])))
|
|
18
|
+
throw new a();
|
|
19
|
+
if (t.push(e.indexesPathReversed), e.indexesPathReversed.length !== s + 1)
|
|
20
|
+
throw new a();
|
|
21
|
+
}
|
|
22
|
+
function R(e) {
|
|
23
|
+
return (t) => t ? (l(t, e), t) : {
|
|
3
24
|
indexesPathReversed: [e],
|
|
4
|
-
fieldType: void 0
|
|
25
|
+
fieldType: void 0,
|
|
26
|
+
[c]: !0
|
|
5
27
|
};
|
|
6
28
|
}
|
|
7
|
-
function
|
|
8
|
-
return Object.hasOwn(e,
|
|
29
|
+
function r(e) {
|
|
30
|
+
return Object.hasOwn(e, c);
|
|
9
31
|
}
|
|
10
|
-
function
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
32
|
+
function l(e, t) {
|
|
33
|
+
for (const [s, o] of Object.entries(e)) {
|
|
34
|
+
const d = o;
|
|
35
|
+
r(d) ? d.indexesPathReversed.push(t) : l(d, t);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function x(e, t) {
|
|
39
|
+
const s = t.indexesPathReversed;
|
|
40
|
+
let o = e;
|
|
41
|
+
for (let n = t.indexesPathReversed.length - 1; n >= 1; n--)
|
|
42
|
+
o = o[s[n]];
|
|
43
|
+
const d = s[0];
|
|
44
|
+
return o[d];
|
|
16
45
|
}
|
|
17
|
-
function
|
|
46
|
+
function P(e, t, s) {
|
|
18
47
|
const o = t.indexesPathReversed;
|
|
19
|
-
let
|
|
20
|
-
for (let
|
|
21
|
-
|
|
48
|
+
let d = e;
|
|
49
|
+
for (let i = t.indexesPathReversed.length - 1; i >= 1; i--)
|
|
50
|
+
d[o[i]] === void 0 && (d[o[i]] = []), d = d[o[i]];
|
|
22
51
|
const n = o[0];
|
|
23
|
-
|
|
52
|
+
d[n] = s;
|
|
24
53
|
}
|
|
25
|
-
function
|
|
26
|
-
const s =
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
n[r] = o;
|
|
32
|
-
}
|
|
33
|
-
function u(e, t) {
|
|
34
|
-
const o = {};
|
|
35
|
-
for (const [s, n] of Object.entries(t)) {
|
|
36
|
-
const r = n;
|
|
37
|
-
let d;
|
|
38
|
-
i(r) ? d = a(e, r) : d = u(e, r), o[s] = d;
|
|
54
|
+
function S(e, t) {
|
|
55
|
+
const s = {};
|
|
56
|
+
for (const [o, d] of Object.entries(t)) {
|
|
57
|
+
const n = d;
|
|
58
|
+
let i;
|
|
59
|
+
r(n) ? i = x(e, n) : i = S(e, n), s[o] = i;
|
|
39
60
|
}
|
|
40
|
-
return
|
|
61
|
+
return s;
|
|
41
62
|
}
|
|
42
|
-
function
|
|
43
|
-
const
|
|
44
|
-
return f(
|
|
63
|
+
function p(e, t) {
|
|
64
|
+
const s = [];
|
|
65
|
+
return f(s, e, t), s;
|
|
45
66
|
}
|
|
46
|
-
function f(e, t,
|
|
47
|
-
for (const [
|
|
48
|
-
const
|
|
49
|
-
|
|
67
|
+
function f(e, t, s) {
|
|
68
|
+
for (const [o, d] of Object.entries(s)) {
|
|
69
|
+
const n = d, i = t[o];
|
|
70
|
+
r(n) ? P(e, n, i) : f(e, i, n);
|
|
50
71
|
}
|
|
51
72
|
}
|
|
52
73
|
export {
|
|
53
|
-
a as
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
74
|
+
a as InvalidSchemaError,
|
|
75
|
+
x as get,
|
|
76
|
+
P as set,
|
|
77
|
+
p as toIndexedKeysMessage,
|
|
78
|
+
S as toPlainObject,
|
|
79
|
+
I as validateSchema,
|
|
80
|
+
R as withIndex
|
|
58
81
|
};
|
package/dist/schemind.umd.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(a,c){typeof exports=="object"&&typeof module<"u"?c(exports):typeof define=="function"&&define.amd?define(["exports"],c):(a=typeof globalThis<"u"?globalThis:a||self,c(a.Schemind={}))})(this,function(a){"use strict";const c=Symbol("isSchemaLeaf");class h extends Error{constructor(){super("Invalid schema. Make sure there are no duplicate indexes, and that nested objects are also wrapped with withIndex."),this.name="InvalidSchemaError"}}function P(e){return f(e,[],0),e}function f(e,t,s){for(const[i,d]of Object.entries(e)){const n=d;r(n)?I(n,t,s):f(n,t,s+1)}}function I(e,t,s){if(t.some(n=>n.length===e.indexesPathReversed.length&&n.every((o,g)=>o===e.indexesPathReversed[g])))throw new h;if(t.push(e.indexesPathReversed),e.indexesPathReversed.length!==s+1)throw new h}function b(e){return t=>t?(l(t,e),t):{indexesPathReversed:[e],fieldType:void 0,[c]:!0}}function r(e){return Object.hasOwn(e,c)}function l(e,t){for(const[s,i]of Object.entries(e)){const d=i;r(d)?d.indexesPathReversed.push(t):l(d,t)}}function u(e,t){const s=t.indexesPathReversed;let i=e;for(let n=t.indexesPathReversed.length-1;n>=1;n--)i=i[s[n]];const d=s[0];return i[d]}function v(e,t,s){const i=t.indexesPathReversed;let d=e;for(let o=t.indexesPathReversed.length-1;o>=1;o--)d[i[o]]===void 0&&(d[i[o]]=[]),d=d[i[o]];const n=i[0];d[n]=s}function x(e,t){const s={};for(const[i,d]of Object.entries(t)){const n=d;let o;r(n)?o=u(e,n):o=x(e,n),s[i]=o}return s}function m(e,t){const s=[];return S(s,e,t),s}function S(e,t,s){for(const[i,d]of Object.entries(s)){const n=d,o=t[i];r(n)?v(e,n,o):S(e,o,n)}}a.InvalidSchemaError=h,a.get=u,a.set=v,a.toIndexedKeysMessage=m,a.toPlainObject=x,a.validateSchema=P,a.withIndex=b,Object.defineProperty(a,Symbol.toStringTag,{value:"Module"})});
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "schemind",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"description": "Read and write to messages serialized as arrays (indexed keys) by defining a schema
|
|
3
|
+
"version": "0.0.3",
|
|
4
|
+
"description": "Read and write to messages serialized as arrays (indexed keys) by defining a schema, \nenabling smaller message size when using protocols such as msgpack or JSON.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"serialization",
|
|
7
7
|
"schema",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"indexed keys",
|
|
10
10
|
"array",
|
|
11
11
|
"msgpack",
|
|
12
|
-
"
|
|
12
|
+
"messagepack",
|
|
13
13
|
"packed"
|
|
14
14
|
],
|
|
15
15
|
"license": "MIT",
|
|
@@ -33,18 +33,18 @@
|
|
|
33
33
|
"dist"
|
|
34
34
|
],
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"type-fest": "^4.
|
|
36
|
+
"type-fest": "^4.31.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@commitlint/cli": "^19.6.
|
|
39
|
+
"@commitlint/cli": "^19.6.1",
|
|
40
40
|
"@commitlint/config-conventional": "^19.6.0",
|
|
41
|
-
"@types/node": "^22.10.
|
|
41
|
+
"@types/node": "^22.10.2",
|
|
42
42
|
"camelcase": "^8.0.0",
|
|
43
43
|
"changelogen": "^0.5.7",
|
|
44
44
|
"husky": "^9.1.7",
|
|
45
45
|
"typescript": "~5.7.2",
|
|
46
|
-
"vite": "^6.0.
|
|
47
|
-
"vite-plugin-dts": "^4.
|
|
46
|
+
"vite": "^6.0.6",
|
|
47
|
+
"vite-plugin-dts": "^4.4.0",
|
|
48
48
|
"vitest": "2.1.8",
|
|
49
49
|
"@vitest/coverage-v8": "2.1.8"
|
|
50
50
|
},
|