occam-furtle 2.0.340 → 3.0.1

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 (118) hide show
  1. package/example.js +6319 -2036
  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/release.js +675 -0
  7. package/lib/context.js +210 -0
  8. package/lib/element/assignment/array.js +117 -15
  9. package/lib/element/assignment/object.js +119 -17
  10. package/lib/element/assignment/variable.js +121 -14
  11. package/lib/element/assignments/variable.js +120 -13
  12. package/lib/element/declaration/procedure.js +120 -12
  13. package/lib/element/error.js +118 -13
  14. package/lib/element/every.js +116 -13
  15. package/lib/element/expression.js +134 -68
  16. package/lib/element/label.js +119 -12
  17. package/lib/element/nodeQuery.js +120 -18
  18. package/lib/element/nodesQuery.js +120 -18
  19. package/lib/element/parameter/named.js +117 -15
  20. package/lib/element/parameter.js +116 -14
  21. package/lib/element/parameters/named.js +116 -14
  22. package/lib/element/parameters.js +115 -13
  23. package/lib/element/primitive.js +115 -63
  24. package/lib/element/procedure/anonymous.js +118 -16
  25. package/lib/element/procedure.js +118 -16
  26. package/lib/element/procedureCall.js +116 -14
  27. package/lib/element/reduce.js +116 -14
  28. package/lib/element/reference.js +119 -12
  29. package/lib/element/returnBlock.js +116 -14
  30. package/lib/element/some.js +117 -15
  31. package/lib/element/statement/return.js +120 -13
  32. package/lib/element/step.js +121 -14
  33. package/lib/element/term/bracketed.js +120 -13
  34. package/lib/element/term/comparison.js +117 -15
  35. package/lib/element/term/logical.js +119 -17
  36. package/lib/element/term/negated.js +119 -15
  37. package/lib/element/term.js +131 -45
  38. package/lib/element/terms.js +125 -14
  39. package/lib/element/ternary.js +118 -16
  40. package/lib/element/variable.js +127 -19
  41. package/lib/element.js +1 -8
  42. package/lib/index.js +9 -1
  43. package/lib/log.js +13 -12
  44. package/lib/metaTypeNames.js +26 -0
  45. package/lib/metaTypes.js +66 -0
  46. package/lib/node/expression.js +8 -15
  47. package/lib/nodeProperties.js +17 -21
  48. package/lib/nodeProperty.js +4 -7
  49. package/lib/utilities/context.js +8 -37
  50. package/lib/utilities/customGrammar.js +49 -0
  51. package/lib/utilities/element.js +110 -60
  52. package/lib/utilities/lineIndex.js +26 -0
  53. package/lib/utilities/primitive.js +14 -5
  54. package/lib/utilities/string.js +41 -37
  55. package/lib/utilities/term.js +14 -5
  56. package/lib/utilities/terms.js +7 -3
  57. package/package.json +2 -2
  58. package/src/context/block.js +20 -32
  59. package/src/context/file/furtle.js +141 -0
  60. package/src/context/file/nominal.js +946 -0
  61. package/src/context/file.js +32 -209
  62. package/src/context/release.js +653 -0
  63. package/src/context.js +74 -0
  64. package/src/element/assignment/array.js +8 -9
  65. package/src/element/assignment/object.js +12 -11
  66. package/src/element/assignment/variable.js +7 -8
  67. package/src/element/assignments/variable.js +7 -8
  68. package/src/element/declaration/procedure.js +6 -6
  69. package/src/element/error.js +4 -6
  70. package/src/element/every.js +5 -6
  71. package/src/element/expression.js +13 -33
  72. package/src/element/label.js +6 -7
  73. package/src/element/nodeQuery.js +12 -14
  74. package/src/element/nodesQuery.js +12 -14
  75. package/src/element/parameter/named.js +7 -8
  76. package/src/element/parameter.js +6 -8
  77. package/src/element/parameters/named.js +8 -9
  78. package/src/element/parameters.js +6 -8
  79. package/src/element/primitive.js +5 -57
  80. package/src/element/procedure/anonymous.js +7 -9
  81. package/src/element/procedure.js +6 -8
  82. package/src/element/procedureCall.js +6 -8
  83. package/src/element/reduce.js +5 -7
  84. package/src/element/reference.js +6 -7
  85. package/src/element/returnBlock.js +5 -7
  86. package/src/element/some.js +9 -9
  87. package/src/element/statement/return.js +7 -8
  88. package/src/element/step.js +6 -7
  89. package/src/element/term/bracketed.js +7 -8
  90. package/src/element/term/comparison.js +6 -8
  91. package/src/element/term/logical.js +12 -12
  92. package/src/element/term/negated.js +11 -9
  93. package/src/element/term.js +16 -17
  94. package/src/element/terms.js +16 -9
  95. package/src/element/ternary.js +8 -9
  96. package/src/element/variable.js +24 -14
  97. package/src/element.js +0 -8
  98. package/src/index.js +2 -0
  99. package/src/log.js +11 -11
  100. package/src/metaTypeNames.js +5 -0
  101. package/src/metaTypes.js +71 -0
  102. package/src/node/expression.js +9 -17
  103. package/src/nodeProperties.js +23 -32
  104. package/src/nodeProperty.js +5 -10
  105. package/src/utilities/context.js +7 -45
  106. package/src/utilities/customGrammar.js +40 -0
  107. package/src/utilities/element.js +181 -94
  108. package/src/utilities/lineIndex.js +21 -0
  109. package/src/utilities/primitive.js +22 -5
  110. package/src/utilities/string.js +42 -36
  111. package/src/utilities/term.js +22 -5
  112. package/src/utilities/terms.js +12 -4
  113. package/test/helpers/furtle.js +1 -1
  114. package/test/helpers/nominal.js +2 -3
  115. package/test/main.js +4 -3
  116. package/test/context/file.js +0 -127
  117. package/test/context/release.js +0 -151
  118. package/test/helpers/constants.js +0 -17
