occam-furtle 2.0.342 → 3.0.2

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 (116) hide show
  1. package/example.js +5905 -1786
  2. package/lib/context/block.js +81 -41
  3. package/lib/context/file/furtle.js +260 -0
  4. package/lib/context/file/nominal.js +956 -0
  5. package/lib/context/file.js +146 -271
  6. package/lib/context.js +210 -0
  7. package/lib/element/assignment/array.js +116 -14
  8. package/lib/element/assignment/object.js +116 -14
  9. package/lib/element/assignment/variable.js +121 -14
  10. package/lib/element/assignments/variable.js +120 -13
  11. package/lib/element/declaration/procedure.js +120 -12
  12. package/lib/element/error.js +118 -13
  13. package/lib/element/every.js +116 -13
  14. package/lib/element/expression.js +127 -20
  15. package/lib/element/label.js +119 -12
  16. package/lib/element/nodeQuery.js +116 -14
  17. package/lib/element/nodesQuery.js +116 -14
  18. package/lib/element/parameter/named.js +117 -15
  19. package/lib/element/parameter.js +116 -14
  20. package/lib/element/parameters/named.js +116 -14
  21. package/lib/element/parameters.js +115 -13
  22. package/lib/element/primitive.js +115 -13
  23. package/lib/element/procedure/anonymous.js +118 -16
  24. package/lib/element/procedure.js +118 -16
  25. package/lib/element/procedureCall.js +116 -14
  26. package/lib/element/reduce.js +116 -14
  27. package/lib/element/reference.js +119 -12
  28. package/lib/element/returnBlock.js +116 -14
  29. package/lib/element/some.js +115 -13
  30. package/lib/element/statement/return.js +120 -13
  31. package/lib/element/step.js +121 -14
  32. package/lib/element/term/bracketed.js +120 -13
  33. package/lib/element/term/comparison.js +117 -15
  34. package/lib/element/term/logical.js +118 -16
  35. package/lib/element/term/negated.js +116 -14
  36. package/lib/element/term.js +127 -18
  37. package/lib/element/terms.js +125 -14
  38. package/lib/element/ternary.js +117 -15
  39. package/lib/element/variable.js +127 -19
  40. package/lib/element.js +1 -8
  41. package/lib/index.js +5 -5
  42. package/lib/log.js +13 -12
  43. package/lib/metaTypeNames.js +26 -0
  44. package/lib/metaTypes.js +66 -0
  45. package/lib/nodeProperties.js +17 -21
  46. package/lib/nodeProperty.js +4 -7
  47. package/lib/utilities/context.js +8 -37
  48. package/lib/utilities/customGrammar.js +49 -0
  49. package/lib/utilities/element.js +91 -37
  50. package/lib/utilities/lineIndex.js +26 -0
  51. package/lib/utilities/node.js +1 -8
  52. package/lib/utilities/primitive.js +14 -5
  53. package/lib/utilities/string.js +30 -19
  54. package/lib/utilities/term.js +14 -5
  55. package/lib/utilities/terms.js +7 -3
  56. package/package.json +2 -2
  57. package/src/context/block.js +20 -32
  58. package/src/context/file/furtle.js +141 -0
  59. package/src/context/file/nominal.js +946 -0
  60. package/src/context/file.js +32 -209
  61. package/src/context.js +74 -0
  62. package/src/element/assignment/array.js +6 -8
  63. package/src/element/assignment/object.js +6 -8
  64. package/src/element/assignment/variable.js +7 -8
  65. package/src/element/assignments/variable.js +7 -8
  66. package/src/element/declaration/procedure.js +6 -6
  67. package/src/element/error.js +4 -6
  68. package/src/element/every.js +5 -6
  69. package/src/element/expression.js +6 -7
  70. package/src/element/label.js +6 -7
  71. package/src/element/nodeQuery.js +6 -8
  72. package/src/element/nodesQuery.js +6 -8
  73. package/src/element/parameter/named.js +7 -8
  74. package/src/element/parameter.js +6 -8
  75. package/src/element/parameters/named.js +8 -9
  76. package/src/element/parameters.js +6 -8
  77. package/src/element/primitive.js +5 -7
  78. package/src/element/procedure/anonymous.js +7 -9
  79. package/src/element/procedure.js +6 -8
  80. package/src/element/procedureCall.js +6 -8
  81. package/src/element/reduce.js +5 -7
  82. package/src/element/reference.js +6 -7
  83. package/src/element/returnBlock.js +5 -7
  84. package/src/element/some.js +5 -7
  85. package/src/element/statement/return.js +7 -8
  86. package/src/element/step.js +6 -7
  87. package/src/element/term/bracketed.js +7 -8
  88. package/src/element/term/comparison.js +6 -8
  89. package/src/element/term/logical.js +6 -8
  90. package/src/element/term/negated.js +6 -8
  91. package/src/element/term.js +12 -9
  92. package/src/element/terms.js +16 -9
  93. package/src/element/ternary.js +6 -8
  94. package/src/element/variable.js +24 -14
  95. package/src/element.js +0 -8
  96. package/src/index.js +1 -1
  97. package/src/log.js +11 -11
  98. package/src/metaTypeNames.js +5 -0
  99. package/src/metaTypes.js +71 -0
  100. package/src/nodeProperties.js +23 -32
  101. package/src/nodeProperty.js +5 -10
  102. package/src/utilities/context.js +7 -45
  103. package/src/utilities/customGrammar.js +40 -0
  104. package/src/utilities/element.js +158 -64
  105. package/src/utilities/lineIndex.js +21 -0
  106. package/src/utilities/node.js +0 -5
  107. package/src/utilities/primitive.js +22 -5
  108. package/src/utilities/string.js +33 -19
  109. package/src/utilities/term.js +22 -5
  110. package/src/utilities/terms.js +12 -4
  111. package/test/context/release.js +477 -46
  112. package/test/helpers/furtle.js +1 -1
  113. package/test/helpers/nominal.js +2 -3
  114. package/test/main.js +1 -1
  115. package/test/context/file.js +0 -127
  116. package/test/helpers/constants.js +0 -17
