@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 { AssertionKind, CommonFlags, NodeKind, ParameterKind, Token, TypeNode, } from "assemblyscript/dist/assemblyscript.js";
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, TypeNode.createIdentifierExpression("reflectedValue", range), createGenericTypeParameter("i32", range), null, range),
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, TypeNode.createIdentifierExpression("seen", range), TypeNode.createNamedType(TypeNode.createSimpleTypeName("Map", range), [
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, TypeNode.createIdentifierExpression("ignore", range),
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, TypeNode.createArrayLiteralExpression(nameHashes.map((e) => TypeNode.createIntegerLiteralExpression(f64_as_i64(e), range)), range), TypeNode.createNamedType(TypeNode.createSimpleTypeName("StaticArray", range), [
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, includesCheck, equalsCheck, range),
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, TypeNode.createIdentifierExpression(name, range), typeNode, null, range);
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, createSuperCallExpression(nameHashes, range), range), TypeNode.createReturnStatement(TypeNode.createFalseExpression(range), range), null, range),
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, TypeNode.createArrayLiteralExpression(hashValues.map((e) => TypeNode.createIntegerLiteralExpression(f64_as_i64(e), range)), range), TypeNode.createNamedType(TypeNode.createSimpleTypeName("StaticArray", range), [
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
  }
@@ -6,4 +6,3 @@ export default class AspectTransform extends Transform {
6
6
  // @ts-ignore
7
7
  afterParse(_parser) { }
8
8
  }
9
- ;
package/lib/index.js CHANGED
@@ -1,6 +1,4 @@
1
- // import { Transform } from "assemblyscript/cli/transform";
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": "6.2.4",
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
- "test": "echo \"Error: no test specified\" && exit 1"
8
+ "tsc:all": "tsc"
8
9
  },
9
- "author": "",
10
- "license": "ISC",
11
- "peerDependencies": {
12
- "assemblyscript": "^0.21.1"
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.7.4"
16
+ "typescript": "^4.8.2"
16
17
  },
17
18
  "files": [
18
19
  "lib/",
package/lib/transform.js DELETED
@@ -1,7 +0,0 @@
1
- 'use strict';
2
-
3
- module.exports = transform;
4
-
5
- function transform() {
6
- return "Hello from transform";
7
- }