jinaga-server 1.1.3 → 2.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.
Files changed (89) hide show
  1. package/README.md +12 -0
  2. package/dist/authentication/authentication-device.d.ts +3 -2
  3. package/dist/authentication/authentication-device.js +6 -0
  4. package/dist/authentication/authentication-device.js.map +1 -1
  5. package/dist/authentication/authentication-impl.d.ts +3 -2
  6. package/dist/authentication/authentication-impl.js +6 -0
  7. package/dist/authentication/authentication-impl.js.map +1 -1
  8. package/dist/authentication/authentication-noop.d.ts +20 -0
  9. package/dist/authentication/authentication-noop.js +52 -0
  10. package/dist/authentication/authentication-noop.js.map +1 -0
  11. package/dist/authentication/authentication-session.d.ts +3 -2
  12. package/dist/authentication/authentication-session.js +6 -0
  13. package/dist/authentication/authentication-session.js.map +1 -1
  14. package/dist/authentication.d.ts +3 -2
  15. package/dist/authentication.js +6 -0
  16. package/dist/authentication.js.map +1 -1
  17. package/dist/authorization/authorization-keystore.d.ts +3 -4
  18. package/dist/authorization/authorization-keystore.js +9 -4
  19. package/dist/authorization/authorization-keystore.js.map +1 -1
  20. package/dist/debug.d.ts +1 -0
  21. package/dist/debug.js +30 -0
  22. package/dist/debug.js.map +1 -0
  23. package/dist/http/router.js.map +1 -1
  24. package/dist/jinaga-server.js +15 -7
  25. package/dist/jinaga-server.js.map +1 -1
  26. package/dist/memory/memory-keystore.js +0 -6
  27. package/dist/memory/memory-keystore.js.map +1 -1
  28. package/dist/postgres/connection.js +1 -0
  29. package/dist/postgres/connection.js.map +1 -1
  30. package/dist/postgres/maps.d.ts +7 -6
  31. package/dist/postgres/maps.js +9 -1
  32. package/dist/postgres/maps.js.map +1 -1
  33. package/dist/postgres/postgres-keystore.js +0 -6
  34. package/dist/postgres/postgres-keystore.js.map +1 -1
  35. package/dist/postgres/postgres-store.d.ts +1 -2
  36. package/dist/postgres/postgres-store.js +29 -24
  37. package/dist/postgres/postgres-store.js.map +1 -1
  38. package/dist/postgres/specification-result-sql.d.ts +4 -5
  39. package/dist/postgres/specification-result-sql.js +139 -112
  40. package/dist/postgres/specification-result-sql.js.map +1 -1
  41. package/dist/postgres/specification-sql.js.map +1 -1
  42. package/dist/postgres/sql.d.ts +1 -1
  43. package/dist/postgres/sql.js +15 -7
  44. package/dist/postgres/sql.js.map +1 -1
  45. package/dist/util/maps.d.ts +0 -0
  46. package/dist/util/maps.js +2 -0
  47. package/dist/util/maps.js.map +1 -0
  48. package/docs/sql/SQL Generator (projection).png +0 -0
  49. package/docs/sql/SQLFromSpecification.md +396 -0
  50. package/docs/sql/example.sql +49 -0
  51. package/docs/sql/first-path.gv +9 -0
  52. package/docs/sql/first-path.png +0 -0
  53. package/docs/sql/model.gv +20 -0
  54. package/docs/sql/model.png +0 -0
  55. package/integration-test/jinaga-test/Dockerfile +2 -2
  56. package/integration-test/jinaga-test/jinaga.test.js +3 -3
  57. package/integration-test/jinaga-test/package-lock.json +745 -3484
  58. package/integration-test/jinaga-test/package.json +2 -0
  59. package/integration-test/run.sh +3 -3
  60. package/package.json +5 -6
  61. package/replicator/index.ts +31 -0
  62. package/replicator/package-lock.json +855 -0
  63. package/replicator/package.json +27 -0
  64. package/replicator/tsconfig.json +15 -0
  65. package/src/authentication/authentication-device.ts +11 -1
  66. package/src/authentication/authentication-impl.ts +9 -2
  67. package/src/authentication/authentication-noop.ts +65 -0
  68. package/src/authentication/authentication-session.ts +11 -1
  69. package/src/authentication.ts +12 -2
  70. package/src/authorization/authorization-keystore.ts +12 -7
  71. package/src/debug.ts +30 -0
  72. package/src/http/router.ts +2 -2
  73. package/src/jinaga-server.ts +18 -8
  74. package/src/memory/memory-keystore.ts +0 -6
  75. package/src/postgres/connection.ts +2 -1
  76. package/src/postgres/maps.ts +8 -0
  77. package/src/postgres/postgres-keystore.ts +2 -8
  78. package/src/postgres/postgres-store.ts +37 -30
  79. package/src/postgres/specification-result-sql.ts +200 -145
  80. package/src/postgres/specification-sql.ts +1 -1
  81. package/src/postgres/sql.ts +23 -12
  82. package/src/util/maps.ts +0 -0
  83. package/test/postgres/postgresReadSpec.ts +292 -0
  84. package/test/postgres/postgresSpec.ts +31 -31
  85. package/test/postgres/postgresSpecificationSpec.ts +1 -1
  86. package/tsconfig.json +1 -0
  87. package/tsconfig.test.json +26 -0
  88. package/docs/specification.txt +0 -41
  89. package/interactive/index.js +0 -56
