UNPKG

pareto-fountain-pen

Version:

A TypeScript library for easily generating source code files with proper indentation in the pareto programming style/language

261 lines 25 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); 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 = void 0; const pa = __importStar(require("exupery-core-alg")); const dictionary_to_lookup = ($, $p) => { return pa.set($.map(($) => (['resolved', $]))); }; exports.dictionary_to_lookup = dictionary_to_lookup; const get_possibly_circular_dependent_sibling_entry = ($, $p) => { return $.transform(($) => ({ 'key': $p.reference.key, 'entry': $.__get_entry($p.reference.key).transform(($) => $, () => pa.panic("no such entry: '", $p.reference.key, "' @ ", $p['location 2 string']($p.reference.location))) }), () => pa.panic("no context lookup @ ", $p['location 2 string']($p.reference.location))); }; exports.get_possibly_circular_dependent_sibling_entry = get_possibly_circular_dependent_sibling_entry; const push_stack = ($, $p) => { return pa.pure.list.build(($i) => { $i['add list']($); $i['add element']($p['element']); }); }; exports.push_stack = push_stack; const get_entry_from_stack = ($, $p) => { const get_lookup_from_stack = ($, $p) => $.__get_element_at($.__get_length() - 1 - $p['up steps']).transform(($) => $, () => pa.panic(`index out of bounds, ${$.__get_length()} ${$p['up steps']}`)); const x = (0, exports.get_entry)(get_lookup_from_stack($, { 'up steps': $p.reference['up steps'] }), { 'reference': $p.reference, 'location 2 string': $p['location 2 string'], }); return { 'key': x.key, 'entry': x.entry, 'up steps': $p.reference['up steps'], }; }; exports.get_entry_from_stack = get_entry_from_stack; const get_entry = ($, $p) => { return $.transform(($) => ({ 'key': $p.reference.key, 'entry': $.__get_entry($p.reference.key).transform(($) => pa.cc($, ($) => { switch ($[0]) { case 'error': return pa.ss($, ($) => pa.cc($, ($) => { switch ($[0]) { case 'circular': return pa.ss($, ($) => { const keys = pa.pure.text.build(($i) => { $.__for_each(($) => { $i['add snippet'](` '${$}', `); }); }); return pa.panic("circular dependency: '", $p.reference.key, "' (", keys, ")@ ", $p['location 2 string']($p.reference.location)); }); default: return pa.au($[0]); } })); case 'resolved': return pa.ss($, ($) => $); default: return pa.au($[0]); } }), () => { return pa.panic("no such entry: '", $p.reference.key, "' @ ", $p['location 2 string']($p.reference.location)); }) }), () => pa.panic("no context lookup @ ", $p['location 2 string']($p.reference.location))); }; exports.get_entry = get_entry; const resolve_path = ($, $p) => { let current = { 'list': pa.array_literal([]), 'result': { 'data': $p.seed, }, }; $.list.__for_each(($) => { const result = $p.map($.element, current.result.data); const data = pa.pure.list.build(($i) => { current.list.__for_each(($) => { $i['add element']($); }); $i['add element'](result.element); }); current = { 'list': data, 'result': { 'data': result.result, } }; }); return current; }; exports.resolve_path = resolve_path; const resolve_dictionary = ($, $p) => { return (0, exports.resolve_ordered_dictionary)($, $p).dictionary; }; exports.resolve_dictionary = resolve_dictionary; const resolve_dense_dictionary = ($, $p) => { return (0, exports.resolve_dense_ordered_dictionary)($, $p).dictionary; }; exports.resolve_dense_dictionary = resolve_dense_dictionary; const resolve_dense_ordered_dictionary = ($, $p) => { const location = $.location; const result = (0, exports.resolve_ordered_dictionary)($, $p); $p['denseness benchmark'].map(($) => { const validate_denseness = (benchmark, focus, location, location_to_string) => { benchmark.map(($, key) => { const benchmark = $; focus.__get_entry(key).transform(($) => { }, () => { pa.panic("missing entry '", key, "' @ ", location_to_string(location)); }); }); }; validate_denseness($p['denseness benchmark'], result.dictionary, location, $p['location 2 string']); }); return result; }; exports.resolve_dense_ordered_dictionary = resolve_dense_ordered_dictionary; const resolve_ordered_dictionary = ($, $p) => { const dictionary_location = $.location; /** * this variable contains all the entries on which siblings have subscribed */ const all_siblings_subscribed_entries = {}; const finished = {}; const ordered_list = pa.pure.list.build(($i) => { const source_dictionary = $; const status_dictionary = {}; function process_entry($, location, key_of_entry_being_processed) { status_dictionary[key_of_entry_being_processed] = ['processing', null]; const entry = $p.map({ 'key': key_of_entry_being_processed, 'value': $, 'location': location, }, { 'possibly circular dependent siblings': pa.set({ __get_entry(key) { //does the entry exist? return source_dictionary.dictionary.__get_entry(key).map(($) => { //yes, it exists in the source dictionary if (all_siblings_subscribed_entries[key] === undefined) { all_siblings_subscribed_entries[key] = { 'entry': null }; } const subscr = all_siblings_subscribed_entries[key]; return { 'compute': () => { if (subscr.entry === null) { pa.panic(`entry not set: ${key}`); } return subscr.entry; } }; }); }, }), 'not circular dependent siblings': pa.set({ __get_entry(key) { const status = status_dictionary[key]; if (status === undefined) { return source_dictionary.dictionary.__get_entry(key).transform(($) => pa.set(['resolved', process_entry($.entry, $.location, key)]), () => { return pa.not_set(); // throw new ResolveError("") }); } else { const get_keys_of_entries_being_processed = () => { return pa.pure.list.build(($i) => { pa.dictionary_literal(status_dictionary).map(($, key) => { if ($[0] === 'processing') { $i['add element'](key); } }); }); }; return pa.cc(status, (s) => { switch (s[0]) { case 'failed': return pa.ss(s, (s) => { //nothing to report return pa.set(['error', ['circular', get_keys_of_entries_being_processed()]]); //return notSet() }); case 'processing': if (key === key_of_entry_being_processed) { //$se.onError(`'${key}' is referencing itself`) } else { // const keys: string[] = [] // Object.keys(status_dictionary).forEach((key) => { // if (status_dictionary[key][0] === 'processing') { // keys.push(key) // } // }) //$se.onError(`the following entries are referencing each other: ${keys.join(", ")}`) } status_dictionary[key_of_entry_being_processed] = ['failed', null]; return pa.set(['error', ['circular', get_keys_of_entries_being_processed()]]); case 'success': return pa.set(['resolved', s[1]]); default: return pa.au(s[0]); } }); } }, }), }); finished[key_of_entry_being_processed] = entry; $i['add element']({ 'key': key_of_entry_being_processed, 'value': entry, }); status_dictionary[key_of_entry_being_processed] = ['success', entry]; return entry; } $.dictionary.map(($, key) => { if (status_dictionary[key] === undefined) { process_entry($.entry, $.location, key); } }); pa.dictionary_literal(all_siblings_subscribed_entries).map(($, key) => { if (finished[key] === undefined) { pa.panic(`implementation error: entry not resolved: ${key}`); } all_siblings_subscribed_entries[key].entry = finished[key]; }); }); return { 'dictionary': pa.dictionary_literal(finished), 'ordered list': ordered_list, }; }; exports.resolve_ordered_dictionary = resolve_ordered_dictionary; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9nZW5lcmF0ZWQvaW1wbGVtZW50YXRpb24vZ2VuZXJpYy9yZXNvbHZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHFEQUFzQztBQXVDL0IsTUFBTSxvQkFBb0IsR0FBRyxDQUNoQyxDQUFtQixFQUNuQixFQUFRLEVBQ1csRUFBRTtJQUNyQixPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNsRCxDQUFDLENBQUE7QUFMWSxRQUFBLG9CQUFvQix3QkFLaEM7QUFFTSxNQUFNLDZDQUE2QyxHQUFHLENBQ3pELENBQXFCLEVBQ3JCLEVBR0MsRUFDMkQsRUFBRTtJQUM5RCxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQ2QsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDSixLQUFLLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHO1FBQ3ZCLE9BQU8sRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUM5QyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUNSLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FDL0c7S0FDSixDQUFDLEVBQ0YsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxzQkFB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