jinaga-server 1.1.4 → 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 (84) 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 -4
  39. package/dist/postgres/specification-result-sql.js +34 -24
  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 +2 -0
  50. package/integration-test/jinaga-test/Dockerfile +2 -2
  51. package/integration-test/jinaga-test/jinaga.test.js +3 -3
  52. package/integration-test/jinaga-test/package-lock.json +745 -3484
  53. package/integration-test/jinaga-test/package.json +2 -0
  54. package/integration-test/run.sh +3 -3
  55. package/package.json +5 -6
  56. package/replicator/index.ts +31 -0
  57. package/replicator/package-lock.json +855 -0
  58. package/replicator/package.json +27 -0
  59. package/replicator/tsconfig.json +15 -0
  60. package/src/authentication/authentication-device.ts +11 -1
  61. package/src/authentication/authentication-impl.ts +9 -2
  62. package/src/authentication/authentication-noop.ts +65 -0
  63. package/src/authentication/authentication-session.ts +11 -1
  64. package/src/authentication.ts +12 -2
  65. package/src/authorization/authorization-keystore.ts +12 -7
  66. package/src/debug.ts +30 -0
  67. package/src/http/router.ts +2 -2
  68. package/src/jinaga-server.ts +18 -8
  69. package/src/memory/memory-keystore.ts +0 -6
  70. package/src/postgres/connection.ts +2 -1
  71. package/src/postgres/maps.ts +8 -0
  72. package/src/postgres/postgres-keystore.ts +2 -8
  73. package/src/postgres/postgres-store.ts +37 -30
  74. package/src/postgres/specification-result-sql.ts +56 -45
  75. package/src/postgres/specification-sql.ts +1 -1
  76. package/src/postgres/sql.ts +23 -12
  77. package/src/util/maps.ts +0 -0
  78. package/test/postgres/postgresReadSpec.ts +4 -1
  79. package/test/postgres/postgresSpec.ts +31 -31
  80. package/test/postgres/postgresSpecificationSpec.ts +1 -1
  81. package/tsconfig.json +1 -0
  82. package/tsconfig.test.json +26 -0
  83. package/docs/specification.txt +0 -41
  84. package/interactive/index.js +0 -56
@@ -10,7 +10,7 @@ import {
10
10
  Step,
11
11
  } from "jinaga";
12
12
 
13
- import { addFactType, addRole, emptyFactTypeMap, emptyRoleMap, getFactTypeId, getRoleId } from "../../src/postgres/maps";
13
+ import { addFactType, addRole, emptyFactTypeMap, emptyRoleMap, ensureGetFactTypeId, getFactTypeId, getRoleId } from "../../src/postgres/maps";
14
14
  import { sqlFromSteps } from "../../src/postgres/sql";
15
15
  import { distinct } from "../../src/util/fn";
16
16
 