@@ -27,7 +27,7 @@ class QueryBuilder {
27
27
  if (steps.length === 0) {
28
28
  return null;
29
29
  }
30
- const startTypeId = (0, maps_1.getFactTypeId)(this.factTypes, start.type);
30
+ const startTypeId = (0, maps_1.ensureGetFactTypeId)(this.factTypes, start.type);
31
31
  const startState = {
32
32
  state: 'start',
33
33
  typeId: startTypeId,
@@ -62,6 +62,11 @@ class QueryBuilder {
62
62
  };
63
63
  }
64
64
  buildJoins(joins, priorFactId) {
65
+ ;
66
+ const initialJoins = {
67
+ priorFactId,
68
+ clauses: []
69
+ };
65
70
  const clauses = joins.reduce((joins, join) => {
66
71
  if (join.table === 'edge') {
67
72
  if (join.direction === 'successor') {
@@ -90,10 +95,7 @@ class QueryBuilder {
90
95
  clauses: [...joins.clauses, clause]
91
96
  };
92
97
  }
93
- }, {
94
- priorFactId,
95
- clauses: []
96
- }).clauses;
98
+ }, initialJoins).clauses;
97
99
  return clauses.join('');
98
100
  }
99
101
  buildWhereClause(existentialClauses) {
@@ -191,12 +193,15 @@ class QueryBuilder {
191
193
  position: `${state.typeName}.${step.role}`
192
194
  };
193
195
  }
194
- if (step.direction === jinaga_1.Direction.Successor) {
196
+ else if (step.direction === jinaga_1.Direction.Successor) {
195
197
  return {
196
198
  state: 'successor-join',
197
199
  role: step.role
198
200
  };
199
201
  }
202
+ else {
203
+ throw new Error(`Unknown direction ${step.direction}`);
204
+ }
200
205
  }
201
206
  else if (step instanceof jinaga_1.ExistentialCondition) {
202
207
  return this.pushExistentialCondition(state.typeId, state.typeName, state, step);
@@ -231,13 +236,16 @@ class QueryBuilder {
231
236
  position: `${state.typeName}.${step.role}`
232
237
  };
233
238
  }
234
- if (step.direction === jinaga_1.Direction.Successor) {
239
+ else if (step.direction === jinaga_1.Direction.Successor) {
235
240
  this.emitFact(state.typeName);
236
241
  return {
237
242
  state: 'successor-join',
238
243
  role: step.role
239
244
  };
240
245
  }
246
+ else {
247
+ throw new Error(`Unknown direction ${step.direction}`);
248
+ }
241
249
  }
