@entity-access/entity-access 1.0.157 → 1.0.159

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.
Files changed (149) hide show
  1. package/dist/common/CustomEvent.js +0 -1
  2. package/dist/common/CustomEvent.js.map +1 -1
  3. package/dist/common/EntityAccessError.js +0 -1
  4. package/dist/common/EntityAccessError.js.map +1 -1
  5. package/dist/common/ErrorModel.js +1 -2
  6. package/dist/common/ErrorModel.js.map +1 -1
  7. package/dist/common/EventSet.d.ts +3 -1
  8. package/dist/common/EventSet.d.ts.map +1 -1
  9. package/dist/common/EventSet.js +3 -2
  10. package/dist/common/EventSet.js.map +1 -1
  11. package/dist/common/IDisposable.d.ts +0 -6
  12. package/dist/common/IDisposable.d.ts.map +1 -1
  13. package/dist/common/IDisposable.js +1 -0
  14. package/dist/common/IDisposable.js.map +1 -1
  15. package/dist/common/Logger.d.ts +3 -3
  16. package/dist/common/Logger.d.ts.map +1 -1
  17. package/dist/common/Logger.js +7 -15
  18. package/dist/common/Logger.js.map +1 -1
  19. package/dist/common/ObjectPool.d.ts.map +1 -1
  20. package/dist/common/ObjectPool.js +5 -13
  21. package/dist/common/ObjectPool.js.map +1 -1
  22. package/dist/common/cache/TimedCache.js +3 -4
  23. package/dist/common/cache/TimedCache.js.map +1 -1
  24. package/dist/common/usingAsync.d.ts +3 -1
  25. package/dist/common/usingAsync.d.ts.map +1 -1
  26. package/dist/common/usingAsync.js +8 -2
  27. package/dist/common/usingAsync.js.map +1 -1
  28. package/dist/compiler/QueryCompiler.js +3 -11
  29. package/dist/compiler/QueryCompiler.js.map +1 -1
  30. package/dist/compiler/RawQuery.js +0 -1
  31. package/dist/compiler/RawQuery.js.map +1 -1
  32. package/dist/decorators/SchemaRegistry.js +3 -2
  33. package/dist/decorators/SchemaRegistry.js.map +1 -1
  34. package/dist/di/di.js +1 -2
  35. package/dist/di/di.js.map +1 -1
  36. package/dist/drivers/base/BaseDriver.d.ts +13 -8
  37. package/dist/drivers/base/BaseDriver.d.ts.map +1 -1
  38. package/dist/drivers/base/BaseDriver.js +27 -7
  39. package/dist/drivers/base/BaseDriver.js.map +1 -1
  40. package/dist/drivers/postgres/PostgreSqlDriver.d.ts.map +1 -1
  41. package/dist/drivers/postgres/PostgreSqlDriver.js +7 -13
  42. package/dist/drivers/postgres/PostgreSqlDriver.js.map +1 -1
  43. package/dist/drivers/sql-server/SqlServerDriver.d.ts +2 -2
  44. package/dist/drivers/sql-server/SqlServerDriver.d.ts.map +1 -1
  45. package/dist/drivers/sql-server/SqlServerDriver.js +14 -38
  46. package/dist/drivers/sql-server/SqlServerDriver.js.map +1 -1
  47. package/dist/entity-query/EntityType.js +9 -23
  48. package/dist/entity-query/EntityType.js.map +1 -1
  49. package/dist/eternity/ActivitySuspendedError.js +0 -1
  50. package/dist/eternity/ActivitySuspendedError.js.map +1 -1
  51. package/dist/eternity/EternityContext.d.ts.map +1 -1
  52. package/dist/eternity/EternityContext.js +17 -26
  53. package/dist/eternity/EternityContext.js.map +1 -1
  54. package/dist/eternity/EternityStorage.js +7 -35
  55. package/dist/eternity/EternityStorage.js.map +1 -1
  56. package/dist/eternity/Workflow.js +2 -12
  57. package/dist/eternity/Workflow.js.map +1 -1
  58. package/dist/eternity/WorkflowClock.js +1 -6
  59. package/dist/eternity/WorkflowClock.js.map +1 -1
  60. package/dist/migrations/Migrations.js +0 -1
  61. package/dist/migrations/Migrations.js.map +1 -1
  62. package/dist/model/EntityContext.js +4 -21
  63. package/dist/model/EntityContext.js.map +1 -1
  64. package/dist/model/EntityModel.js +2 -3
  65. package/dist/model/EntityModel.js.map +1 -1
  66. package/dist/model/EntityQuery.d.ts.map +1 -1
  67. package/dist/model/EntityQuery.js +120 -98
  68. package/dist/model/EntityQuery.js.map +1 -1
  69. package/dist/model/EntitySource.js +0 -3
  70. package/dist/model/EntitySource.js.map +1 -1
  71. package/dist/model/SourceExpression.js +0 -9
  72. package/dist/model/SourceExpression.js.map +1 -1
  73. package/dist/model/changes/ChangeEntry.js +0 -10
  74. package/dist/model/changes/ChangeEntry.js.map +1 -1
  75. package/dist/model/changes/ChangeSet.js +8 -9
  76. package/dist/model/changes/ChangeSet.js.map +1 -1
  77. package/dist/model/events/ContextEvents.js +3 -1
  78. package/dist/model/events/ContextEvents.js.map +1 -1
  79. package/dist/model/events/EntityEvents.js +0 -6
  80. package/dist/model/events/EntityEvents.js.map +1 -1
  81. package/dist/model/identity/RelationMapper.js +1 -3
  82. package/dist/model/identity/RelationMapper.js.map +1 -1
  83. package/dist/model/verification/VerificationSession.d.ts.map +1 -1
  84. package/dist/model/verification/VerificationSession.js +26 -23
  85. package/dist/model/verification/VerificationSession.js.map +1 -1
  86. package/dist/query/Query.js +3 -8
  87. package/dist/query/Query.js.map +1 -1
  88. package/dist/query/ast/ExpressionToSql.d.ts.map +1 -1
  89. package/dist/query/ast/ExpressionToSql.js +2 -6
  90. package/dist/query/ast/ExpressionToSql.js.map +1 -1
  91. package/dist/query/ast/Expressions.js +128 -107
  92. package/dist/query/ast/Expressions.js.map +1 -1
  93. package/dist/query/ast/IStringTransformer.js +0 -1
  94. package/dist/query/ast/IStringTransformer.js.map +1 -1
  95. package/dist/query/ast/ParameterScope.js +4 -2
  96. package/dist/query/ast/ParameterScope.js.map +1 -1
  97. package/dist/query/expander/QueryExpander.js +1 -4
  98. package/dist/query/expander/QueryExpander.js.map +1 -1
  99. package/dist/query/parser/ArrowToExpression.js +2 -4
  100. package/dist/query/parser/ArrowToExpression.js.map +1 -1
  101. package/dist/query/parser/Restructure.js +4 -1
  102. package/dist/query/parser/Restructure.js.map +1 -1
  103. package/dist/tests/TestConfig.js +0 -2
  104. package/dist/tests/TestConfig.js.map +1 -1
  105. package/dist/tests/eternity/child-tests.js +8 -14
  106. package/dist/tests/eternity/child-tests.js.map +1 -1
  107. package/dist/tests/eternity/eternity-tests.js +8 -14
  108. package/dist/tests/eternity/eternity-tests.js.map +1 -1
  109. package/dist/tests/eternity/external-event-tests.js +5 -14
  110. package/dist/tests/eternity/external-event-tests.js.map +1 -1
  111. package/dist/tests/model/ShoppingContext.js +15 -90
  112. package/dist/tests/model/ShoppingContext.js.map +1 -1
  113. package/dist/tests/model/UseFile.js +1 -13
  114. package/dist/tests/model/UseFile.js.map +1 -1
  115. package/dist/tests/security/events/OrderEvents.js +1 -11
  116. package/dist/tests/security/events/OrderEvents.js.map +1 -1
  117. package/dist/tests/security/events/ProductEvents.js +1 -12
  118. package/dist/tests/security/events/ProductEvents.js.map +1 -1
  119. package/dist/tests/security/events/UserEvents.js +1 -10
  120. package/dist/tests/security/events/UserEvents.js.map +1 -1
  121. package/dist/tests/security/events/UserInfo.js +1 -8
  122. package/dist/tests/security/events/UserInfo.js.map +1 -1
  123. package/dist/tests/security/tests/place-order.d.ts.map +1 -1
  124. package/dist/tests/security/tests/place-order.js +28 -12
  125. package/dist/tests/security/tests/place-order.js.map +1 -1
  126. package/dist/tests/security/tests/test-events.d.ts.map +1 -1
  127. package/dist/tests/security/tests/test-events.js +11 -5
  128. package/dist/tests/security/tests/test-events.js.map +1 -1
  129. package/dist/tsconfig.tsbuildinfo +1 -1
  130. package/dist/types/DateTime.js +0 -37
  131. package/dist/types/DateTime.js.map +1 -1
  132. package/dist/types/TimeSpan.js +0 -1
  133. package/dist/types/TimeSpan.js.map +1 -1
  134. package/package.json +5 -4
  135. package/src/common/EventSet.ts +3 -0
  136. package/src/common/IDisposable.ts +0 -8
  137. package/src/common/Logger.ts +3 -3
  138. package/src/common/ObjectPool.ts +1 -0
  139. package/src/common/usingAsync.ts +7 -1
  140. package/src/drivers/base/BaseDriver.ts +38 -12
  141. package/src/drivers/postgres/PostgreSqlDriver.ts +8 -4
  142. package/src/drivers/sql-server/SqlServerDriver.ts +10 -29
  143. package/src/eternity/EternityContext.ts +51 -56
  144. package/src/model/EntityQuery.ts +4 -10
  145. package/src/model/verification/VerificationSession.ts +5 -9
  146. package/src/query/ast/ExpressionToSql.ts +0 -2
  147. package/src/tests/security/tests/place-order.ts +83 -92
  148. package/src/tests/security/tests/test-events.ts +31 -35
  149. package/tsconfig.json +4 -2