@@ -8,8 +8,13 @@ export function termFromNode(node, context) {
8
8
  const { Term } = elements,
9
9
  variable = null,
10
10
  primitive = primitiveFromNode(node, context),
11
- string = primitive.getString(),
12
- term = new Term(string, variable, primitive);
11
+ string = primitive.getString();
12
+
13
+ node = null;
14
+
15
+ context = null;
16
+
17
+ const term = new Term(context, string, node, variable, primitive);
13
18
 
14
19
  return term;
15
20
  }
@@ -19,7 +24,11 @@ export function termFromNodes(nodes, context) {
19
24
  variable = null,
20
25
  primitive = primitiveFromNodes(nodes, context),
21
26
  string = primitive.getString(),
22
- term = new Term(string, variable, primitive);
27
+ node = null;
28
+
29
+ context = null;
30
+
31
+ const term = new Term(context, string, node, variable, primitive);
23
32
 
24
33
  return term;
25
34
  }
@@ -29,7 +38,11 @@ export function termFromBoolean(boolean, context) {
29
38
  variable = null,
30
39
  primitive = primitiveFromBoolean(boolean, context),
31
40
  string = primitive.getString(),
32
- term = new Term(string, variable, primitive);
41
+ node = null;
42
+
43
+ context = null;
44
+
45
+ const term = new Term(context, string, node, variable, primitive);
33
46
 
34
47
  return term;
35
48
  }
@@ -39,7 +52,11 @@ export function termFromStringLiteral(stringLiteral, context) {
39
52
  variable = null,
40
53
  primitive = primitiveFromStringLiteral(stringLiteral, context),
41
54
  string = primitive.getString(),
42
- term = new Term(string, variable, primitive);
55
+ node = null;
56
+
57
+ context = null;
58
+
59
+ const term = new Term(context, string, node, variable, primitive);
43
60
 
44
61
  return term;
45
62
  }