@@ -0,0 +1,653 @@
1
+ "use strict";
2
+
3
+ import { arrayUtilities } from "necessary";
4
+
5
+ import { filePathUtilities } from "occam-model";
6
+ import { lexersUtilities, parsersUtilities } from "occam-custom-grammars";
7
+
8
+ // import NominalLexer from "../nominal/lexer";
9
+ // import NominalParser from "../nominal/parser";
10
+ import FurtleFileContext from "../context/file/furtle";
11
+ import NominalFileContext from "../context/file/nominal";
12
+
13
+ import { LEVELS } from "../constants";
14
+ import { getMetaTypes } from "../metaTypes";
15
+ import { customGrammarFromNameAndEntries, combinedCustomGrammarFromReleaseContexts } from "../utilities/customGrammar";
16
+
17
+ const { nominalLexerFromCombinedCustomGrammar } = lexersUtilities,
18
+ { nominalParserFromCombinedCustomGrammar } = parsersUtilities,
19
+ { tail, push, first, clear, filter, resolve, compress } = arrayUtilities,
20
+ { isFilePathFurtleFilePath, isFilePathNominalFilePath } = filePathUtilities,
21
+ [ TRACE_LEVEL, DEBUG_LEVEL, INFO_LEVEL, WARNING_LEVEL, ERROR_LEVEL ] = LEVELS;
22
+
23
+ export default class ReleaseContext {
24
+ constructor(log, name, json, entries, lexer, parser, verified, initialised, fileContexts, customGrammar, dependencyReleaseContexts) {
25
+ this.log = log;
26
+ this.name = name;
27
+ this.json = json;
28
+ this.entries = entries;
29
+ this.lexer = lexer;
30
+ this.parser = parser;
31
+ this.verified = verified;
32
+ this.initialised = initialised;
33
+ this.fileContexts = fileContexts;
34
+ this.customGrammar = customGrammar;
35
+ this.dependencyReleaseContexts = dependencyReleaseContexts;
36
+ }
37
+
38
+ getLog() {
39
+ return log;
40
+ }
41
+
42
+ getName() {
43
+ return this.name;
44
+ }
45
+
46
+ getJSON() {
47
+ return this.json;
48
+ }
49
+
50
+ getEntries() {
51
+ return this.entries;
52
+ }
53
+
54
+ getLexer() {
55
+ return this.lexer;
56
+ }
57
+
58
+ getParser() {
59
+ return this.parser;
60
+ }
61
+
62
+ getMetaTypes() {
63
+ const metaTypes = getMetaTypes();
64
+
65
+ return metaTypes;
66
+ }
67
+
68
+ isVerified() {
69
+ return this.verified;
70
+ }
71
+
72
+ isInitialised() {
73
+ return this.initialised;
74
+ }
75
+
76
+ getFileContexts() {
77
+ return this.fileContexts;
78
+ }
79
+
80
+ getCustomGrammar() {
81
+ return this.customGrammar;
82
+ }
83
+
84
+ getDependencyReleaseContexts() {
85
+ return this.dependencyReleaseContexts;
86
+ }
87
+
88
+ isReleased() {
89
+ const released = (this.json !== null);
90
+
91
+ return released;
92
+ }
93
+
94
+ findFile(filePath) { return this.entries.findFile(filePath); }
95
+
96
+ findFileContext(filePath) {
97
+ const fileContext = this.fileContexts.find((fileContext) => {
98
+ const fileContextFilePath = fileContext.getFilePath();
99
+
100
+ if (fileContextFilePath === filePath) {
101
+ return true;
102
+ }
103
+ });
104
+
105
+ return fileContext;
106
+ }
107
+
108
+ getTypePrefix() {
109
+ let typePrefix = null;
110
+
111
+ const includeDependencies = false,
112
+ typePrefixes = this.getTypePrefixes(includeDependencies),
113
+ typePrefixesLength = typePrefixes.length;
114
+
115
+ if (typePrefixesLength === 1) {
116
+ const firstTypePrefix = first(typePrefixes);
117
+
118
+ typePrefix = firstTypePrefix; ///
119
+ }
120
+
121
+ return typePrefix;
122
+ }
123
+
124
+ getLabels(includeDependencies = true) {
125
+ const labels = [];
126
+
127
+ this.fileContexts.forEach((fileContext) => {
128
+ const includeRelease = false,
129
+ fileContextLabels = fileContext.getLabels(includeRelease);
130
+
131
+ push(labels, fileContextLabels);
132
+ });
133
+
134
+ if (includeDependencies) {
135
+ const dependencyReleaseContexts = this.getDependencyReleaseContexts();
136
+
137
+ dependencyReleaseContexts.forEach((releaseContext) => {
138
+ const includeDependencies = false,
139
+ releaseContextLabels = releaseContext.getLabels(includeDependencies);
140
+
141
+ push(labels, releaseContextLabels);
142
+ });
143
+ }
144
+
145
+ return labels;
146
+ }
147
+
148
+ getTypes(includeDependencies = true) {
149
+ const types = [];
150
+
151
+ this.fileContexts.forEach((fileContext) => {
152
+ const includeRelease = false,
153
+ fileContextTypes = fileContext.getTypes(includeRelease);
154
+
155
+ push(types, fileContextTypes);
156
+ });
157
+
158
+ if (includeDependencies) {
159
+ const dependencyReleaseContexts = this.getDependencyReleaseContexts();
160
+
161
+ dependencyReleaseContexts.forEach((releaseContext) => {
162
+ const includeDependencies = false,
163
+ releaseContextTypes = releaseContext.getTypes(includeDependencies);
164
+
165
+ push(types, releaseContextTypes);
166
+ });
167
+ }
168
+
169
+ return types;
170
+ }
171
+
172
+ getRules(includeDependencies = true) {
173
+ const rules = [];
174
+
175
+ this.fileContexts.forEach((fileContext) => {
176
+ const includeRelease = false,
177
+ fileContextRules = fileContext.getRules(includeRelease);
178
+
179
+ push(rules, fileContextRules);
180
+ });
181
+
182
+ if (includeDependencies) {
183
+ const dependencyReleaseContexts = this.getDependencyReleaseContexts();
184
+
185
+ dependencyReleaseContexts.forEach((releaseContext) => {
186
+ const includeDependencies = false,
187
+ releaseContextRules = releaseContext.getRules(includeDependencies);
188
+
189
+ push(rules, releaseContextRules);
190
+ });
191
+ }
192
+
193
+ return rules;
194
+ }
195
+
196
+ getAxioms(includeDependencies = true) {
197
+ const axioms = [];
198
+
199
+ this.fileContexts.forEach((fileContext) => {
200
+ const includeRelease = false,
201
+ fileContextAxioms = fileContext.getAxioms(includeRelease);
202
+
203
+ push(axioms, fileContextAxioms);
204
+ });
205
+
206
+ if (includeDependencies) {
207
+ const dependencyReleaseContexts = this.getDependencyReleaseContexts();
208
+
209
+ dependencyReleaseContexts.forEach((releaseContext) => {
210
+ const includeDependencies = false,
211
+ releaseContextAxioms = releaseContext.getAxioms(includeDependencies);
212
+
213
+ push(axioms, releaseContextAxioms);
214
+ });
215
+ }
216
+
217
+ return axioms;
218
+ }
219
+
220
+ getLemmas(includeDependencies = true) {
221
+ const lemmas = [];
222
+
223
+ this.fileContexts.forEach((fileContext) => {
224
+ const includeRelease = false,
225
+ fileContextLemmas = fileContext.getLemmas(includeRelease);
226
+
227
+ push(lemmas, fileContextLemmas);
228
+ });
229
+
230
+ return lemmas;
231
+ }
232
+
233
+ getTheorems(includeDependencies = true) {
234
+ const theorems = [];
235
+
236
+ this.fileContexts.forEach((fileContext) => {
237
+ const includeRelease = false,
238
+ fileContextTheorems = fileContext.getTheorems(includeRelease);
239
+
240
+ push(theorems, fileContextTheorems);
241
+ });
242
+
243
+ if (includeDependencies) {
244
+ const dependencyReleaseContexts = this.getDependencyReleaseContexts();
245
+
246
+ dependencyReleaseContexts.forEach((releaseContext) => {
247
+ const includeDependencies = false,
248
+ releaseContextTheorems = releaseContext.getTheorems(includeDependencies);
249
+
250
+ push(theorems, releaseContextTheorems);
251
+ });
252
+ }
253
+
254
+ return theorems;
255
+ }
256
+
257
+ getProcedures(includeDependencies = true) {
258
+ const procedures = [];
259
+
260
+ this.fileContexts.forEach((fileContext) => {
261
+ const includeRelease = false,
262
+ fileContextProcedures = fileContext.getProcedures(includeRelease);
263
+
264
+ push(procedures, fileContextProcedures);
265
+ });
266
+
267
+ if (includeDependencies) {
268
+ const dependencyReleaseContexts = this.getDependencyReleaseContexts();
269
+
270
+ dependencyReleaseContexts.forEach((releaseContext) => {
271
+ const includeDependencies = false,
272
+ releaseContextProcedures = releaseContext.getProcedures(includeDependencies);
273
+
274
+ push(procedures, releaseContextProcedures);
275
+ });
276
+ }
277
+
278
+ return procedures;
279
+ }
280
+
281
+ getMetaLemmas(includeDependencies = true) {
282
+ const metaLemmas = [];
283
+
284
+ this.fileContexts.forEach((fileContext) => {
285
+ const includeRelease = false,
286
+ fileContextMetaLemmas = fileContext.getMetaLemmas(includeRelease);
287
+
288
+ push(metaLemmas, fileContextMetaLemmas);
289
+ });
290
+
291
+ return metaLemmas;
292
+ }
293
+
294
+ getConjectures(includeDependencies = true) {
295
+ const conjectures = [];
296
+
297
+ this.fileContexts.forEach((fileContext) => {
298
+ const includeRelease = false,
299
+ fileContextConjectures = fileContext.getConjectures(includeRelease);
300
+
301
+ push(conjectures, fileContextConjectures);
302
+ });
303
+
304
+ if (includeDependencies) {
305
+ const dependencyReleaseContexts = this.getDependencyReleaseContexts();
306
+
307
+ dependencyReleaseContexts.forEach((releaseContext) => {
308
+ const includeDependencies = false,
309
+ releaseContextConjectures = releaseContext.getConjectures(includeDependencies);
310
+
311
+ push(conjectures, releaseContextConjectures);
312
+ });
313
+ }
314
+
315
+ return conjectures;
316
+ }
317
+
318
+ getCombinators(includeDependencies = true) {
319
+ const combinators = [];
320
+
321
+ this.fileContexts.forEach((fileContext) => {
322
+ const includeRelease = false,
323
+ fileContextCombinators = fileContext.getCombinators(includeRelease);
324
+
325
+ push(combinators, fileContextCombinators);
326
+ });
327
+
328
+ if (includeDependencies) {
329
+ const dependencyReleaseContexts = this.getDependencyReleaseContexts();
330
+
331
+ dependencyReleaseContexts.forEach((releaseContext) => {
332
+ const includeDependencies = false,
333
+ releaseContextCombinators = releaseContext.getCombinators(includeDependencies);
334
+
335
+ push(combinators, releaseContextCombinators);
336
+ });
337
+ }
338
+
339
+ return combinators;
340
+ }
341
+
342
+ getTypePrefixes(includeDependencies = true) {
343
+ const typePrefixes = [];
344
+
345
+ this.fileContexts.forEach((fileContext) => {
346
+ const includeRelease = false,
347
+ fileContextTypePrefixes = fileContext.getTypePrefixes(includeRelease);
348
+
349
+ push(typePrefixes, fileContextTypePrefixes);
350
+ });
351
+
352
+ if (includeDependencies) {
353
+ const dependencyReleaseContexts = this.getDependencyReleaseContexts();
354
+
355
+ dependencyReleaseContexts.forEach((releaseContext) => {
356
+ const includeDependencies = false,
357
+ releaseContextTypePrefixes = releaseContext.getTypePrefixes(includeDependencies);
358
+
359
+ push(typePrefixes, releaseContextTypePrefixes);
360
+ });
361
+ }
362
+
363
+ return typePrefixes;
364
+ }
365
+
366
+ getConstructors(includeDependencies = true) {
367
+ const constructors = [];
368
+
369
+ this.fileContexts.forEach((fileContext) => {
370
+ const includeRelease = false,
371
+ fileContextConstructors = fileContext.getConstructors(includeRelease);
372
+
373
+ push(constructors, fileContextConstructors);
374
+ });
375
+
376
+ if (includeDependencies) {
377
+ const dependencyReleaseContexts = this.getDependencyReleaseContexts();
378
+
379
+ dependencyReleaseContexts.forEach((releaseContext) => {
380
+ const includeDependencies = false,
381
+ releaseContextConstructors = releaseContext.getConstructors(includeDependencies);
382
+
383
+ push(constructors, releaseContextConstructors);
384
+ });
385
+ }
386
+
387
+ return constructors;
388
+ }
389
+
390
+ getMetatheorems(includeDependencies = true) {
391
+ const metatheorems = [];
392
+
393
+ this.fileContexts.forEach((fileContext) => {
394
+ const includeRelease = false,
395
+ fileContextMetatheorems = fileContext.getMetatheorems(includeRelease);
396
+
397
+ push(metatheorems, fileContextMetatheorems);
398
+ });
399
+
400
+ if (includeDependencies) {
401
+ const dependencyReleaseContexts = this.getDependencyReleaseContexts();
402
+
403
+ dependencyReleaseContexts.forEach((releaseContext) => {
404
+ const includeDependencies = false,
405
+ releaseContextMetatheorems = releaseContext.getMetatheorems(includeDependencies);
406
+
407
+ push(metatheorems, releaseContextMetatheorems);
408
+ });
409
+ }
410
+
411
+ return metatheorems;
412
+ }
413
+
414
+ addFileContext(fileContext) {
415
+ this.fileContexts.push(fileContext);
416
+ }
417
+
418
+ getReleaseName() {
419
+ const name = this.getName(),
420
+ releaseName = name; ///
421
+
422
+ return releaseName;
423
+ }
424
+
425
+ getFile(filePath) { return this.entries.getFile(filePath); }
426
+
427
+ getVersion() { return this.entries.getVersion(); }
428
+
429
+ getFilePaths() { return this.entries.getFilePaths(); }
430
+
431
+ getDependencies() { return this.entries.getDependencies(); }
432
+
433
+ matchShortenedVersion(shortenedVersion) { return this.entries.matchShortenedVersion(shortenedVersion); }
434
+
435
+ trace(message, filePath = null, lineIndex = null) {
436
+ const level = TRACE_LEVEL;
437
+
438
+ this.writeToLog(level, message, filePath, lineIndex);
439
+ }
440
+
441
+ debug(message, filePath = null, lineIndex = null) {
442
+ const level = DEBUG_LEVEL
443
+
444
+ this.writeToLog(level, message, filePath, lineIndex);
445
+ }
446
+
447
+ info(message, filePath = null, lineIndex = null) {
448
+ const level = INFO_LEVEL;
449
+
450
+ this.writeToLog(level, message, filePath, lineIndex);
451
+ }
452
+
453
+ warning(message, filePath = null, lineIndex = null) {
454
+ const level = WARNING_LEVEL;
455
+
456
+ this.writeToLog(level, message, filePath, lineIndex);
457
+ }
458
+
459
+ error(message, filePath = null, lineIndex = null) {
460
+ const level = ERROR_LEVEL;
461
+
462
+ this.writeToLog(level, message, filePath, lineIndex);
463
+ }
464
+
465
+ writeToLog(level, message, filePath, lineIndex) {
466
+ this.log.write(level, message, filePath, lineIndex);
467
+ }
468
+
469
+ getFileContext() {
470
+ const fileContext = null;
471
+
472
+ return fileContext;
473
+ }
474
+
475
+ getDepth() {
476
+ const depth = -1;
477
+
478
+ return depth;
479
+ }
480
+
481
+ initialise(releaseContexts) {
482
+ const combinedCustomGrammar = combinedCustomGrammarFromReleaseContexts(releaseContexts),
483
+ nominalLexer = nominalLexerFromCombinedCustomGrammar(NominalLexer, combinedCustomGrammar),
484
+ nominalParser = nominalParserFromCombinedCustomGrammar(NominalParser, combinedCustomGrammar),
485
+ releaseContext = this, ///
486
+ released = this.isReleased();
487
+
488
+ this.dependencyReleaseContexts = tail(releaseContexts); ///
489
+
490
+ this.lexer = nominalLexer; ///
491
+
492
+ this.parser = nominalParser; ///
493
+
494
+ clear(this.fileContexts);
495
+
496
+ released ?
497
+ fileContextsFromJSON(this.json, this.fileContexts, releaseContext) :
498
+ fileContextsFromEntries(this.entries, this.fileContexts, releaseContext);
499
+
500
+ this.initialised = true;
501
+ }
502
+
503
+ verify() {
504
+ let verifies = false;
505
+
506
+ const typePrefixes = this.getTypePrefixes(),
507
+ releaseContext = this, ///
508
+ typePrefixesVerify = verifyTypePrefixes(typePrefixes, releaseContext);
509
+
510
+ if (typePrefixesVerify) {
511
+ const verifiedFileContexts = [],
512
+ fileContextsVerify = verifyFileContexts(this.fileContexts, verifiedFileContexts, releaseContext);
513
+
514
+ if (fileContextsVerify) {
515
+ this.fileContexts = verifiedFileContexts; ///
516
+
517
+ this.verified = true;
518
+
519
+ verifies = true;
520
+ }
521
+ }
522
+
523
+ return verifies;
524
+ }
525
+
526
+ toJSON() {
527
+ const fileContextsJSON = this.fileContexts.map((fileContext) => {
528
+ const fileContextJSON = fileContext.toJSON();
529
+
530
+ return fileContextJSON;
531
+ }),
532
+ json = fileContextsJSON; ///
533
+
534
+ return json;
535
+ }
536
+
537
+ static fromLogNameJSONAndEntries(log, name, json, entries) {
538
+ const lexer = null,
539
+ parser = null,
540
+ verifies = false,
541
+ initialised = false,
542
+ fileContexts = [],
543
+ customGrammar = customGrammarFromNameAndEntries(name, entries),
544
+ dependencyReleaseContexts = null,
545
+ releaseContext = new ReleaseContext(log, name, json, entries, lexer, parser, verifies, initialised, fileContexts, customGrammar, dependencyReleaseContexts);
546
+
547
+ return releaseContext;
548
+ }
549
+ }
550
+
551
+ function verifyTypePrefixes(typePrefixes, releaseContext) {
552
+ let typePrefixesVerify = true;
553
+
554
+ const typePrefixesLength = typePrefixes.length,
555
+ compressedTypePrefixes = [ ///
556
+ ...typePrefixes,
557
+ ];
558
+
559
+ compress(compressedTypePrefixes, (typePrefixA, typePrefixB) => {
560
+ const typePrefixAName = typePrefixA.getName(),
561
+ typePrefixBName = typePrefixB.getName();
562
+
563
+ if (typePrefixAName !== typePrefixBName) {
564
+ return true;
565
+ }
566
+ });
567
+
568
+ const compressTypePrefixesLength = compressedTypePrefixes.length;
569
+
570
+ if (typePrefixesLength > compressTypePrefixesLength) {
571
+ filter(compressedTypePrefixes, (typePrefix) => {
572
+ const typePrefixesIncludesTypePrefix = typePrefixes.includes(typePrefix);
573
+
574
+ if (!typePrefixesIncludesTypePrefix) {
575
+ return true;
576
+ }
577
+ });
578
+
579
+ const firstTypePrefix = first(typePrefixes),
580
+ typePrefix = firstTypePrefix, ///
581
+ typePrefixString = typePrefix.getString();
582
+
583
+ releaseContext.info(`The '${typePrefixString}' type prefix is duplicated at least once, possibly among others.`)
584
+
585
+ typePrefixesVerify = false;
586
+ }
587
+
588
+ return typePrefixesVerify;
589
+ }
590
+
591
+ function verifyFileContexts(fileContexts, verifiedFileContexts) {
592
+ const resolved = resolve(fileContexts, verifiedFileContexts, (fileContext) => {
593
+ const fileContextVerifies = fileContext.verify();
594
+
595
+ if (fileContextVerifies) {
596
+ return true;
597
+ }
598
+ }),
599
+ fileContextsVerify = resolved; ///
600
+
601
+ return fileContextsVerify;
602
+ }
603
+
604
+ function fileContextsFromJSON(json,fileContexts, releaseContext) {
605
+ const fileContextsJSON = json; ///
606
+
607
+ fileContextsJSON.forEach((fileContextJSON) => {
608
+ const { filePath } = fileContextJSON,
609
+ json = fileContextJSON, ///
610
+ filePathFurtleFilePath = isFilePathFurtleFilePath(filePath),
611
+ filePathNominalFilePath = isFilePathNominalFilePath(filePath);
612
+
613
+ if (filePathFurtleFilePath) {
614
+ const furtleFileContext = FurtleFileContext.fromFilePath(filePath, releaseContext),
615
+ fileContext = furtleFileContext; ///
616
+
617
+ fileContexts.push(fileContext);
618
+
619
+ fileContext.initialise(json);
620
+ }
621
+
622
+ if (filePathNominalFilePath) {
623
+ const context = releaseContext, ///
624
+ fileContext = NominalFileContext.fromFilePath(filePath, context);
625
+
626
+ fileContexts.push(fileContext);
627
+
628
+ fileContext.initialise(json);
629
+ }
630
+ });
631
+ }
632
+
633
+ function fileContextsFromEntries(entries, fileContexts, releaseContext) {
634
+ entries.forEachFile((file) => {
635
+ const filePath = file.getPath(),
636
+ filePathFurtleFilePath = isFilePathFurtleFilePath(filePath),
637
+ filePathNominalFilePath = isFilePathNominalFilePath(filePath);
638
+
639
+ if (filePathFurtleFilePath) {
640
+ const furtleFileContext = FurtleFileContext.fromFile(file, releaseContext),
641
+ fileContext = furtleFileContext; ///
642
+
643
+ fileContexts.push(fileContext);
644
+ }
645
+
646
+ if (filePathNominalFilePath) {
647
+ const context = releaseContext, ///
648
+ fileContext = NominalFileContext.fromFile(file, context);
649
+
650
+ fileContexts.push(fileContext);
651
+ }
652
+ });
653
+ }
package/src/context.js ADDED
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+
3
+ import { LEVELS, DOUBLE_SPACE } from "./constants";
4
+
5
+ const [ TRACE_LEVEL, DEBUG_LEVEL, INFO_LEVEL, WARNING_LEVEL, ERROR_LEVEL ] = LEVELS;
6
+
7
+ export default class Context {
8
+ constructor(context) {
9
+ this.context = context;
10
+ }
11
+
12
+ getContext() {
13
+ return this.context;
14
+ }
15
+
16
+ getDepth() {
17
+ let depth = this.context.getDepth();
18
+
19
+ depth++;
20
+
21
+ return depth;
22
+ }
23
+
24
+ getReleaseContext() { return this.context.getReleaseContext(); }
25
+
26
+ trace(message) {
27
+ const level = TRACE_LEVEL;
28
+
29
+ this.writeToLog(level, message);
30
+ }
31
+
32
+ debug(message) {
33
+ const level = DEBUG_LEVEL;
34
+
35
+ this.writeToLog(level, message);
36
+ }
37
+
38
+ info(message) {
39
+ const level = INFO_LEVEL;
40
+
41
+ this.writeToLog(level, message);
42
+ }
43
+
44
+ warning(message) {
45
+ const level = WARNING_LEVEL;
46
+
47
+ this.writeToLog(level, message);
48
+ }
49
+
50
+ error(message) {
51
+ const level = ERROR_LEVEL;
52
+
53
+ this.writeToLog(level, message);
54
+ }
55
+
56
+ writeToLog(level, message) {
57
+ const depth = this.getDepth(),
58
+ indent = DOUBLE_SPACE.repeat(depth);
59
+
60
+ message = `${indent}${message}`; ///
61
+
62
+ const releaseContext = this.getReleaseContext();
63
+
64
+ releaseContext.writeToLog(level, message);
65
+ }
66
+
67
+ static fromNothing(Class, ...remainingArguments) {
68
+ let context = remainingArguments.pop();
69
+
70
+ context = new Class(context, ...remainingArguments); ///
71
+
72
+ return context;
73
+ }
74
+ }