@@ -20,7 +20,6 @@ export default async function(this: TestConfig) {
20
20
  await addNewOrder.call(this, customer, 1);
21
21
  assert.fail("No error thrown");
22
22
  } catch(error) {
23
-
24
23
  }
25
24
 
26
25
  await getNewOrders.call(this);
@@ -31,107 +30,99 @@ export default async function(this: TestConfig) {
31
30
  async function createInterests(this: TestConfig) {
32
31
  const global = new ServiceProvider();
33
32
  global.add(BaseDriver, this.driver);
34
- const scope = global.createScope();
35
- try {
36
- const userID = 2;
37
- const user = new UserInfo();
38
- user.userID = userID;
39
- ServiceCollection.register("Singleton", Logger, () => Logger.instance);
40
- scope.add(BaseDriver, this.driver);
41
- scope.add(UserInfo, user);
42
- ServiceCollection.register("Singleton", ContextEvents, () => new ShoppingContextEvents());
43
- const context = scope.create(ShoppingContext);
44
- context.verifyFilters = false;
45
- context.raiseEvents = false;
46
-
47
- const headPhone = await context.products.all().include((x) => x.categories).firstOrFail();
48
- const category = headPhone.categories[0];
49
-
50
- context.userCategories.add({
51
- userID,
52
- categoryID: category.categoryID,
53
- lastUpdated: DateTime.utcNow
54
- });
55
-
56
- await context.saveChanges();
57
-
58
- const userCategories = await context.userCategories.where({ userID }, (p) => (x) => x.userID === p.userID).count();
59
-
60
- assert.equal(1, userCategories);
61
-
62
- } finally {
63
- scope.dispose();
64
- }
33
+ using scope = global.createScope();
34
+
35
+ const userID = 2;
36
+ const user = new UserInfo();
37
+ user.userID = userID;
38
+ ServiceCollection.register("Singleton", Logger, () => Logger.instance);
39
+ scope.add(BaseDriver, this.driver);
40
+ scope.add(UserInfo, user);
41
+ ServiceCollection.register("Singleton", ContextEvents, () => new ShoppingContextEvents());
42
+ const context = scope.create(ShoppingContext);
43
+ context.verifyFilters = false;
44
+ context.raiseEvents = false;
45
+
46
+ const headPhone = await context.products.all().include((x) => x.categories).firstOrFail();
47
+ const category = headPhone.categories[0];
48
+
49
+ context.userCategories.add({
50
+ userID,
51
+ categoryID: category.categoryID,
52
+ lastUpdated: DateTime.utcNow
53
+ });
54
+
55
+ await context.saveChanges();
56
+
57
+ const userCategories = await context.userCategories.where({ userID }, (p) => (x) => x.userID === p.userID).count();
58
+
59
+ assert.equal(1, userCategories);
60
+
65
61
  }
66
62
 
67
63
  async function getNewOrders(this: TestConfig) {
68
64
  const global = new ServiceProvider();
69
65
  global.add(BaseDriver, this.driver);
70
- const scope = global.createScope();
71
- try {
72
- const user = new UserInfo();
73
- user.userID = 2;
74
- ServiceCollection.register("Singleton", Logger, () => Logger.instance);
75
- scope.add(BaseDriver, this.driver);
76
- scope.add(UserInfo, user);
77
- ServiceCollection.register("Singleton", ContextEvents, () => new ShoppingContextEvents());
78
- const context = scope.create(ShoppingContext);
79
- context.verifyFilters = true;
80
-
81
- const order = await context.orders.all().first();
82
-
83
- order.orderDate = new Date();
84
- await context.saveChanges();
85
-
86
- } finally {
87
- scope.dispose();
88
- }
66
+
67
+ using scope = global.createScope();
68
+
69
+ const user = new UserInfo();
70
+ user.userID = 2;
71
+ ServiceCollection.register("Singleton", Logger, () => Logger.instance);
72
+ scope.add(BaseDriver, this.driver);
73
+ scope.add(UserInfo, user);
74
+ ServiceCollection.register("Singleton", ContextEvents, () => new ShoppingContextEvents());
75
+ const context = scope.create(ShoppingContext);
76
+ context.verifyFilters = true;
77
+
78
+ const order = await context.orders.all().first();
79
+
80
+ order.orderDate = new Date();
81
+ await context.saveChanges();
82
+
89
83
  }
90
84
 
91
85
  async function addNewOrder(this: TestConfig, customer: User, userID?) {
92
86
  const global = new ServiceProvider();
93
87
  global.add(BaseDriver, this.driver);
94
- const scope = global.createScope();
95
- try {
96
- const user = new UserInfo();
97
- user.userID = userID ?? customer.userID;
98
- ServiceCollection.register("Singleton", Logger, () => Logger.instance);
99
- scope.add(BaseDriver, this.driver);
100
- scope.add(UserInfo, user);
101
- ServiceCollection.register("Singleton", ContextEvents, () => new ShoppingContextEvents());
102
- const context = scope.create(ShoppingContext);
103
- context.verifyFilters = true;
104
-
105
- // get first headphone...
106
- const headPhone = await context.products.all().firstOrFail();
107
- const headPhonePrice = await context.productPrices.where({ id: headPhone.productID }, (p) => (x) => x.productID === p.id).firstOrFail();
108
-
109
- context.orders.add({
110
- customer,
111
- orderDate: new Date(),
112
- orderItems: [
113
- context.orderItems.add({
114
- product: headPhone,
115
- productPrice: headPhonePrice,
116
- amount: headPhonePrice.amount,
117
- })
118
- ]
119
- });
120
-
121
- await context.saveChanges();
122
-
123
- // lets filter the orders
124
-
125
- const f = context.orders.filtered();
126
- const myOrders = await f.count();
127
- assert.equal(1, myOrders);
128
-
129
- const all = await context.orders.all().count();
130
- assert.notEqual(all, myOrders);
131
-
132
- } finally {
133
- scope.dispose();
134
- }
88
+
89
+ using scope = global.createScope();
90
+
91
+ const user = new UserInfo();
92
+ user.userID = userID ?? customer.userID;
93
+ ServiceCollection.register("Singleton", Logger, () => Logger.instance);
94
+ scope.add(BaseDriver, this.driver);
95
+ scope.add(UserInfo, user);
96
+ ServiceCollection.register("Singleton", ContextEvents, () => new ShoppingContextEvents());
97
+ const context = scope.create(ShoppingContext);
98
+ context.verifyFilters = true;
99
+
100
+ // get first headphone...
101
+ const headPhone = await context.products.all().firstOrFail();
102
+ const headPhonePrice = await context.productPrices.where({ id: headPhone.productID }, (p) => (x) => x.productID === p.id).firstOrFail();
103
+
104
+ context.orders.add({
105
+ customer,
106
+ orderDate: new Date(),
107
+ orderItems: [
108
+ context.orderItems.add({
109
+ product: headPhone,
110
+ productPrice: headPhonePrice,
111
+ amount: headPhonePrice.amount,
112
+ })
113
+ ]
114
+ });
115
+
116
+ await context.saveChanges();
117
+
118
+ // lets filter the orders
119
+
120
+ const f = context.orders.filtered();
121
+ const myOrders = await f.count();
122
+ assert.equal(1, myOrders);
123
+
124
+ const all = await context.orders.all().count();
125
+ assert.notEqual(all, myOrders);
135
126
  }
136
127
 
137
128
  async function createUser(config: TestConfig) {
@@ -16,40 +16,36 @@ export default async function (this: TestConfig) {
16
16
 
17
17
  const global = new ServiceProvider();
18
18
  global.add(BaseDriver, this.driver);
19
- const scope = global.createScope();
20
-
21
- try {
22
-
23
- const userID = 1;
24
- const user = new UserInfo();
25
- user.userID = userID;
26
- scope.add(Logger, Logger.instance);
27
- scope.add(BaseDriver, this.driver);
28
- scope.add(UserInfo, user);
29
- scope.add(ContextEvents, new ShoppingContextEvents());
30
- const context = scope.create(ShoppingContext);
31
-
32
- const first = await context.products.all().first();
33
- first.name = "First Product";
34
- const fe = context.changeSet.getEntry(first);
35
- await context.saveChanges();
36
-
37
- assert.notStrictEqual(undefined, first.nameUpdated);
38
- assert.equal(true, first.nameUpdated);
39
- assert.equal(false, fe.isUpdated("name"));
40
-
41
- const status = statusPublished;
42
- // create new product...
43
- const p = context.products.add({
44
- name: "A",
45
- status,
46
- ownerID: userID
47
- });
48
- assert.equal(void 0, p.afterInsertInvoked);
49
- await context.saveChanges();
50
- assert.equal(true, p.afterInsertInvoked);
51
- } finally {
52
- scope.dispose();
53
- }
19
+
20
+ using scope = global.createScope();
21
+
22
+ const userID = 1;
23
+ const user = new UserInfo();
24
+ user.userID = userID;
25
+ scope.add(Logger, Logger.instance);
26
+ scope.add(BaseDriver, this.driver);
27
+ scope.add(UserInfo, user);
28
+ scope.add(ContextEvents, new ShoppingContextEvents());
29
+ const context = scope.create(ShoppingContext);
30
+
31
+ const first = await context.products.all().first();
32
+ first.name = "First Product";
33
+ const fe = context.changeSet.getEntry(first);
34
+ await context.saveChanges();
35
+
36
+ assert.notStrictEqual(undefined, first.nameUpdated);
37
+ assert.equal(true, first.nameUpdated);
38
+ assert.equal(false, fe.isUpdated("name"));
39
+
40
+ const status = statusPublished;
41
+ // create new product...
42
+ const p = context.products.add({
43
+ name: "A",
44
+ status,
45
+ ownerID: userID
46
+ });
47
+ assert.equal(void 0, p.afterInsertInvoked);
48
+ await context.saveChanges();
49
+ assert.equal(true, p.afterInsertInvoked);
54
50
 
55
51
  }
package/tsconfig.json CHANGED
@@ -1,17 +1,19 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "target": "ESNext",
3
+ "target": "ES2021",
4
4
  "module":"NodeNext",
5
5
  "incremental": true,
6
6
  "sourceMap": true,
7
7
  "declaration": true,
8
8
  "declarationMap": true,
9
+ "importHelpers": true,
9
10
  "outDir": "dist",
10
11
  "skipDefaultLibCheck": true,
11
12
  "experimentalDecorators": true,
12
13
  "emitDecoratorMetadata": true,
13
14
  "lib": [
14
- "ES2018"
15
+ "ES2018",
16
+ "esnext.disposable"
15
17
  ]
16
18
  },
17
19
  "include": [