@@ -24,8 +24,8 @@ describe('Postgres', () => {
24
24
  const factTypes = allFactTypes(query.steps).filter(t => t !== 'Unknown').reduce(
25
25
  (f, factType, i) => addFactType(f, factType, i + 1),
26
26
  emptyFactTypeMap());
27
- let roleMap = allRoles(query.steps, 'Root').filter(r => r.role !== 'unknown').reduce(
28
- (r, role, i) => addRole(r, getFactTypeId(factTypes, role.type), role.role, i + 1),
27
+ let roleMap = allRoles(query.steps, 'Root').filter(r => r.type !== 'Unknown' && r.role !== 'unknown').reduce(
28
+ (r, role, i) => addRole(r, ensureGetFactTypeId(factTypes, role.type), role.role, i + 1),
29
29
  emptyRoleMap());
30
30
  const sqlQuery = sqlFromSteps(start, query.steps, factTypes, roleMap);
31
31
  return sqlQuery ? { sql: sqlQuery.sql, parameters: sqlQuery.parameters, pathLength: sqlQuery.pathLength, empty: sqlQuery.empty, factTypes, roleMap } : null;
@@ -61,7 +61,7 @@ describe('Postgres', () => {
61
61
  );
62
62
  expect(parameters[0]).toEqual(getFactTypeId(factTypes, 'Root'));
63
63
  expect(parameters[1]).toEqual(startHash);
64
- expect(parameters[2]).toEqual(getRoleId(roleMap, getFactTypeId(factTypes, 'IntegrationTest.Successor'), 'predecessor'));
64
+ expect(parameters[2]).toEqual(getRoleId(roleMap, ensureGetFactTypeId(factTypes, 'IntegrationTest.Successor'), 'predecessor'));
65
65
  expect(pathLength).toEqual(1);
66
66
  });
67
67
 
@@ -76,7 +76,7 @@ describe('Postgres', () => {
76
76
  );
77
77
  expect(parameters[0]).toEqual(getFactTypeId(factTypes, 'Root'));
78
78
  expect(parameters[1]).toEqual(startHash);
79
- expect(parameters[2]).toEqual(getRoleId(roleMap, getFactTypeId(factTypes, 'Root'), 'parent'));
79
+ expect(parameters[2]).toEqual(getRoleId(roleMap, ensureGetFactTypeId(factTypes, 'Root'), 'parent'));
80
80
  expect(pathLength).toEqual(1);
81
81
  });
82
82
 
@@ -94,8 +94,8 @@ describe('Postgres', () => {
94
94
  );
95
95
  expect(parameters[0]).toEqual(getFactTypeId(factTypes, 'Root'));
96
96
  expect(parameters[1]).toEqual(startHash);
97
- expect(parameters[2]).toEqual(getRoleId(roleMap, getFactTypeId(factTypes, 'IntegrationTest.Successor'), 'predecessor'));
98
- expect(parameters[3]).toEqual(getRoleId(roleMap, getFactTypeId(factTypes, 'IntegrationTest.Grandchild'), 'successor'));
97
+ expect(parameters[2]).toEqual(getRoleId(roleMap, ensureGetFactTypeId(factTypes, 'IntegrationTest.Successor'), 'predecessor'));
98
+ expect(parameters[3]).toEqual(getRoleId(roleMap, ensureGetFactTypeId(factTypes, 'IntegrationTest.Grandchild'), 'successor'));
99
99
  expect(pathLength).toEqual(1);
100
100
  });
101
101
 
@@ -113,8 +113,8 @@ describe('Postgres', () => {
113
113
  );
114
114
  expect(parameters[0]).toEqual(getFactTypeId(factTypes, 'Root'));
115
115
  expect(parameters[1]).toEqual(startHash);
116
- expect(parameters[2]).toEqual(getRoleId(roleMap, getFactTypeId(factTypes, 'IntegrationTest.Successor'), 'predecessor'));
117
- expect(parameters[3]).toEqual(getRoleId(roleMap, getFactTypeId(factTypes, 'IntegrationTest.Grandchild'), 'successor'));
116
+ expect(parameters[2]).toEqual(getRoleId(roleMap, ensureGetFactTypeId(factTypes, 'IntegrationTest.Successor'), 'predecessor'));
117
+ expect(parameters[3]).toEqual(getRoleId(roleMap, ensureGetFactTypeId(factTypes, 'IntegrationTest.Grandchild'), 'successor'));
118
118
  expect(pathLength).toEqual(1);
119
119
  });
120
120
 
@@ -132,8 +132,8 @@ describe('Postgres', () => {
132
132
  );
133
133
  expect(parameters[0]).toEqual(getFactTypeId(factTypes, 'Root'));
134
134
  expect(parameters[1]).toEqual(startHash);
135
- expect(parameters[2]).toEqual(getRoleId(roleMap, getFactTypeId(factTypes, 'Child'), 'parent'));
136
- expect(parameters[3]).toEqual(getRoleId(roleMap, getFactTypeId(factTypes, 'Child'), 'uncle'));
135
+ expect(parameters[2]).toEqual(getRoleId(roleMap, ensureGetFactTypeId(factTypes, 'Child'), 'parent'));
136
+ expect(parameters[3]).toEqual(getRoleId(roleMap, ensureGetFactTypeId(factTypes, 'Child'), 'uncle'));
137
137
  expect(pathLength).toEqual(1);
138
138
  });
139
139
 
