pareto-test 0.13.46 → 0.13.48

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 (21) hide show
  1. package/dist/implementation/generated/pareto/generic/parse/ast.js +28 -28
  2. package/dist/implementation/generated/pareto/generic/parse/astn_parse_generic.js +2 -2
  3. package/dist/implementation/generated/pareto/generic/parse/string_iterator.js +30 -7
  4. package/dist/implementation/generated/pareto/generic/parse/token.js +9 -9
  5. package/dist/implementation/generated/pareto/generic/serialize.js +2 -2
  6. package/dist/implementation/generated/pareto/generic/unmarshall.js +6 -6
  7. package/dist/implementation/manual/commands/run_tests.js +8 -8
  8. package/dist/implementation/manual/schemas/directory_content/transformers/generic_testset.js +10 -10
  9. package/dist/implementation/manual/schemas/directory_content/transformers/merged_file_structure.js +3 -3
  10. package/dist/implementation/manual/schemas/read_directory_content/transformers/generic_testset.js +10 -10
  11. package/dist/implementation/manual/schemas/read_directory_content/transformers/merged_file_structure.js +3 -3
  12. package/dist/implementation/manual/schemas/test_command/productions/text.js +2 -7
  13. package/dist/implementation/manual/schemas/test_command/refiners/main.js +2 -2
  14. package/dist/implementation/manual/schemas/test_result_2/transformers/actual_tree.js +12 -12
  15. package/dist/implementation/temp/higher_order_functions/command_creators/test.js +22 -22
  16. package/dist/implementation/temp/higher_order_functions/generic_testset/temp.js +2 -2
  17. package/dist/implementation/temp/higher_order_functions/generic_testset/testset_shorthands.js +3 -3
  18. package/dist/temporary_testset_generator/create_test_bin.js +5 -3
  19. package/package.json +3 -3
  20. package/dist/implementation/generated/pareto/generic/resolve.d.ts +0 -109
  21. package/dist/implementation/generated/pareto/generic/resolve.js +0 -277