@@ -10,8 +10,12 @@ export function termsFromNodes(nodes, context) {
10
10
  termsArray = termsArrayFromNodes(nodes, context),
11
11
  termsString = termsStringFromTermsArray(termsArray),
12
12
  string = termsString, ///
13
- array = termsArray, ///
14
- terms = new Terms(string, array);
13
+ array = termsArray, ///
14
+ node = null;
15
+
16
+ context = null;
17
+
18
+ const terms = new Terms(context, string, node, array);
15
19
 
16
20
  return terms;
17
21
  }
@@ -23,8 +27,12 @@ export function termsFromExpression(term, context) {
23
27
  ],
24
28
  termsString = termsStringFromTermsArray(termsArray),
25
29
  string = termsString, ///
26
- array = termsArray, ///
27
- terms = new Primitives(string, array);
30
+ array = termsArray, ///
31
+ node = null;
32
+
33
+ context = null;
34
+
35
+ const terms = new Primitives(context, string, node, array);
28
36
 
29
37
  return terms;
30
38
  }
@@ -1,39 +1,255 @@
1
1
  "use strict";
2
2
 
3
- const { arrayUtilities } =require("necessary");
3
+ import { arrayUtilities } from "necessary";
4
4
 
5
- const { Log, FileContext } =require("../../lib/index"); ///
5
+ import { filePathUtilities } from "occam-model";
6
+ import { FurtleFileContext } from "../../lib/index"; ///
7
+ import { lexersUtilities, parsersUtilities } from "occam-custom-grammars";
6
8
 
7
- const { LEVELS } =require("../helpers/constants");
9
+ import from "../context/file/furtle";
8
10
 
9
- const { push } = arrayUtilities,
11
+ import { LEVELS } from "../constants";
12
+ import { getMetaTypes } from "../metaTypes";
13
+ import { customGrammarFromNameAndEntries, combinedCustomGrammarFromReleaseContexts } from "../utilities/customGrammar";
14
+
15
+ const { nominalLexerFromCombinedCustomGrammar } = lexersUtilities,
16
+ { nominalParserFromCombinedCustomGrammar } = parsersUtilities,
17
+ { tail, push, first, clear, resolve } = arrayUtilities,
18
+ { isFilePathFurtleFilePath, isFilePathNominalFilePath } = filePathUtilities,
10
19
  [ TRACE_LEVEL, DEBUG_LEVEL, INFO_LEVEL, WARNING_LEVEL, ERROR_LEVEL ] = LEVELS;
11
20
 