@@ -151,8 +151,8 @@ describe('Postgres', () => {
151
151
  );
152
152
  expect(parameters[0]).toEqual(getFactTypeId(factTypes, 'Root'));
153
153
  expect(parameters[1]).toEqual(startHash);
154
- expect(parameters[2]).toEqual(getRoleId(roleMap, getFactTypeId(factTypes, 'Child'), 'parent'));
155
- expect(parameters[3]).toEqual(getRoleId(roleMap, getFactTypeId(factTypes, 'Child'), 'uncle'));
154
+ expect(parameters[2]).toEqual(getRoleId(roleMap, ensureGetFactTypeId(factTypes, 'Child'), 'parent'));
155
+ expect(parameters[3]).toEqual(getRoleId(roleMap, ensureGetFactTypeId(factTypes, 'Child'), 'uncle'));
156
156
  expect(pathLength).toEqual(1);
157
157
  });
158
158
 
@@ -174,9 +174,9 @@ describe('Postgres', () => {
174
174
  expect(parameters).toEqual([
175
175
  getFactTypeId(factTypes, 'Root'),
176
176
  startHash,
177
- getRoleId(roleMap, getFactTypeId(factTypes, 'Child'), 'parent'),
178
- getRoleId(roleMap, getFactTypeId(factTypes, 'Condition'), 'condition'),
179
- getRoleId(roleMap, getFactTypeId(factTypes, 'Other'), 'other')
177
+ getRoleId(roleMap, ensureGetFactTypeId(factTypes, 'Child'), 'parent'),
178
+ getRoleId(roleMap, ensureGetFactTypeId(factTypes, 'Condition'), 'condition'),
179
+ getRoleId(roleMap, ensureGetFactTypeId(factTypes, 'Other'), 'other')
180
180
  ]);
181
181
  });
182
182
 
@@ -200,10 +200,10 @@ describe('Postgres', () => {
200
200
  expect(parameters).toEqual([
201
201
  getFactTypeId(factTypes, 'Root'),
202
202
  startHash,
203
- getRoleId(roleMap, getFactTypeId(factTypes, 'Identifier'), 'root'),
204
- getRoleId(roleMap, getFactTypeId(factTypes, 'Identifier'), 'prior'),
205
- getRoleId(roleMap, getFactTypeId(factTypes, 'Identifier'), 'identified'),
206
- getRoleId(roleMap, getFactTypeId(factTypes, 'Delete'), 'identified')
203
+ getRoleId(roleMap, ensureGetFactTypeId(factTypes, 'Identifier'), 'root'),
204
+ getRoleId(roleMap, ensureGetFactTypeId(factTypes, 'Identifier'), 'prior'),
205
+ getRoleId(roleMap, ensureGetFactTypeId(factTypes, 'Identifier'), 'identified'),
206
+ getRoleId(roleMap, ensureGetFactTypeId(factTypes, 'Delete'), 'identified')
207
207
  ]);
208
208
  });
209
209
 
@@ -230,10 +230,10 @@ describe('Postgres', () => {
230
230
  expect(parameters).toEqual([
231
231
  getFactTypeId(factTypes, 'Root'),
232
232
  startHash,
233
- getRoleId(roleMap, getFactTypeId(factTypes, 'Assignment'), 'user'),
234
- getRoleId(roleMap, getFactTypeId(factTypes, 'Assignment'), 'project'),
235
- getRoleId(roleMap, getFactTypeId(factTypes, 'Task'), 'project'),
236
- getRoleId(roleMap, getFactTypeId(factTypes, 'Task.Title'), 'task')
233
+ getRoleId(roleMap, ensureGetFactTypeId(factTypes, 'Assignment'), 'user'),
234
+ getRoleId(roleMap, ensureGetFactTypeId(factTypes, 'Assignment'), 'project'),
235
+ getRoleId(roleMap, ensureGetFactTypeId(factTypes, 'Task'), 'project'),
236
+ getRoleId(roleMap, ensureGetFactTypeId(factTypes, 'Task.Title'), 'task')
237
237
  ]);
238
238
  expect(pathLength).toEqual(4);
239
239
  });