242
250
  else if (step instanceof jinaga_1.ExistentialCondition) {
243
251
  return this.pushExistentialCondition(state.typeId, state.typeName, state, step);
@@ -1 +1 @@
1
- {"version":3,"file":"sql.js","sourceRoot":"","sources":["../../src/postgres/sql.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sql.js","sourceRoot":"","sources":["../../src/postgres/sql.ts"],"names":[],"mappings":"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"}
File without changes
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=maps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maps.js","sourceRoot":"","sources":["../../src/util/maps.ts"],"names":[],"mappings":""}
@@ -0,0 +1,396 @@
1
+ There are two ways to generate SQL from a Jinaga specification.
2
+ One is used to populate feeds.
3
+ The other is used to project current state.
4
+ The goals are different enough to warrant separate code paths.
5
+
6
+ In this walkthrough, we will be using a complex specification that demonstrates all of the features of the language:
7
+
8
+ ```
9
+ (company: Company, user: Jinaga.User) {
10
+ project: Project [
11
+ project->department: Department->company: Company = company
12
+ !E {
13
+ deleted: Project.Deleted [
14
+ deleted->project: Project = project
15
+ !E {
16
+ restored: Project.Restored [
17
+ restored->deleted: Project.Deleted = deleted
18
+ ]
19
+ }
20
+ ]
21
+ }
22
+ E {
23
+ assignment: Project.Assignment [
24
+ assignment->project: Project = project
25
+ assignment->user: Jinaga.User = user
26
+ !E {
27
+ revoked: Project.Assignment.Revoked [
28
+ revoked->assignment: Project.Assignment = assignment
29
+ ]
30
+ }
31
+ ]
32
+ }
33
+ ]
34
+ deliverable: Deliverable [
35
+ deliverable->project: Project = project
36
+ ]
37
+ } => {
38
+ assignedTasks = {
39
+ task: Task [
40
+ task->deliverable: Deliverable = deliverable
41
+ E {
42
+ assignment: Task.Assignment [
43
+ assignment->task: Task = task
44
+ assignment->user: Jinaga.User = user
45
+ ]
46
+ }
47
+ ]
48
+ } => {
49
+ number = task.number
50
+ }
51
+ }
52
+ ```
53
+
54
+ The model for this specification looks like this:
55
+
56
+ ![Model](model.png)
57
+
58
+ The blue facts are givens.
59
+ The thick black facts are the top-level unknowns.
60
+
61
+ ## Projecting Current State
62
+
63
+ Jinaga projects current state when executing `j.query` or `j.watch`.
64
+ When `j.query` is called, it first fetches feeds from the remote replicator.
65
+ Then it projects the current state from the local database.
66
+ When `j.watch` is called, it does the same two operations in the opposite order.
67
+ It projects the current state first, and then modifies current state as it fetches from the replicator.
68
+
69
+ In either case, the current state is not concerned with the entire history.
70
+ It only accounts for facts that match the specification at the moment of execution.
71
+
72
+ The operation begins in [`postgres-store`](../../src/postgres/postgres-store.ts), `read`.
73
+ It first loads all of the fact type IDs and role IDs represented in the specification.
74
+ Not all of them might be present in the database.
75
+ Perhaps the specification includes types of facts that have never been created locally.
76
+ As we'll see later, missing fact type IDs and role IDs make a portion of the SQL query unsatisfiable.
77
+
78
+ The operation is then broken into three steps.
79
+ First it produces a tree of `ResultComposer`s, each of which has a SQL query and a mechanism for composing the projection objects.
80
+ Then it executes the SQL in the tree, producing a `ResultSetTree`.
81
+ Finally, the `ResultComposer`s compose that tree into an array of projections.
82
+
83
+ ![Class structure](./SQL%20Generator%20(projection).png)
84
+
85
+ ### Generate SQL for a ResultComposer
86
+
87
+ The tree of `ResultComposer` objects mirrors the tree of specifications inside of projections.
88
+ The top-most specification has a projection with named elements.
89
+ If that element is a child specification, then it gets it's own child `ResultComposer`.
90
+ The composers match their results to their parent based on a list of fact IDs.
91
+
92
+ The tree is constructed in [`specification-result-sql`](../../src/postgres/specification-result-sql.ts), starting in the `resultSqlFromSpecification` function.
93
+ It uses `ResultDescriptionBuilder.buildDescription` to walk the specification.
94
+
95
+ It first creates an empty `QueryDescription`.
96
+ This is an immutable data structure.
97
+ As the builder visits parts of the specification, it will operate on the query description to create new, more complete query descriptions.
98
+
99
+ Next, the result description builder adds edges to the result description.
100
+ It calls `addEdges`, which walks the matches and conditions.
101
+ Conditions are either path conditions or existential conditions
102
+
103
+ #### Path conditions
104
+
105
+ A path condition connects an unknown on the left to a previously defined label on the right.
106
+ For each path condition, the builder calls `addPathCondition`.
107
+ The function first evaluates the label on the right.
108
+ If this represents a given that has not yet been added, it adds the input now.
109
+
110
+ In this example, the first path connects the unknown `project` to the given `company`.
111
+ It makes up just this part of the model:
112
+
113
+ ![First path](first-path.png)
114
+
115
+ The lavel `company` refers to a given that has not yet been added.
116
+ It therefore allocates the fact, input, and parameter, producing the following `QueryDescription`:
117
+
118
+ ```json
119
+ {
120
+ "inputs": [
121
+ {
122
+ "label": "company",
123
+ "factIndex": 1,
124
+ "factTypeParameter": 1,
125
+ "factHashParameter": 2
126
+ }
127
+ ],
128
+ "parameters": [
129
+ 1,
130
+ "fSS1hK7OGAeSX4ocN3acuFF87jvzCdPN3vLFUtcej0lOAsVV859UIYZLRcHUoMbyd/J31TdVn5QuE7094oqUPg=="
131
+ ],
132
+ "outputs": [],
133
+ "facts": [
134
+ {
135
+ "factIndex": 1,
136
+ "type": "Company"
137
+ }
138
+ ],
139
+ "edges": [],
140
+ "existentialConditions": []
141
+ }
142
+ ```
143
+
144
+ It then identifies the type and index of the right-hand label.
145
+ In this case, the type is "Company" and the index is 1.
146
+ Then, it walks up the predecessor roles on the right, adding edges as it goes.
147
+ In this case, there are no roles, so it adds no edges on this pass.
148
+
149
+ After walking up the right-hand side, the builder starts from the unknown and walks up the left-hand-side.
150
+ It records this walk so that it can reverse it to add edges.
151
+ The joins need to continue from where the right and left sides meet, and proceed backward toward the unknown.
152
+
153
+ In this case, the left-hand-side of the path condition is `project->department: Department->company: Company`.
154
+ The edges produced are:
155
+
156
+ ```json
157
+ [
158
+ {
159
+ "roleId": 1,
160
+ "declaringType": "Project"
161
+ },
162
+ {
163
+ "roleId": 2,
164
+ "declaringType": "Department"
165
+ }
166
+ ]
167
+ ```
168
+
169
+ It reverses that array of edges, then adds them to the query description.
170
+ For each one, it allocates a parameter for the role ID.
171
+ Then it allocates a new fact index if necessary, and then a new edge.
172
+
173
+ When it has finished with the edges, it adds the unknown as an output.
174
+ At this point, the example query description looks like this:
175
+
176
+ ```json
177
+ {
178
+ "inputs": [
179
+ {
180
+ "label": "company",
181
+ "factIndex": 1,
182
+ "factTypeParameter": 1,
183
+ "factHashParameter": 2
184
+ }
185
+ ],
186
+ "parameters": [
187
+ 1,
188
+ "fSS1hK7OGAeSX4ocN3acuFF87jvzCdPN3vLFUtcej0lOAsVV859UIYZLRcHUoMbyd/J31TdVn5QuE7094oqUPg==",
189
+ 2,
190
+ 1
191
+ ],
192
+ "outputs": [
193
+ {
194
+ "label": "project",
195
+ "type": "Project",
196
+ "factIndex": 3
197
+ }
198
+ ],
199
+ "facts": [
200
+ {
201
+ "factIndex": 1,
202
+ "type": "Company"
203
+ },
204
+ {
205
+ "factIndex": 2,
206
+ "type": "Department"
207
+ },
208
+ {
209
+ "factIndex": 3,
210
+ "type": "Project"
211
+ }
212
+ ],
213
+ "edges": [
214
+ {
215
+ "edgeIndex": 1,
216
+ "predecessorFactIndex": 1,
217
+ "successorFactIndex": 2,
218
+ "roleParameter": 3
219
+ },
220
+ {
221
+ "edgeIndex": 2,
222
+ "predecessorFactIndex": 2,
223
+ "successorFactIndex": 3,
224
+ "roleParameter": 4
225
+ }
226
+ ],
227
+ "existentialConditions": []
228
+ }
229
+ ```
230
+
231
+ This corresponds to the following SQL:
232
+
233
+ ```sql
234
+ SELECT f3.hash AS hash3, f3.fact_id AS id3, f3.data AS data3
235
+ FROM public.fact f1 -- company
236
+ JOIN public.edge e1 -- department->company
237
+ ON e1.predecessor_fact_id = f1.fact_id
238
+ AND e1.role_id = $3
239
+ JOIN public.fact f2 -- department
240
+ ON f2.fact_id = e1.successor_fact_id
241
+ JOIN public.edge e2 -- project->department
242
+ ON e2.predecessor_fact_id = f2.fact_id
243
+ AND e2.role_id = $4
244
+ JOIN public.fact f3 -- project
245
+ ON f3.fact_id = e2.successor_fact_id
246
+ WHERE f1.fact_type_id = $1
247
+ AND f1.hash = $2
248
+ ORDER BY f3.fact_id ASC
249
+ ```
250
+
251
+ #### Existential conditions
252
+
253
+ When the builder encounters an existential condition, it produces a WHERE NOT EXISTS clause.
254
+ It recursively constructs a query description for that sub select.
255
+
256
+ The way that it builds the existential condition is a little interesting.
257
+ It adds the existential condition to the query description, and then records the path to the one that it is working on.
258
+ This first existential condition is at index 0 of the top-level query description, so it is at path `[ 0 ]`.
259
+ When we get to the existential condition *inside* of this one, it will have path `[ 0, 0 ]`.
260
+
261
+ The reason for building the query definitions this way is that the parameters and facts all exist only at the top level.
262
+ We need one consistent set of indexes so that every alias in the SQL query is distinct.
263
+ We also need one consistent set of parameters to pass to the query.
264
+
265
+ By the time the builder has finished adding the edges for the existential condition, the query definition looks like this:
266
+
267
+ ```json
268
+ {
269
+ "inputs": [
270
+ {
271
+ "label": "company",
272
+ "factIndex": 1,
273
+ "factTypeParameter": 1,
274
+ "factHashParameter": 2
275
+ }
276
+ ],
277
+ "parameters": [
278
+ 1,
279
+ "fSS1hK7OGAeSX4ocN3acuFF87jvzCdPN3vLFUtcej0lOAsVV859UIYZLRcHUoMbyd/J31TdVn5QuE7094oqUPg==",
280
+ 2,
281
+ 1,
282
+ 3,
283
+ 4
284
+ ],
285
+ "outputs": [
286
+ {
287
+ "label": "project",
288
+ "type": "Project",
289
+ "factIndex": 3
290
+ }
291
+ ],
292
+ "facts": [
293
+ {
294
+ "factIndex": 1,
295
+ "type": "Company"
296
+ },
297
+ {
298
+ "factIndex": 2,
299
+ "type": "Department"
300
+ },
301
+ {
302
+ "factIndex": 3,
303
+ "type": "Project"
304
+ },
305
+ {
306
+ "factIndex": 4,
307
+ "type": "Project.Deleted"
308
+ },
309
+ {
310
+ "factIndex": 5,
311
+ "type": "Project.Restored"
312
+ }
313
+ ],
314
+ "edges": [
315
+ {
316
+ "edgeIndex": 1,
317
+ "predecessorFactIndex": 1,
318
+ "successorFactIndex": 2,
319
+ "roleParameter": 3
320
+ },
321
+ {
322
+ "edgeIndex": 2,
323
+ "predecessorFactIndex": 2,
324
+ "successorFactIndex": 3,
325
+ "roleParameter": 4
326
+ }
327
+ ],
328
+ "existentialConditions": [
329
+ {
330
+ "exists": false,
331
+ "inputs": [],
332
+ "edges": [
333
+ {
334
+ "edgeIndex": 3,
335
+ "predecessorFactIndex": 3,
336
+ "successorFactIndex": 4,
337
+ "roleParameter": 5
338
+ }
339
+ ],
340
+ "existentialConditions": [
341
+ {
342
+ "exists": false,
343
+ "inputs": [],
344
+ "edges": [
345
+ {
346
+ "edgeIndex": 4,
347
+ "predecessorFactIndex": 4,
348
+ "successorFactIndex": 5,
349
+ "roleParameter": 6
350
+ }
351
+ ],
352
+ "existentialConditions": []
353
+ }
354
+ ]
355
+ }
356
+ ]
357
+ }
358
+ ```
359
+
360
+ This corresponds to the following SQL:
361
+
362
+ ```sql
363
+ SELECT f3.hash AS hash3, f3.fact_id AS id3, f3.data AS data3
364
+ FROM public.fact f1 -- company
365
+ JOIN public.edge e1 -- department->company
366
+ ON e1.predecessor_fact_id = f1.fact_id
367
+ AND e1.role_id = $3
368
+ JOIN public.fact f2 -- department
369
+ ON f2.fact_id = e1.successor_fact_id
370
+ JOIN public.edge e2 -- project->department
371
+ ON e2.predecessor_fact_id = f2.fact_id
372
+ AND e2.role_id = $4
373
+ JOIN public.fact f3 -- project
374
+ ON f3.fact_id = e2.successor_fact_id
375
+ WHERE f1.fact_type_id = $1
376
+ AND f1.hash = $2
377
+ AND NOT EXISTS (
378
+ SELECT 1
379
+ FROM public.edge e3 -- deleted->project
380
+ JOIN public.fact f4 -- deleted
381
+ ON f4.fact_id = e3.successor_fact_id
382
+ WHERE e3.predecessor_fact_id = f3.fact_id
383
+ AND e3.role_id = $5
384
+ AND NOT EXISTS (
385
+ SELECT 1
386
+ FROM public.edge e4 -- restored->deleted
387
+ JOIN public.fact f5 -- restored
388
+ ON f5.fact_id = e4.successor_fact_id
389
+ WHERE e4.predecessor_fact_id = f4.fact_id
390
+ AND e4.role_id = $6
391
+ )
392
+ )
393
+ ORDER BY f3.fact_id ASC
394
+ ```
395
+
396
+ ### Compose projection
@@ -0,0 +1,49 @@
1
+ SELECT f4.hash AS hash4, f4.fact_id AS id4, f4.data AS data4
2
+ , f7.hash AS hash7, f7.fact_id AS id7, f7.data AS data7
3
+ , f9.hash AS hash9, f9.fact_id AS id9, f9.data AS data9
4
+ FROM public.fact f1
5
+ JOIN public.edge e1
6
+ ON e1.predecessor_fact_id = f1.fact_id
7
+ AND e1.role_id = $3
8
+ JOIN public.fact f3
9
+ ON f3.fact_id = e1.successor_fact_id
10
+ JOIN public.edge e2
11
+ ON e2.predecessor_fact_id = f3.fact_id
12
+ AND e2.role_id = $4
13
+ JOIN public.fact f4
14
+ ON f4.fact_id = e2.successor_fact_id
15
+ JOIN public.edge e5
16
+ ON e5.predecessor_fact_id = f4.fact_id
17
+ AND e5.role_id = $7
18
+ JOIN public.fact f7
19
+ ON f7.fact_id = e5.successor_fact_id
20
+ JOIN public.edge e6
21
+ ON e6.successor_fact_id = f7.fact_id
22
+ AND e6.role_id = $10
23
+ JOIN public.fact f2
24
+ ON f2.fact_id = e6.predecessor_fact_id
25
+ JOIN public.edge e8
26
+ ON e8.predecessor_fact_id = f4.fact_id
27
+ AND e8.role_id = $12
28
+ JOIN public.fact f9
29
+ ON f9.fact_id = e8.successor_fact_id
30
+ WHERE 1=1
31
+ AND f1.fact_type_id = $1
32
+ AND f1.hash = $2
33
+ AND f2.fact_type_id = $8
34
+ AND f2.hash = $9
35
+ AND NOT EXISTS (SELECT 1
36
+ FROM public.edge e3
37
+ JOIN public.fact f5
38
+ ON f5.fact_id = e3.successor_fact_id
39
+ WHERE 1=1
40
+ AND e3.predecessor_fact_id = f4.fact_id
41
+ AND e3.role_id = $5)
42
+ AND NOT EXISTS (SELECT 1
43
+ FROM public.edge e7
44
+ JOIN public.fact f8
45
+ ON f8.fact_id = e7.successor_fact_id
46
+ WHERE 1=1
47
+ AND e7.predecessor_fact_id = f7.fact_id
48
+ AND e7.role_id = $11)
49
+ ORDER BY f4.fact_id ASC, f7.fact_id ASC, f9.fact_id ASC
@@ -0,0 +1,9 @@
1
+ digraph {
2
+ rankdir=BT
3
+
4
+ Project -> Department -> Company [penwidth=2]
5
+
6
+ Company [penwidth=2, color=blue]
7
+
8
+ Project [penwidth=2]
9
+ }
Binary file
@@ -0,0 +1,20 @@
1
+ digraph {
2
+ rankdir=BT
3
+
4
+ Project -> Department -> Company [penwidth=2]
5
+ "Project.Assignment.Revoked" -> "Project.Assignment"
6
+ "Project.Assignment" -> Project
7
+ "Project.Assignment" -> "Jinaga.User"
8
+ "Project.Deleted" -> Project
9
+ "Project.Restored" -> "Project.Deleted"
10
+ Deliverable -> Project [penwidth=2]
11
+ Task -> Deliverable
12
+ "Task.Assigned" -> Task
13
+ "Task.Assigned" -> "Jinaga.User"
14
+
15
+ Company [penwidth=2, color=blue]
16
+ "Jinaga.User" [penwidth=2, color=blue]
17
+
18
+ Project [penwidth=2]
19
+ Deliverable [penwidth=2]
20
+ }
Binary file
@@ -4,9 +4,9 @@ WORKDIR /root
4
4
 
5
5
  COPY package.json .
6
6
  COPY package-lock.json .
7
- RUN npm install
7
+ RUN npm ci
8
8
 
9
- COPY jinaga/ jinaga/
9
+ COPY jinaga-server/ jinaga-server/
10
10
  COPY jinaga.test.js .
11
11
 
12
12
  ENTRYPOINT [ "npm", "test" ]
@@ -1,6 +1,6 @@
1
- import { encode } from "@stablelib/base64";
2
-
3
- import { ensure, Jinaga, JinagaServer } from "./jinaga";
1
+ const { encode } = require("@stablelib/base64");
2
+ const { ensure, Jinaga } = require("jinaga");
3
+ const { JinagaServer } = require("./jinaga-server");
4
4
 
5
5
  const host = "db";
6
6
  // const host = "localhost";