UNPKG

@blainehansen/macro-ts

Version:

An ergonomic typescript compiler that enables typesafe syntactic macros.

101 lines 2.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.longestMatchingStem = exports.NonEmptyOrSingle = exports.NonEmpty = exports.cachedLookup = exports.Cache = exports.Registry = exports.setExtend = exports.exec = exports.tuple = void 0; const c = require("@ts-std/codec"); const monads_1 = require("@ts-std/monads"); function tuple(...items) { return items; } exports.tuple = tuple; function exec(fn) { return fn(); } exports.exec = exec; function setExtend(a, b) { const union = new Set(a); for (const item of b) union.add(item); return union; } exports.setExtend = setExtend; class Registry { items = {}; peek(key) { return key in this.items; } take(key) { const item = this.items[key]; delete this.items[key]; return item; } put(key, item) { this.items[key] = item; } } exports.Registry = Registry; class Cache { map = new Map(); has(key) { return this.map.has(key); } get(key) { return this.map.get(key); } set(key, value) { this.map.set(key, value); return value; } } exports.Cache = Cache; function cachedLookup(fn) { const cache = new Map(); return (key) => { const item = cache.get(key); if (item !== undefined) return item; const actual = fn(key); cache.set(key, actual); return actual; }; } exports.cachedLookup = cachedLookup; var NonEmpty; (function (NonEmpty) { function decoder(decoder) { const arrayDecoder = c.array(decoder); return c.wrap(`NonEmpty<${decoder.name}>`, input => { const result = arrayDecoder.decode(input); if (result.is_err()) return result; const values = result.value; if (values.length === 0) return (0, monads_1.Err)(`array empty, expected at least one item`); return (0, monads_1.Ok)([values[0], ...values.slice(1)]); }); } NonEmpty.decoder = decoder; function flattenInto(item) { return Array.isArray(item) ? item : [item]; } NonEmpty.flattenInto = flattenInto; })(NonEmpty = exports.NonEmpty || (exports.NonEmpty = {})); var NonEmptyOrSingle; (function (NonEmptyOrSingle) { function decoder(decoder) { return c.union(decoder, NonEmpty.decoder(decoder)); } NonEmptyOrSingle.decoder = decoder; })(NonEmptyOrSingle = exports.NonEmptyOrSingle || (exports.NonEmptyOrSingle = {})); function longestMatchingStem(value, stems) { const longest = { length: 0, stem: undefined }; for (const stem of stems) { const stemLength = stem.length; if (stemLength <= longest.length || !value.startsWith(stem)) continue; longest.stem = stem; longest.length = stemLength; } return longest.stem; } exports.longestMatchingStem = longestMatchingStem; //# sourceMappingURL=utils.js.map