@@ -281,7 +281,7 @@ describe('Postgres', () => {
281
281
  expect(parameters).toEqual([
282
282
  getFactTypeId(factTypes, 'Root'),
283
283
  startHash,
284
- getRoleId(roleMap, getFactTypeId(factTypes, 'Assignment'), 'root')
284
+ getRoleId(roleMap, ensureGetFactTypeId(factTypes, 'Assignment'), 'root')
285
285
  ]);
286
286
  });
287
287
 
@@ -298,7 +298,7 @@ describe('Postgres', () => {
298
298
  expect(parameters).toEqual([
299
299
  getFactTypeId(factTypes, 'Root'),
300
300
  startHash,
301
- getRoleId(roleMap, getFactTypeId(factTypes, 'Assignment'), 'root')
301
+ getRoleId(roleMap, ensureGetFactTypeId(factTypes, 'Assignment'), 'root')
302
302
  ]);
303
303
  });
304
304
 
@@ -332,11 +332,11 @@ describe('Postgres', () => {
332
332
  ')' +
333
333
  ')');
334
334
  expect(parameters).toEqual([
335
- getFactTypeId(factTypes, 'Catalog'),
335
+ getFactTypeId(factTypes, 'Root'),
336
336
  startHash,
337
- getRoleId(roleMap, getFactTypeId(factTypes, 'ImprovingU.Idea'), 'catalog'),
338
- getRoleId(roleMap, getFactTypeId(factTypes, 'ImprovingU.Idea.Deletion'), 'idea'),
339
- getRoleId(roleMap, getFactTypeId(factTypes, 'ImprovingU.Idea.Restore'), 'ideaDeletion')
337
+ getRoleId(roleMap, ensureGetFactTypeId(factTypes, 'ImprovingU.Idea'), 'catalog'),
338
+ getRoleId(roleMap, ensureGetFactTypeId(factTypes, 'ImprovingU.Idea.Deletion'), 'idea'),
339
+ getRoleId(roleMap, ensureGetFactTypeId(factTypes, 'ImprovingU.Idea.Restore'), 'ideaDeletion')
340
340
  ]);
341
341
  });
342
342
  });
@@ -348,7 +348,7 @@ function allFactTypes(steps: Step[]): string[] {
348
348
  const childFactTypes = steps
349
349
  .filter(step => step instanceof ExistentialCondition)
350
350
  .flatMap(step => allFactTypes((step as ExistentialCondition).steps));
351
- return [...factTypes, ...childFactTypes].filter(distinct);
351
+ return ["Root", ...factTypes, ...childFactTypes].filter(distinct);
352
352
  }
353
353
 
