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
JavaScript
;
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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