12
- class ReleaseContext {
13
- constructor(log, files, fileContexts) {
21
+ export default class ReleaseContext {
22
+ constructor(log, name, json, entries, lexer, parser, verified, initialised, fileContexts, customGrammar, dependencyReleaseContexts) {
14
23
  this.log = log;
15
- this.files = files;
24
+ this.name = name;
25
+ this.json = json;
26
+ this.entries = entries;
27
+ this.lexer = lexer;
28
+ this.parser = parser;
29
+ this.verified = verified;
30
+ this.initialised = initialised;
16
31
  this.fileContexts = fileContexts;
32
+ this.customGrammar = customGrammar;
33
+ this.dependencyReleaseContexts = dependencyReleaseContexts;
17
34
  }
18
35
 
19
36
  getLog() {
20
- return this.log;
37
+ return log;
38
+ }
39
+
40
+ getName() {
41
+ return this.name;
42
+ }
43
+
44
+ getJSON() {
45
+ return this.json;
46
+ }
47
+
48
+ getEntries() {
49
+ return this.entries;
21
50
  }
22
51
 
23
- getFiles() {
24
- return this.files;
52
+ getLexer() {
53
+ return this.lexer;
54
+ }
55
+
56
+ getParser() {
57
+ return this.parser;
58
+ }
59
+
60
+ getMetaTypes() {
61
+ const metaTypes = getMetaTypes();
62
+
63
+ return metaTypes;
64
+ }
65
+
66
+ isVerified() {
67
+ return this.verified;
68
+ }
69
+
70
+ isInitialised() {
71
+ return this.initialised;
25
72
  }
26
73
 
27
74
  getFileContexts() {
28
75
  return this.fileContexts;
29
76
  }
30
77
 
31
- addFile(file) {
32
- this.files.push(file);
78
+ getCustomGrammar() {
79
+ return this.customGrammar;
33
80
  }
34
81
 
35
- addFileContext(fileContext) {
36
- this.fileContexts.push(fileContext);
82
+ getDependencyReleaseContexts() {
83
+ return this.dependencyReleaseContexts;
84
+ }
85
+
86
+ isReleased() {
87
+ const released = (this.json !== null);
88
+
89
+ return released;
90
+ }
91
+
92
+ findFile(filePath) { return this.entries.findFile(filePath); }
93
+
94
+ findFileContext(filePath) {
95
+ const fileContext = this.fileContexts.find((fileContext) => {
96
+ const fileContextFilePath = fileContext.getFilePath();
97
+
98
+ if (fileContextFilePath === filePath) {
99
+ return true;
100
+ }
101
+ });
102
+
103
+ return fileContext;
104
+ }
105
+
106
+ getTypePrefix() {
107
+ let typePrefix = null;
108
+
109
+ const includeDependencies = false,
110
+ typePrefixes = this.getTypePrefixes(includeDependencies),
111
+ typePrefixesLength = typePrefixes.length;
112
+
113
+ if (typePrefixesLength === 1) {
114
+ const firstTypePrefix = first(typePrefixes);
115
+
116
+ typePrefix = firstTypePrefix; ///
117
+ }
118
+
119
+ return typePrefix;
120
+ }
121
+
122
+ getLabels(includeDependencies = true) {
123
+ const labels = [];
124
+
125
+ this.fileContexts.forEach((fileContext) => {
126
+ const includeRelease = false,
127
+ fileContextLabels = fileContext.getLabels(includeRelease);
128
+
129
+ push(labels, fileContextLabels);
130
+ });
131
+
132
+ if (includeDependencies) {
133
+ const dependencyReleaseContexts = this.getDependencyReleaseContexts();
134
+
135
+ dependencyReleaseContexts.forEach((releaseContext) => {
136
+ const includeDependencies = false,
137
+ releaseContextLabels = releaseContext.getLabels(includeDependencies);
138
+
139
+ push(labels, releaseContextLabels);
140
+ });
141
+ }
142
+
143
+ return labels;
144
+ }
145
+
146
+ getTypes(includeDependencies = true) {
147
+ const types = [];
148
+
149
+ this.fileContexts.forEach((fileContext) => {
150
+ const includeRelease = false,
151
+ fileContextTypes = fileContext.getTypes(includeRelease);
152
+
153
+ push(types, fileContextTypes);
154
+ });
155
+
156
+ if (includeDependencies) {
157
+ const dependencyReleaseContexts = this.getDependencyReleaseContexts();
158
+
159
+ dependencyReleaseContexts.forEach((releaseContext) => {
160
+ const includeDependencies = false,
161
+ releaseContextTypes = releaseContext.getTypes(includeDependencies);
162
+
163
+ push(types, releaseContextTypes);
164
+ });
165
+ }
166
+
167
+ return types;
168
+ }
169
+
170
+ getRules(includeDependencies = true) {
171
+ const rules = [];
172
+
173
+ this.fileContexts.forEach((fileContext) => {
174
+ const includeRelease = false,
175
+ fileContextRules = fileContext.getRules(includeRelease);
176
+
177
+ push(rules, fileContextRules);
178
+ });
179
+
180
+ if (includeDependencies) {
181
+ const dependencyReleaseContexts = this.getDependencyReleaseContexts();
182
+
183
+ dependencyReleaseContexts.forEach((releaseContext) => {
184
+ const includeDependencies = false,
185
+ releaseContextRules = releaseContext.getRules(includeDependencies);
186
+
187
+ push(rules, releaseContextRules);
188
+ });
189
+ }
190
+
191
+ return rules;
192
+ }
193
+
194
+ getAxioms(includeDependencies = true) {
195
+ const axioms = [];
196
+
197
+ this.fileContexts.forEach((fileContext) => {
198
+ const includeRelease = false,
199
+ fileContextAxioms = fileContext.getAxioms(includeRelease);
200
+
201
+ push(axioms, fileContextAxioms);
202
+ });
203
+
204
+ if (includeDependencies) {
205
+ const dependencyReleaseContexts = this.getDependencyReleaseContexts();
206
+
207
+ dependencyReleaseContexts.forEach((releaseContext) => {
208
+ const includeDependencies = false,
209
+ releaseContextAxioms = releaseContext.getAxioms(includeDependencies);
210
+
211
+ push(axioms, releaseContextAxioms);
212
+ });
213
+ }
214
+
215
+ return axioms;
216
+ }
217
+
218
+ getLemmas(includeDependencies = true) {
219
+ const lemmas = [];
220
+
221
+ this.fileContexts.forEach((fileContext) => {
222
+ const includeRelease = false,
223
+ fileContextLemmas = fileContext.getLemmas(includeRelease);
224
+
225
+ push(lemmas, fileContextLemmas);
226
+ });
227
+
228
+ return lemmas;
229
+ }
230
+
231
+ getTheorems(includeDependencies = true) {
232
+ const theorems = [];
233
+
234
+ this.fileContexts.forEach((fileContext) => {
235
+ const includeRelease = false,
236
+ fileContextTheorems = fileContext.getTheorems(includeRelease);
237
+
238
+ push(theorems, fileContextTheorems);
239
+ });
240
+
241
+ if (includeDependencies) {
242
+ const dependencyReleaseContexts = this.getDependencyReleaseContexts();
243
+
244
+ dependencyReleaseContexts.forEach((releaseContext) => {
245
+ const includeDependencies = false,
246
+ releaseContextTheorems = releaseContext.getTheorems(includeDependencies);
247
+
248
+ push(theorems, releaseContextTheorems);
249
+ });
250
+ }
251
+
252
+ return theorems;
37
253
  }
38
254
 
39
255
  getProcedures(includeDependencies = true) {
@@ -46,41 +262,174 @@ class ReleaseContext {
46
262
  push(procedures, fileContextProcedures);
47
263
  });
48
264
 
265
+ if (includeDependencies) {
266
+ const dependencyReleaseContexts = this.getDependencyReleaseContexts();
267
+
268
+ dependencyReleaseContexts.forEach((releaseContext) => {
269
+ const includeDependencies = false,
270
+ releaseContextProcedures = releaseContext.getProcedures(includeDependencies);
271
+
272
+ push(procedures, releaseContextProcedures);
273
+ });
274
+ }
275
+
49
276
  return procedures;
50
277
  }
51
278
 
52
- findFile(filePath) {
53
- const file = this.files.find((file) => {
54
- const filePathMatches = file.matchFilePath(filePath);
279
+ getMetaLemmas(includeDependencies = true) {
280
+ const metaLemmas = [];
55
281
 
56
- if (filePathMatches) {
57
- return true;
58
- }
59
- }) || null;
282
+ this.fileContexts.forEach((fileContext) => {
283
+ const includeRelease = false,
284
+ fileContextMetaLemmas = fileContext.getMetaLemmas(includeRelease);
285
+
286
+ push(metaLemmas, fileContextMetaLemmas);
287
+ });
60
288
 
61
- return file;
289
+ return metaLemmas;
62
290
  }
63
291
 
64
- findProcedureByName(name) {
65
- const procedures = this.getProcedures(),
66
- procedure = procedures.find((procedure) => {
67
- const nameMatches = procedure.matchName(name);
292
+ getConjectures(includeDependencies = true) {
293
+ const conjectures = [];
68
294
 
69
- if (nameMatches) {
70
- return true;
71
- }
72
- }) || null;
295
+ this.fileContexts.forEach((fileContext) => {
296
+ const includeRelease = false,
297
+ fileContextConjectures = fileContext.getConjectures(includeRelease);
73
298
 
74
- return procedure;
299
+ push(conjectures, fileContextConjectures);
300
+ });
301
+
302
+ if (includeDependencies) {
303
+ const dependencyReleaseContexts = this.getDependencyReleaseContexts();
304
+
305
+ dependencyReleaseContexts.forEach((releaseContext) => {
306
+ const includeDependencies = false,
307
+ releaseContextConjectures = releaseContext.getConjectures(includeDependencies);
308
+
309
+ push(conjectures, releaseContextConjectures);
310
+ });
311
+ }
312
+
313
+ return conjectures;
75
314
  }
76
315
 
77
- isProcedurePresentByName(name) {
78
- const procedure = this.findProcedureByName(name),
79
- procedurePresent = (procedure !== null);
316
+ getCombinators(includeDependencies = true) {
317
+ const combinators = [];
318
+
319
+ this.fileContexts.forEach((fileContext) => {
320
+ const includeRelease = false,
321
+ fileContextCombinators = fileContext.getCombinators(includeRelease);
322
+
323
+ push(combinators, fileContextCombinators);
324
+ });
325
+
326
+ if (includeDependencies) {
327
+ const dependencyReleaseContexts = this.getDependencyReleaseContexts();
328
+
329
+ dependencyReleaseContexts.forEach((releaseContext) => {
330
+ const includeDependencies = false,
331
+ releaseContextCombinators = releaseContext.getCombinators(includeDependencies);
332
+
333
+ push(combinators, releaseContextCombinators);
334
+ });
335
+ }
80
336
 
81
- return procedurePresent;
337
+ return combinators;
82
338
  }
83
339
 
340
+ getTypePrefixes(includeDependencies = true) {
341
+ const typePrefixes = [];
342
+
343
+ this.fileContexts.forEach((fileContext) => {
344
+ const includeRelease = false,
345
+ fileContextTypePrefixes = fileContext.getTypePrefixes(includeRelease);
346
+
347
+ push(typePrefixes, fileContextTypePrefixes);
348
+ });
349
+
350
+ if (includeDependencies) {
351
+ const dependencyReleaseContexts = this.getDependencyReleaseContexts();
352
+
353
+ dependencyReleaseContexts.forEach((releaseContext) => {
354
+ const includeDependencies = false,
355
+ releaseContextTypePrefixes = releaseContext.getTypePrefixes(includeDependencies);
356
+
357
+ push(typePrefixes, releaseContextTypePrefixes);
358
+ });
359
+ }
360
+
361
+ return typePrefixes;
362
+ }
363
+
364
+ getConstructors(includeDependencies = true) {
365
+ const constructors = [];
366
+
367
+ this.fileContexts.forEach((fileContext) => {
368
+ const includeRelease = false,
369
+ fileContextConstructors = fileContext.getConstructors(includeRelease);
370
+
371
+ push(constructors, fileContextConstructors);
372
+ });
373
+
374
+ if (includeDependencies) {
375
+ const dependencyReleaseContexts = this.getDependencyReleaseContexts();
376
+
377
+ dependencyReleaseContexts.forEach((releaseContext) => {
378
+ const includeDependencies = false,
379
+ releaseContextConstructors = releaseContext.getConstructors(includeDependencies);
380
+
381
+ push(constructors, releaseContextConstructors);
382
+ });
383
+ }
384
+
385
+ return constructors;
386
+ }
387
+
388
+ getMetatheorems(includeDependencies = true) {
389
+ const metatheorems = [];
390
+
391
+ this.fileContexts.forEach((fileContext) => {
392
+ const includeRelease = false,
393
+ fileContextMetatheorems = fileContext.getMetatheorems(includeRelease);
394
+
395
+ push(metatheorems, fileContextMetatheorems);
396
+ });
397
+
398
+ if (includeDependencies) {
399
+ const dependencyReleaseContexts = this.getDependencyReleaseContexts();
400
+
401
+ dependencyReleaseContexts.forEach((releaseContext) => {
402
+ const includeDependencies = false,
403
+ releaseContextMetatheorems = releaseContext.getMetatheorems(includeDependencies);
404
+
405
+ push(metatheorems, releaseContextMetatheorems);
406
+ });
407
+ }
408
+
409
+ return metatheorems;
410
+ }
411
+
412
+ addFileContext(fileContext) {
413
+ this.fileContexts.push(fileContext);
414
+ }
415
+
416
+ getReleaseName() {
417
+ const name = this.getName(),
418
+ releaseName = name; ///
419
+
420
+ return releaseName;
421
+ }
422
+
423
+ getFile(filePath) { return this.entries.getFile(filePath); }
424
+
425
+ getVersion() { return this.entries.getVersion(); }
426
+
427
+ getFilePaths() { return this.entries.getFilePaths(); }
428
+
429
+ getDependencies() { return this.entries.getDependencies(); }
430
+
431
+ matchShortenedVersion(shortenedVersion) { return this.entries.matchShortenedVersion(shortenedVersion); }
432
+
84
433
  trace(message, filePath = null, lineIndex = null) {
85
434
  const level = TRACE_LEVEL;
86
435
 
@@ -127,25 +476,107 @@ class ReleaseContext {
127
476
  return depth;
128
477
  }
129
478
 
479
+ initialise(releaseContexts) {
480
+ const combinedCustomGrammar = combinedCustomGrammarFromReleaseContexts(releaseContexts),
481
+ nominalLexer = nominalLexerFromCombinedCustomGrammar(NominalLexer, combinedCustomGrammar),
482
+ nominalParser = nominalParserFromCombinedCustomGrammar(NominalParser, combinedCustomGrammar),
483
+ releaseContext = this, ///
484
+ released = this.isReleased();
485
+
486
+ this.dependencyReleaseContexts = tail(releaseContexts); ///
487
+
488
+ this.lexer = nominalLexer; ///
489
+
490
+ this.parser = nominalParser; ///
491
+
492
+ clear(this.fileContexts);
493
+
494
+ released ?
495
+ fileContextsFromJSON(this.json, this.fileContexts, releaseContext) :
496
+ fileContextsFromEntries(this.entries, this.fileContexts, releaseContext);
497
+
498
+ this.initialised = true;
499
+ }
500
+
130
501
  verify() {
131
- this.files.forEach((file) => {
132
- const context = this, ///
133
- fileContext = FileContext.fromFile(file, context);
502
+ let verifies = false;
134
503
 
135
- fileContext.verify();
504
+ const typePrefixes = this.getTypePrefixes(),
505
+ releaseContext = this, ///
506
+ typePrefixesVerify = verifyTypePrefixes(typePrefixes, releaseContext);
136
507
 
137
- this.fileContexts.push(fileContext);
138
- });
508
+ if (typePrefixesVerify) {
509
+ const verifiedFileContexts = [],
510
+ fileContextsVerify = verifyFileContexts(this.fileContexts, verifiedFileContexts, releaseContext);
511
+
512
+ if (fileContextsVerify) {
513
+ this.fileContexts = verifiedFileContexts; ///
514
+
515
+ this.verified = true;
516
+
517
+ verifies = true;
518
+ }
519
+ }
520
+
521
+ return verifies;
522
+ }
523
+
524
+ toJSON() {
525
+ const fileContextsJSON = this.fileContexts.map((fileContext) => {
526
+ const fileContextJSON = fileContext.toJSON();
527
+
528
+ return fileContextJSON;
529
+ }),
530
+ json = fileContextsJSON; ///
531
+
532
+ return json;
139
533
  }
140
534
 
141
- static fromNothing() {
142
- const log = Log.fromNothing(),
143
- files = [],
535
+ static fromLogNameJSONAndEntries(log, name, json, entries) {
536
+ const lexer = null,
537
+ parser = null,
538
+ verifies = false,
539
+ initialised = false,
144
540
  fileContexts = [],
145
- releaseContext = new ReleaseContext(log, files, fileContexts);
541
+ customGrammar = customGrammarFromNameAndEntries(name, entries),
542
+ dependencyReleaseContexts = null,
543
+ releaseContext = new ReleaseContext(log, name, json, entries, lexer, parser, verifies, initialised, fileContexts, customGrammar, dependencyReleaseContexts);
146
544
 
147
545
  return releaseContext;
148
546
  }
149
547
  }
150
548
 
151
- module.exports = ReleaseContext;
549
+ function verifyFileContexts(fileContexts, verifiedFileContexts) {
550
+ const resolved = resolve(fileContexts, verifiedFileContexts, (fileContext) => {
551
+ const fileContextVerifies = fileContext.verify();
552
+
553
+ if (fileContextVerifies) {
554
+ return true;
555
+ }
556
+ }),
557
+ fileContextsVerify = resolved; ///
558
+
559
+ return fileContextsVerify;
560
+ }
561
+
562
+ function fileContextsFromEntries(entries, fileContexts, releaseContext) {
563
+ entries.forEachFile((file) => {
564
+ const filePath = file.getPath(),
565
+ filePathFurtleFilePath = isFilePathFurtleFilePath(filePath),
566
+ filePathNominalFilePath = isFilePathNominalFilePath(filePath);
567
+
568
+ if (filePathFurtleFilePath) {
569
+ const furtleFileContext = FurtleFileContext.fromFile(file, releaseContext),
570
+ fileContext = furtleFileContext; ///
571
+
572
+ fileContexts.push(fileContext);
573
+ }
574
+
575
+ if (filePathNominalFilePath) {
576
+ const context = releaseContext, ///
577
+ fileContext = NominalFileContext.fromFile(file, context);
578
+
579
+ fileContexts.push(fileContext);
580
+ }
581
+ });
582
+ }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- const { File } = require("occam-entities"),
3
+ const { File } = require("occam-model"),
4
4
  { fileSystemUtilities } = require("necessary");
5
5
 
6
6
  const { readFile } = fileSystemUtilities;
@@ -1,9 +1,8 @@
1
1
  "use strict";
2
2
 
3
+ const { NominalFileContext } = require("../../lib/index"); ///
3
4
  const { lexersUtilities, parsersUtilities } = require("occam-custom-grammars");
4
5
 
5
- const FileContext = require("../context/file");
6
-
7
6
  const { combinedCustomGrammarFromNothing } = require("../helpers/grammar");
8
7
 
9
8
  const { nominalLexerFromCombinedCustomGrammar } = lexersUtilities,
@@ -21,7 +20,7 @@ function nominalFileContextFromReleaseContext(releaseContext) {
21
20
  node = parser.parse(tokens),
22
21
  context = releaseContext, ///
23
22
  filePath = "lemmas.nml",
24
- fileContext = FileContext.fromNodeTokensAndFilePath(node, tokens, filePath, context),
23
+ fileContext = NominalFileContext.fromFilePathNodeAndTokens(filePath, tokens, node, context),
25
24
  nominalFileContext = fileContext; ///
26
25
 
27
26
  return nominalFileContext;
package/test/main.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- const ReleaseContext = require("./context/release");
3
+ const { ReleaseContext } = require("../lib/index"); ///
4
4
 
5
5
  const { termsFromFileContext } = require("./helpers/terms"),
6
6
  { furtleFileFromNothing } = require("./helpers/furtle"),