354
354
  function allRoles(steps: Step[], initialType: string) {
@@ -28,7 +28,7 @@ function sqlFor(descriptiveString: string, bookmarks: string[] = []) {
28
28
  // Filter out the roles named "unknown", and those of unknown fact types.
29
29
  let roleMap = getAllRoles(specification).filter(r => r.name !== 'unknown').reduce(
30
30
  (r, role, i) => {
31
- const factTypeId = getFactTypeId(factTypes, role.definingFactType);
31
+ const factTypeId = getFactTypeId(factTypes, role.successorType);
32
32
  if (!factTypeId) {
33
33
  return r;
34
34
  }
package/tsconfig.json CHANGED
@@ -8,6 +8,7 @@
8
8
  "sourceMap": true,
9
9
  "declaration": true,
10
10
  "outDir": "./dist",
11
+ "strict": true,
11
12
  "forceConsistentCasingInFileNames": true,
12
13
  "skipLibCheck": true,
13
14
  "esModuleInterop": true,
@@ -0,0 +1,26 @@
1
+ {
2
+ "compilerOptions": {
3
+ "module": "commonjs",
4
+ "target": "es6",
5
+ "lib": [ "ES2019" ],
6
+ "noImplicitAny": true,
7
+ "moduleResolution": "node",
8
+ "sourceMap": true,
9
+ "declaration": true,
10
+ "outDir": "./dist",
11
+ "strict": true,
12
+ "forceConsistentCasingInFileNames": true,
13
+ "skipLibCheck": true,
14
+ "esModuleInterop": true,
15
+ "baseUrl": ".",
16
+ "paths": {
17
+ "*": [
18
+ "./node_modules/*",
19
+ "./types/*"
20
+ ]
21
+ }
22
+ },
23
+ "include": [
24
+ "test/**/*.ts"
25
+ ]
26
+ }
@@ -1,41 +0,0 @@
1
- let user: Jinaga.User = me
2
- let semester: ImprovingU.Semester = #Ws6RWV8bWmP7ibBlzwL2UoKKwg6E1iItQPFpX/mvU5u6FLwHJAbRd0SbH+P1hoMn4QndhArLqJqVReRqJdoyBg==
3
-
4
- (semester: ImprovingU.Semester, user: Jinaga.User) {
5
- catalog: ImprovingU.Catalog [
6
- catalog->_in:ImprovingU.Semester = semester
7
- ]
8
- } => {
9
- office = catalog.office
10
- courses = {
11
- course: ImprovingU.Course [
12
- course->_in:ImprovingU.Catalog = catalog
13
- !E {
14
- delete: ImprovingU.Course.Delete [
15
- delete->course:ImprovingU.Course = course
16
- ]
17
- }
18
- ]
19
- } => {
20
- titles = {
21
- title: ImprovingU.Course.Title [
22
- title->course: ImprovingU.Course = course
23
- !E {
24
- next: ImprovingU.Course.Title [
25
- next->prior: ImprovingU.Course.Title = title
26
- ]
27
- }
28
- ]
29
- } => title.value
30
- instructors = {
31
- instructor: ImprovingU.Course.Instructor [
32
- instructor->course: ImprovingU.Course = course
33
- !E {
34
- next: ImprovingU.Course.Instructor [
35
- next->prior: ImprovingU.Course.Instructor = instructor
36
- ]
37
- }
38
- ]
39
- } => instructor.value
40
- }
41
- }
@@ -1,56 +0,0 @@
1
- const { SpecificationParser } = require("../dist/specification/specification-parser");
2
- const { dehydrateFact } = require("../dist/fact/hydrate");
3
- const { PostgresStore } = require("../dist/postgres/postgres-store")
4
- const fs = require("fs");
5
-
6
- var user = {"publicKey":"-----BEGIN RSA PUBLIC KEY-----\nMIGJAoGBAIBsKomutukULWw2zoTW2ECMrM8VmD2xvfpl3R4qh1whzuXV+A4EfRKMb/UAjEfw\n5nBmWvcObGyYUgygKrlNeOhf3MnDj706rej6ln9cKGL++ZNsJgJsogaAtmkPihWVGi908fdP\nLQrWTF5be0b/ZP258Zs3CTpcRTpTvhzS5TC1AgMBAAE=\n-----END RSA PUBLIC KEY-----\n","type":"Jinaga.User"};
7
-
8
- async function run() {
9
- try {
10
- var postgresStore = new PostgresStore("postgresql://dev:devpw@localhost:5432/improvingu");
11
- try {
12
- var input = fs.readFileSync(0, 'utf-8');
13
- const parser = new SpecificationParser(input);
14
- parser.skipWhitespace();
15
- const userRecord = dehydrateFact(user)[0];
16
- const knownFacts = {
17
- me: {
18
- fact: userRecord,
19
- reference: {
20
- type: userRecord.type,
21
- hash: userRecord.hash
22
- }
23
- }
24
- };
25
- var declaration = parser.parseDeclaration(knownFacts);
26
- var specification = parser.parseSpecification();
27
-
28
- // Select starting facts that match the inputs
29
- const start = specification.given.map(input => {
30
- const fact = declaration[input.name];
31
- if (!fact) {
32
- throw new Error(`No fact named ${input.name} was declared`);
33
- }
34
- return fact.reference;
35
- });
36
-
37
- const args = process.argv.slice(2);
38
- const produceResults = args.includes("--results");
39
- if (produceResults) {
40
- const results = await postgresStore.resultsFromSpecification(start, specification);
41
- console.log(JSON.stringify(results, null, 2));
42
- }
43
- else {
44
- const streams = await postgresStore.streamsFromSpecification(start, [], 3, specification);
45
- console.log(JSON.stringify(streams, null, 2));
46
- }
47
- }
48
- finally {
49
- postgresStore.close();
50
- }
51
- } catch (e) {
52
- console.error(e);
53
- }
54
- }
55
-
56
- run();