@@ -1,277 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.resolve_ordered_dictionary = exports.resolve_dense_ordered_dictionary = exports.resolve_dense_dictionary = exports.resolve_dictionary = exports.resolve_path = exports.get_entry = exports.get_entry_from_stack = exports.push_stack = exports.get_possibly_circular_dependent_sibling_entry = exports.dictionary_to_lookup = exports.abort = void 0;
27
- const _ea = __importStar(require("pareto-core-refiner"));
28
- const _ps = __importStar(require("pareto-core-serializer"));
29
- const abort = (location, type, location_to_string) => {
30
- return _ea.fixme_abort(_ea.cc(type, ($) => {
31
- switch ($[0]) {
32
- case 'no such entry': return _ea.ss($, ($) => `no such entry: '${$['key']}'`);
33
- case 'missing denseness entry': return _ea.ss($, ($) => `missing denseness entry: '${$['key']}'`);
34
- case 'circular dependency': return _ea.ss($, ($) => {
35
- const keys = _ps.build_text(($i) => {
36
- $['keys'].__for_each(($) => {
37
- $i['add snippet'](` '${$}', `);
38
- });
39
- });
40
- return `circular dependency: (${keys})`;
41
- });
42
- case 'no context lookup': return _ea.ss($, ($) => `no context lookup`);
43
- case 'index out of bounds': return _ea.ss($, ($) => `index out of bounds, ${$['up steps taken']}`);
44
- case 'no element found at index': return _ea.ss($, ($) => `no element found at index, ${$['index']}`);
45
- default: return _ea.au($[0]);
46
- }
47
- }), ` @ ${location_to_string(location)}`);
48
- };
49
- exports.abort = abort;
50
- const dictionary_to_lookup = ($, $p) => {
51
- return _ea.set($.map(($) => (['resolved', $])));
52
- };
53
- exports.dictionary_to_lookup = dictionary_to_lookup;
54
- const get_possibly_circular_dependent_sibling_entry = ($, $p) => {
55
- return $.transform(($) => ({
56
- 'key': $p.reference.key,
57
- 'entry': $.get_entry($p.reference.key).transform(($) => $, () => (0, exports.abort)($p.reference.location, ['no such entry', { 'key': $p.reference.key }], $p['location 2 string']))
58
- }), () => (0, exports.abort)($p.reference.location, ['no context lookup', null], $p['location 2 string']));
59
- };
60
- exports.get_possibly_circular_dependent_sibling_entry = get_possibly_circular_dependent_sibling_entry;
61
- const push_stack = ($, $p) => {
62
- return _ea.build_list(($i) => {
63
- $i['add list']($);
64
- $i['add element']($p['element']);
65
- });
66
- };
67
- exports.push_stack = push_stack;
68
- const get_entry_from_stack = ($, $p) => {
69
- const ref = $p.reference;
70
- const get_entry_from_stack = (up_steps_taken) => {
71
- return $.__get_element_at($.get_number_of_elements() - 1 - up_steps_taken).transform(($) => {
72
- return $.transform(($) => {
73
- return $.get_entry(ref.key).transform(($) => _ea.cc($, ($) => {
74
- switch ($[0]) {
75
- case 'error': return _ea.ss($, ($) => get_entry_from_stack(up_steps_taken += 1));
76
- case 'resolved': return _ea.ss($, ($) => ({
77
- 'key': ref.key,
78
- 'up steps': up_steps_taken,
79
- 'entry': $,
80
- }));
81
- default: return _ea.au($[0]);
82
- }
83
- }), () => _ea.fixme_abort(`no clue yet of what is happening here`));
84
- }, () => (0, exports.abort)(ref.location, ['index out of bounds', { 'up steps taken': up_steps_taken }], $p['location 2 string']));
85
- }, () => (0, exports.abort)(ref.location, ['no element found at index', { 'index': up_steps_taken }], $p['location 2 string']));
86
- };
87
- return get_entry_from_stack(0);
88
- };
89
- exports.get_entry_from_stack = get_entry_from_stack;
90
- const get_entry = ($, $p) => {
91
- return $.transform(($) => ({
92
- 'key': $p.reference.key,
93
- 'entry': $.get_entry($p.reference.key).transform(($) => _ea.cc($, ($) => {
94
- switch ($[0]) {
95
- case 'error': return _ea.ss($, ($) => _ea.cc($, ($) => {
96
- switch ($[0]) {
97
- case 'circular': return _ea.ss($, ($) => {
98
- return (0, exports.abort)($p.reference.location, ['circular dependency', { 'keys': $ }], $p['location 2 string']);
99
- });
100
- default: return _ea.au($[0]);
101
- }
102
- }));
103
- case 'resolved': return _ea.ss($, ($) => $);
104
- default: return _ea.au($[0]);
105
- }
106
- }), () => {
107
- return (0, exports.abort)($p.reference.location, ['no such entry', { 'key': $p.reference.key }], $p['location 2 string']);
108
- })
109
- }), () => (0, exports.abort)($p.reference.location, ['no context lookup', null], $p['location 2 string']));
110
- };
111
- exports.get_entry = get_entry;
112
- const resolve_path = ($, $p) => {
113
- let current = {
114
- 'list': _ea.list_literal([]),
115
- 'result': {
116
- 'data': $p.seed,
117
- },
118
- };
119
- $.list.__for_each(($) => {
120
- const result = $p.map($.element, current.result.data);
121
- const data = _ea.build_list(($i) => {
122
- current.list.__for_each(($) => {
123
- $i['add element']($);
124
- });
125
- $i['add element'](result.element);
126
- });
127
- current = {
128
- 'list': data,
129
- 'result': {
130
- 'data': result.result,
131
- }
132
- };
133
- });
134
- return current;
135
- };
136
- exports.resolve_path = resolve_path;
137
- const resolve_dictionary = ($, $p) => {
138
- return (0, exports.resolve_ordered_dictionary)($, $p).dictionary;
139
- };
140
- exports.resolve_dictionary = resolve_dictionary;
141
- const resolve_dense_dictionary = ($, $p) => {
142
- return (0, exports.resolve_dense_ordered_dictionary)($, $p).dictionary;
143
- };
144
- exports.resolve_dense_dictionary = resolve_dense_dictionary;
145
- const resolve_dense_ordered_dictionary = ($, $p) => {
146
- const location = $.location;
147
- const result = (0, exports.resolve_ordered_dictionary)($, $p);
148
- $p['denseness benchmark'].map(($) => {
149
- const validate_denseness = (benchmark, focus, location, location_to_string) => {
150
- benchmark.map(($, key) => {
151
- const benchmark = $;
152
- focus.get_entry(key).transform(($) => {
153
- }, () => {
154
- (0, exports.abort)(location, ['missing denseness entry', { 'key': key }], $p['location 2 string']);
155
- });
156
- });
157
- };
158
- validate_denseness($p['denseness benchmark'], result.dictionary, location, $p['location 2 string']);
159
- });
160
- return result;
161
- };
162
- exports.resolve_dense_ordered_dictionary = resolve_dense_ordered_dictionary;
163
- const resolve_ordered_dictionary = ($, $p) => {
164
- const dictionary_location = $.location;
165
- /**
166
- * this variable contains all the entries on which siblings have subscribed
167
- */
168
- const all_siblings_subscribed_entries = {};
169
- const finished = {};
170
- const ordered_list = _ea.build_list(($i) => {
171
- const source_dictionary = $;
172
- const status_dictionary = {};
173
- function process_entry($, location, key_of_entry_being_processed) {
174
- status_dictionary[key_of_entry_being_processed] = ['processing', null];
175
- const entry = $p.map({
176
- 'key': key_of_entry_being_processed,
177
- 'value': $,
178
- 'location': location,
179
- }, {
180
- 'possibly circular dependent siblings': _ea.set({
181
- get_entry(key) {
182
- //does the entry exist?
183
- return source_dictionary.dictionary.get_entry(key).map(($) => {
184
- //yes, it exists in the source dictionary
185
- if (all_siblings_subscribed_entries[key] === undefined) {
186
- all_siblings_subscribed_entries[key] = { 'entry': null };
187
- }
188
- const subscr = all_siblings_subscribed_entries[key];
189
- return {
190
- 'get circular dependent': () => {
191
- if (subscr.entry === null) {
192
- return _ea.fixme_abort(`entry not set: ${key}`);
193
- }
194
- return subscr.entry;
195
- }
196
- };
197
- });
198
- },
199
- }),
200
- 'not circular dependent siblings': _ea.set({
201
- get_entry(key) {
202
- const status = status_dictionary[key];
203
- if (status === undefined) {
204
- return source_dictionary.dictionary.get_entry(key).transform(($) => _ea.set(['resolved', process_entry($.entry, $.location, key)]), () => {
205
- return _ea.not_set();
206
- // throw new ResolveError("")
207
- });
208
- }
209
- else {
210
- const get_keys_of_entries_being_processed = () => {
211
- return _ea.build_list(($i) => {
212
- _ea.dictionary_literal(status_dictionary).map(($, key) => {
213
- if ($[0] === 'processing') {
214
- $i['add element'](key);
215
- }
216
- });
217
- });
218
- };
219
- return _ea.cc(status, (s) => {
220
- switch (s[0]) {
221
- case 'failed':
222
- return _ea.ss(s, (s) => {
223
- //nothing to report
224
- return _ea.set(['error', ['circular', get_keys_of_entries_being_processed()]]);
225
- //return notSet()
226
- });
227
- case 'processing':
228
- if (key === key_of_entry_being_processed) {
229
- //$se.onError(`'${key}' is referencing itself`)
230
- }
231
- else {
232
- // const keys: string[] = []
233
- // Object.keys(status_dictionary).forEach((key) => {
234
- // if (status_dictionary[key][0] === 'processing') {
235
- // keys.push(key)
236
- // }
237
- // })
238
- //$se.onError(`the following entries are referencing each other: ${keys.join(", ")}`)
239
- }
240
- status_dictionary[key_of_entry_being_processed] = ['failed', null];
241
- return _ea.set(['error', ['circular', get_keys_of_entries_being_processed()]]);
242
- case 'success':
243
- return _ea.set(['resolved', s[1]]);
244
- default: return _ea.au(s[0]);
245
- }
246
- });
247
- }
248
- },
249
- }),
250
- });
251
- finished[key_of_entry_being_processed] = entry;
252
- $i['add element']({
253
- 'key': key_of_entry_being_processed,
254
- 'value': entry,
255
- });
256
- status_dictionary[key_of_entry_being_processed] = ['success', entry];
257
- return entry;
258
- }
259
- $.dictionary.map(($, key) => {
260
- if (status_dictionary[key] === undefined) {
261
- process_entry($.entry, $.location, key);
262
- }
263
- });
264
- _ea.dictionary_literal(all_siblings_subscribed_entries).map(($, key) => {
265
- if (finished[key] === undefined) {
266
- _ea.fixme_abort(`implementation error: entry not resolved: ${key}`);
267
- }
268
- all_siblings_subscribed_entries[key].entry = finished[key];
269
- });
270
- });
271
- return {
272
- 'dictionary': _ea.dictionary_literal(finished),
273
- 'ordered list': ordered_list,
274
- };
275
- };
276
- exports.resolve_ordered_dictionary = resolve_ordered_dictionary;
277
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9pbXBsZW1lbnRhdGlvbi9nZW5lcmF0ZWQvcGFyZXRvL2dlbmVyaWMvcmVzb2x2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlEQUEwQztBQUMxQyw0REFBNkM7QUEwRHRDLE1BQU0sS0FBSyxHQUFHLENBQVMsUUFBZ0IsRUFBRSxJQUF3QixFQUFFLGtCQUFnRCxFQUFTLEVBQUU7SUFDakksT0FBTyxHQUFHLENBQUMsV0FBVyxDQUNsQixHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ2YsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNYLEtBQUssZUFBZSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDN0UsS0FBSyx5QkFBeUIsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLDZCQUE2QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ2pHLEtBQUsscUJBQXFCLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQy9DLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtvQkFDL0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO3dCQUN2QixFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxDQUFD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