@as-pect/transform 6.2.4 → 7.0.0
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.
|
@@ -1,6 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
// import { } from "@as-pect/;
|
|
2
|
+
import { TypeNode, } from "assemblyscript/dist/assemblyscript.js";
|
|
2
3
|
import { createGenericTypeParameter } from "./createGenericTypeParameter.js";
|
|
3
4
|
import { djb2Hash } from "./hash.js";
|
|
5
|
+
// const TypeNode = TypeNode;
|
|
6
|
+
// const {
|
|
7
|
+
// BlockStatement,
|
|
8
|
+
// ClassDeclaration,
|
|
9
|
+
// FieldDeclaration,
|
|
10
|
+
// MethodDeclaration,
|
|
11
|
+
// Range,
|
|
12
|
+
// Statement
|
|
13
|
+
// } =
|
|
14
|
+
// type BlockStatement = InstanceType<typeof BlockStatement>;
|
|
15
|
+
// type ClassDeclaration = InstanceType<typeof ClassDeclaration>;
|
|
16
|
+
// type FieldDeclaration = InstanceType<typeof FieldDeclaration>;
|
|
17
|
+
// type MethodDeclaration = InstanceType<typeof MethodDeclaration>;
|
|
18
|
+
// type Range = InstanceType<typeof Range>;
|
|
19
|
+
// type Statement = InstanceType<typeof Statement>;
|
|
4
20
|
/**
|
|
5
21
|
* Create a prototype method called __aspectAddReflectedValueKeyValuePairs on a given
|
|
6
22
|
* ClassDeclaration dynamically.
|
|
@@ -10,18 +26,13 @@ import { djb2Hash } from "./hash.js";
|
|
|
10
26
|
export function createAddReflectedValueKeyValuePairsMember(classDeclaration) {
|
|
11
27
|
const range = classDeclaration.name.range;
|
|
12
28
|
// __aspectAddReflectedValueKeyValuePairs(reflectedValue: i32, seen: Map<usize, i32>, ignore: StaticArray<i64>): void
|
|
13
|
-
return TypeNode.createMethodDeclaration(TypeNode.createIdentifierExpression("__aspectAddReflectedValueKeyValuePairs", range), null, CommonFlags.PUBLIC |
|
|
14
|
-
CommonFlags.INSTANCE |
|
|
15
|
-
(classDeclaration.isGeneric ? CommonFlags.GENERIC_CONTEXT : 0), null, TypeNode.createFunctionType([
|
|
29
|
+
return TypeNode.createMethodDeclaration(TypeNode.createIdentifierExpression("__aspectAddReflectedValueKeyValuePairs", range), null, 256 /* CommonFlags.PUBLIC */ | 262144 /* CommonFlags.INSTANCE */ | (classDeclaration.isGeneric ? 131072 /* CommonFlags.GENERIC_CONTEXT */ : 0), null, TypeNode.createFunctionType([
|
|
16
30
|
// reflectedValue: i32
|
|
17
|
-
TypeNode.createParameter(ParameterKind.DEFAULT
|
|
31
|
+
TypeNode.createParameter(0 /* ParameterKind.DEFAULT */, TypeNode.createIdentifierExpression("reflectedValue", range), createGenericTypeParameter("i32", range), null, range),
|
|
18
32
|
// seen: Map<usize, i32>
|
|
19
|
-
TypeNode.createParameter(ParameterKind.DEFAULT
|
|
20
|
-
createGenericTypeParameter("usize", range),
|
|
21
|
-
createGenericTypeParameter("i32", range),
|
|
22
|
-
], false, range), null, range),
|
|
33
|
+
TypeNode.createParameter(0 /* ParameterKind.DEFAULT */, TypeNode.createIdentifierExpression("seen", range), TypeNode.createNamedType(TypeNode.createSimpleTypeName("Map", range), [createGenericTypeParameter("usize", range), createGenericTypeParameter("i32", range)], false, range), null, range),
|
|
23
34
|
// ignore: i64[]
|
|
24
|
-
TypeNode.createParameter(ParameterKind.DEFAULT
|
|
35
|
+
TypeNode.createParameter(0 /* ParameterKind.DEFAULT */, TypeNode.createIdentifierExpression("ignore", range),
|
|
25
36
|
// Array<i64> -> i64[]
|
|
26
37
|
TypeNode.createNamedType(TypeNode.createSimpleTypeName("StaticArray", range), [createGenericTypeParameter("i64", range)], false, range), null, range),
|
|
27
38
|
],
|
|
@@ -41,10 +52,10 @@ function createAddReflectedValueKeyValuePairsFunctionBody(classDeclaration) {
|
|
|
41
52
|
// for each field declaration, generate a check
|
|
42
53
|
for (const member of classDeclaration.members) {
|
|
43
54
|
// if it's an instance member, regardless of access modifier
|
|
44
|
-
if (member.is(CommonFlags.INSTANCE)) {
|
|
55
|
+
if (member.is(262144 /* CommonFlags.INSTANCE */)) {
|
|
45
56
|
switch (member.kind) {
|
|
46
57
|
// field declarations automatically get added
|
|
47
|
-
case NodeKind.FIELDDECLARATION
|
|
58
|
+
case 54 /* NodeKind.FIELDDECLARATION */: {
|
|
48
59
|
const fieldDeclaration = member;
|
|
49
60
|
const hashValue = djb2Hash(member.name.text);
|
|
50
61
|
pushKeyValueIfStatement(body, member.name.text, hashValue, fieldDeclaration.range);
|
|
@@ -52,8 +63,8 @@ function createAddReflectedValueKeyValuePairsFunctionBody(classDeclaration) {
|
|
|
52
63
|
break;
|
|
53
64
|
}
|
|
54
65
|
// function declarations can be getters, check the get flag
|
|
55
|
-
case NodeKind.METHODDECLARATION
|
|
56
|
-
if (member.is(CommonFlags.GET)) {
|
|
66
|
+
case 58 /* NodeKind.METHODDECLARATION */: {
|
|
67
|
+
if (member.is(2048 /* CommonFlags.GET */)) {
|
|
57
68
|
const methodDeclaration = member;
|
|
58
69
|
const hashValue = djb2Hash(member.name.text);
|
|
59
70
|
pushKeyValueIfStatement(body, member.name.text, hashValue, methodDeclaration.range);
|
|
@@ -95,9 +106,7 @@ function createIsDefinedIfStatement(nameHashes, range) {
|
|
|
95
106
|
TypeNode.createCallExpression(TypeNode.createPropertyAccessExpression(TypeNode.createIdentifierExpression("StaticArray", range), TypeNode.createIdentifierExpression("concat", range), range), null, [
|
|
96
107
|
TypeNode.createIdentifierExpression("ignore", range),
|
|
97
108
|
// [...propNames]
|
|
98
|
-
TypeNode.createAssertionExpression(AssertionKind.AS
|
|
99
|
-
TypeNode.createNamedType(TypeNode.createSimpleTypeName("i64", range), null, false, range),
|
|
100
|
-
], false, range), range),
|
|
109
|
+
TypeNode.createAssertionExpression(1 /* AssertionKind.AS */, TypeNode.createArrayLiteralExpression(nameHashes.map((e) => TypeNode.createIntegerLiteralExpression(f64_as_i64(e), range)), range), TypeNode.createNamedType(TypeNode.createSimpleTypeName("StaticArray", range), [TypeNode.createNamedType(TypeNode.createSimpleTypeName("i64", range), null, false, range)], false, range), range),
|
|
101
110
|
], range),
|
|
102
111
|
], range)),
|
|
103
112
|
], range), null, range);
|
|
@@ -113,15 +122,12 @@ function createIsDefinedIfStatement(nameHashes, range) {
|
|
|
113
122
|
function pushKeyValueIfStatement(body, name, hashValue, range) {
|
|
114
123
|
body.push(
|
|
115
124
|
// if (!ignore.includes("propName")) { ... }
|
|
116
|
-
TypeNode.createIfStatement(TypeNode.createUnaryPrefixExpression(Token.EXCLAMATION
|
|
125
|
+
TypeNode.createIfStatement(TypeNode.createUnaryPrefixExpression(95 /* Token.EXCLAMATION */,
|
|
117
126
|
// ignore.includes("propName")
|
|
118
127
|
TypeNode.createCallExpression(TypeNode.createPropertyAccessExpression(TypeNode.createIdentifierExpression("ignore", range), TypeNode.createIdentifierExpression("includes", range), range), null, [
|
|
119
128
|
// hashValue
|
|
120
129
|
TypeNode.createIntegerLiteralExpression(f64_as_i64(hashValue), range),
|
|
121
|
-
], range), range), TypeNode.createBlockStatement([
|
|
122
|
-
createPushReflectedObjectKeyStatement(name, range),
|
|
123
|
-
createPushReflectedObjectValueStatement(name, range),
|
|
124
|
-
], range), null, range));
|
|
130
|
+
], range), range), TypeNode.createBlockStatement([createPushReflectedObjectKeyStatement(name, range), createPushReflectedObjectValueStatement(name, range)], range), null, range));
|
|
125
131
|
}
|
|
126
132
|
/**
|
|
127
133
|
* Create a function call to __aspectPushReflectedObjectKey to add a key to a given
|
|
@@ -138,10 +144,7 @@ function createPushReflectedObjectKeyStatement(name, range) {
|
|
|
138
144
|
// Reflect.toReflectedValue("propertyName", seen)
|
|
139
145
|
TypeNode.createCallExpression(
|
|
140
146
|
// Reflect.toReflectedValue
|
|
141
|
-
TypeNode.createPropertyAccessExpression(TypeNode.createIdentifierExpression("Reflect", range), TypeNode.createIdentifierExpression("toReflectedValue", range), range), null, [
|
|
142
|
-
TypeNode.createStringLiteralExpression(name, range),
|
|
143
|
-
TypeNode.createIdentifierExpression("seen", range),
|
|
144
|
-
], range),
|
|
147
|
+
TypeNode.createPropertyAccessExpression(TypeNode.createIdentifierExpression("Reflect", range), TypeNode.createIdentifierExpression("toReflectedValue", range), range), null, [TypeNode.createStringLiteralExpression(name, range), TypeNode.createIdentifierExpression("seen", range)], range),
|
|
145
148
|
], range));
|
|
146
149
|
}
|
|
147
150
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AssertionKind, CommonFlags, NodeKind, ParameterKind, Token, TypeNode, } from "assemblyscript/dist/assemblyscript.js";
|
|
2
1
|
import { djb2Hash } from "./hash.js";
|
|
2
|
+
import { TypeNode, } from "assemblyscript/dist/assemblyscript.js";
|
|
3
3
|
/**
|
|
4
4
|
* This method creates a single FunctionDeclaration that allows Reflect.equals
|
|
5
5
|
* to validate normal class member values.
|
|
@@ -9,9 +9,7 @@ import { djb2Hash } from "./hash.js";
|
|
|
9
9
|
export function createStrictEqualsMember(classDeclaration) {
|
|
10
10
|
const range = classDeclaration.name.range;
|
|
11
11
|
// __aspectStrictEquals(ref: T, stackA: usize[], stackB: usize[], ignore: StaticArray<i64>): bool
|
|
12
|
-
return TypeNode.createMethodDeclaration(TypeNode.createIdentifierExpression("__aspectStrictEquals", range), null, CommonFlags.PUBLIC |
|
|
13
|
-
CommonFlags.INSTANCE |
|
|
14
|
-
(classDeclaration.isGeneric ? CommonFlags.GENERIC_CONTEXT : 0), null, TypeNode.createFunctionType([
|
|
12
|
+
return TypeNode.createMethodDeclaration(TypeNode.createIdentifierExpression("__aspectStrictEquals", range), null, 256 /* CommonFlags.PUBLIC */ | 262144 /* CommonFlags.INSTANCE */ | (classDeclaration.isGeneric ? 131072 /* CommonFlags.GENERIC_CONTEXT */ : 0), null, TypeNode.createFunctionType([
|
|
15
13
|
// ref: T,
|
|
16
14
|
createDefaultParameter("ref", TypeNode.createNamedType(TypeNode.createSimpleTypeName(classDeclaration.name.text, range), classDeclaration.isGeneric
|
|
17
15
|
? classDeclaration.typeParameters.map((node) => TypeNode.createNamedType(TypeNode.createSimpleTypeName(node.name.text, range), null, false, range))
|
|
@@ -23,9 +21,7 @@ export function createStrictEqualsMember(classDeclaration) {
|
|
|
23
21
|
// cache: usize[]
|
|
24
22
|
createDefaultParameter("cache", createArrayType("usize", range), range),
|
|
25
23
|
// ignore: StaticArray<i64>
|
|
26
|
-
createDefaultParameter("ignore", TypeNode.createNamedType(TypeNode.createSimpleTypeName("StaticArray", range), [
|
|
27
|
-
TypeNode.createNamedType(TypeNode.createSimpleTypeName("i64", range), null, false, range),
|
|
28
|
-
], false, range), range),
|
|
24
|
+
createDefaultParameter("ignore", TypeNode.createNamedType(TypeNode.createSimpleTypeName("StaticArray", range), [TypeNode.createNamedType(TypeNode.createSimpleTypeName("i64", range), null, false, range)], false, range), range),
|
|
29
25
|
],
|
|
30
26
|
// : bool
|
|
31
27
|
createSimpleNamedType("bool", range), null, false, range), createStrictEqualsFunctionBody(classDeclaration), range);
|
|
@@ -45,9 +41,7 @@ function createSimpleNamedType(name, range) {
|
|
|
45
41
|
* @param {Range} range - The source range.
|
|
46
42
|
*/
|
|
47
43
|
function createArrayType(name, range) {
|
|
48
|
-
return TypeNode.createNamedType(TypeNode.createSimpleTypeName("Array", range), [
|
|
49
|
-
TypeNode.createNamedType(TypeNode.createSimpleTypeName(name, range), null, false, range),
|
|
50
|
-
], false, range);
|
|
44
|
+
return TypeNode.createNamedType(TypeNode.createSimpleTypeName("Array", range), [TypeNode.createNamedType(TypeNode.createSimpleTypeName(name, range), null, false, range)], false, range);
|
|
51
45
|
}
|
|
52
46
|
/**
|
|
53
47
|
* This method creates the entire function body for __aspectStrictEquals.
|
|
@@ -61,10 +55,10 @@ function createStrictEqualsFunctionBody(classDeclaration) {
|
|
|
61
55
|
// for each field declaration, generate a check
|
|
62
56
|
for (const member of classDeclaration.members) {
|
|
63
57
|
// if it's an instance member, regardless of access modifier
|
|
64
|
-
if (member.is(CommonFlags.INSTANCE)) {
|
|
58
|
+
if (member.is(262144 /* CommonFlags.INSTANCE */)) {
|
|
65
59
|
switch (member.kind) {
|
|
66
60
|
// field declarations automatically get added
|
|
67
|
-
case NodeKind.FIELDDECLARATION
|
|
61
|
+
case 54 /* NodeKind.FIELDDECLARATION */: {
|
|
68
62
|
const fieldDeclaration = member;
|
|
69
63
|
const hashValue = djb2Hash(member.name.text);
|
|
70
64
|
body.push(createStrictEqualsIfCheck(member.name.text, hashValue, fieldDeclaration.range));
|
|
@@ -72,8 +66,8 @@ function createStrictEqualsFunctionBody(classDeclaration) {
|
|
|
72
66
|
break;
|
|
73
67
|
}
|
|
74
68
|
// function declarations can be getters, check the get flag
|
|
75
|
-
case NodeKind.METHODDECLARATION
|
|
76
|
-
if (member.is(CommonFlags.GET)) {
|
|
69
|
+
case 58 /* NodeKind.METHODDECLARATION */: {
|
|
70
|
+
if (member.is(2048 /* CommonFlags.GET */)) {
|
|
77
71
|
const methodDeclaration = member;
|
|
78
72
|
const hashValue = djb2Hash(member.name.text);
|
|
79
73
|
body.push(createStrictEqualsIfCheck(methodDeclaration.name.text, hashValue, methodDeclaration.name.range));
|
|
@@ -98,7 +92,7 @@ function createStrictEqualsFunctionBody(classDeclaration) {
|
|
|
98
92
|
* @param {Range} range - The source range for the given property.
|
|
99
93
|
*/
|
|
100
94
|
function createStrictEqualsIfCheck(name, hashValue, range) {
|
|
101
|
-
const equalsCheck = TypeNode.createBinaryExpression(Token.EQUALS_EQUALS
|
|
95
|
+
const equalsCheck = TypeNode.createBinaryExpression(76 /* Token.EQUALS_EQUALS */,
|
|
102
96
|
// Reflect.equals(this.prop, ref.prop, stack, cache)
|
|
103
97
|
TypeNode.createCallExpression(
|
|
104
98
|
// Reflect.equals
|
|
@@ -115,7 +109,7 @@ function createStrictEqualsIfCheck(name, hashValue, range) {
|
|
|
115
109
|
TypeNode.createIdentifierExpression("cache", range),
|
|
116
110
|
], range), createPropertyAccess("Reflect", "FAILED_MATCH", range), range);
|
|
117
111
|
// !ignore.includes("prop")
|
|
118
|
-
const includesCheck = TypeNode.createUnaryPrefixExpression(Token.EXCLAMATION
|
|
112
|
+
const includesCheck = TypeNode.createUnaryPrefixExpression(95 /* Token.EXCLAMATION */,
|
|
119
113
|
// ignore.includes("prop")
|
|
120
114
|
TypeNode.createCallExpression(
|
|
121
115
|
// ignore.includes
|
|
@@ -125,7 +119,7 @@ function createStrictEqualsIfCheck(name, hashValue, range) {
|
|
|
125
119
|
// if (Reflect.equals(this.prop, ref.prop, stack, cache) === Reflect.FAILED_MATCH) return false;
|
|
126
120
|
return TypeNode.createIfStatement(
|
|
127
121
|
// Reflect.equals(this.prop, ref.prop, stack, cache) === Reflect.FAILED_MATCH
|
|
128
|
-
TypeNode.createBinaryExpression(Token.AMPERSAND_AMPERSAND
|
|
122
|
+
TypeNode.createBinaryExpression(97 /* Token.AMPERSAND_AMPERSAND */, includesCheck, equalsCheck, range),
|
|
129
123
|
// return false;
|
|
130
124
|
TypeNode.createReturnStatement(TypeNode.createFalseExpression(range), range), null, range);
|
|
131
125
|
}
|
|
@@ -137,7 +131,7 @@ function createStrictEqualsIfCheck(name, hashValue, range) {
|
|
|
137
131
|
* @param {Range} range - The source range of the parameter.
|
|
138
132
|
*/
|
|
139
133
|
function createDefaultParameter(name, typeNode, range) {
|
|
140
|
-
return TypeNode.createParameter(ParameterKind.DEFAULT
|
|
134
|
+
return TypeNode.createParameter(0 /* ParameterKind.DEFAULT */, TypeNode.createIdentifierExpression(name, range), typeNode, null, range);
|
|
141
135
|
}
|
|
142
136
|
/**
|
|
143
137
|
* This method creates a single property access and passes the given range to the AST.
|
|
@@ -162,7 +156,7 @@ function createSuperCallStatement(classDeclaration, nameHashes) {
|
|
|
162
156
|
const ifStatement = TypeNode.createIfStatement(TypeNode.createCallExpression(TypeNode.createIdentifierExpression("isDefined", range), null, [
|
|
163
157
|
TypeNode.createPropertyAccessExpression(TypeNode.createSuperExpression(range), TypeNode.createIdentifierExpression("__aspectStrictEquals", range), range),
|
|
164
158
|
], range), TypeNode.createBlockStatement([
|
|
165
|
-
TypeNode.createIfStatement(TypeNode.createUnaryPrefixExpression(Token.EXCLAMATION
|
|
159
|
+
TypeNode.createIfStatement(TypeNode.createUnaryPrefixExpression(95 /* Token.EXCLAMATION */, createSuperCallExpression(nameHashes, range), range), TypeNode.createReturnStatement(TypeNode.createFalseExpression(range), range), null, range),
|
|
166
160
|
], range), null, range);
|
|
167
161
|
return ifStatement;
|
|
168
162
|
}
|
|
@@ -181,9 +175,7 @@ function createSuperCallExpression(hashValues, range) {
|
|
|
181
175
|
TypeNode.createCallExpression(TypeNode.createPropertyAccessExpression(TypeNode.createIdentifierExpression("StaticArray", range), TypeNode.createIdentifierExpression("concat", range), range), null, [
|
|
182
176
|
TypeNode.createIdentifierExpression("ignore", range),
|
|
183
177
|
// [...] as StaticArray<i64>
|
|
184
|
-
TypeNode.createAssertionExpression(AssertionKind.AS
|
|
185
|
-
TypeNode.createNamedType(TypeNode.createSimpleTypeName("i64", range), null, false, range),
|
|
186
|
-
], false, range), range),
|
|
178
|
+
TypeNode.createAssertionExpression(1 /* AssertionKind.AS */, TypeNode.createArrayLiteralExpression(hashValues.map((e) => TypeNode.createIntegerLiteralExpression(f64_as_i64(e), range)), range), TypeNode.createNamedType(TypeNode.createSimpleTypeName("StaticArray", range), [TypeNode.createNamedType(TypeNode.createSimpleTypeName("i64", range), null, false, range)], false, range), range),
|
|
187
179
|
], range),
|
|
188
180
|
], range);
|
|
189
181
|
}
|
package/lib/emptyTransformer.js
CHANGED
package/lib/index.js
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
import { NodeKind, } from "assemblyscript/dist/assemblyscript.js";
|
|
3
|
-
import { Transform, } from "assemblyscript/dist/transform.js";
|
|
1
|
+
import { Transform } from "assemblyscript/dist/transform.js";
|
|
4
2
|
import { createStrictEqualsMember } from "./createStrictEqualsMember.js";
|
|
5
3
|
import { createAddReflectedValueKeyValuePairsMember } from "./createAddReflectedValueKeyValuePairsMember.js";
|
|
6
4
|
// @ts-ignore
|
|
@@ -23,18 +21,17 @@ export default class AspectTransform extends Transform {
|
|
|
23
21
|
}
|
|
24
22
|
}
|
|
25
23
|
}
|
|
26
|
-
;
|
|
27
24
|
function traverseStatements(statements) {
|
|
28
25
|
// for each statement in the source
|
|
29
26
|
for (const statement of statements) {
|
|
30
27
|
// find each class declaration
|
|
31
|
-
if (statement.kind === NodeKind.CLASSDECLARATION) {
|
|
28
|
+
if (statement.kind === 51 /* NodeKind.CLASSDECLARATION */) {
|
|
32
29
|
// cast and create a strictEquals function
|
|
33
30
|
const classDeclaration = statement;
|
|
34
31
|
classDeclaration.members.push(createStrictEqualsMember(classDeclaration));
|
|
35
32
|
classDeclaration.members.push(createAddReflectedValueKeyValuePairsMember(classDeclaration));
|
|
36
33
|
}
|
|
37
|
-
else if (statement.kind === NodeKind.NAMESPACEDECLARATION) {
|
|
34
|
+
else if (statement.kind === 59 /* NodeKind.NAMESPACEDECLARATION */) {
|
|
38
35
|
const namespaceDeclaration = statement;
|
|
39
36
|
traverseStatements(namespaceDeclaration.members);
|
|
40
37
|
}
|
package/package.json
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@as-pect/transform",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "7.0.0",
|
|
4
4
|
"description": "The transform used by the as-pect core and assembly packages to enable strict equality.",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
|
+
"type": "module",
|
|
6
7
|
"scripts": {
|
|
7
|
-
"
|
|
8
|
+
"tsc:all": "tsc"
|
|
8
9
|
},
|
|
9
|
-
"author": "",
|
|
10
|
-
"license": "
|
|
11
|
-
"
|
|
12
|
-
"assemblyscript": "^0.21.
|
|
10
|
+
"author": "Joshua Tenner <tenner.joshua@gmail.com>",
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"assemblyscript": "^0.21.2"
|
|
13
14
|
},
|
|
14
15
|
"devDependencies": {
|
|
15
|
-
"typescript": "^4.
|
|
16
|
+
"typescript": "^4.8.2"
|
|
16
17
|
},
|
|
17
18
|
"files": [
|
|
18
19
|
"lib/",
|