UNPKG

derw

Version:

An Elm-inspired language that transpiles to TypeScript

73 lines (72 loc) 2.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PackageModule = PackageModule; exports.Dependency = Dependency; exports.dependenciesFromRecord = dependenciesFromRecord; exports.Package = Package; exports.addDependency = addDependency; exports.exportPackage = exportPackage; exports.loadPackageFile = loadPackageFile; exports.decodePackage = decodePackage; const adeilad_1 = require("@eeue56/adeilad"); const promises_1 = require("fs/promises"); function PackageModule(name) { return { kind: "PackageModule", name, }; } function Dependency(name, version) { return { kind: "Dependency", name, version, }; } function dependenciesFromRecord(record) { const dependencies = []; for (const entry of Object.keys(record)) { dependencies.push(Dependency(entry, record[entry])); } return dependencies; } function Package(name, exposing, dependencies) { return { kind: "Package", name, exposing, dependencies, }; } const packageDecoder = (0, adeilad_1.pipeline)([ (0, adeilad_1.required)("name", (0, adeilad_1.string)()), (0, adeilad_1.required)("exposing", (0, adeilad_1.array)((0, adeilad_1.map)(PackageModule, (0, adeilad_1.string)()))), (0, adeilad_1.required)("dependencies", (0, adeilad_1.map)(dependenciesFromRecord, (0, adeilad_1.record)((0, adeilad_1.string)()))), ], Package); function addDependency(dependency, package_) { for (const dep of package_.dependencies) { if (dep.name === dependency.name) { dep.version = dependency.version; return package_; } } package_.dependencies.push(dependency); return package_; } function exportPackage(package_) { const dependencies = {}; for (const dependency of package_.dependencies) { dependencies[dependency.name] = dependency.version; } return JSON.stringify({ name: package_.name, exposing: package_.exposing.map((e) => e.name), dependencies: dependencies, }, null, 4); } async function loadPackageFile(path) { return decodePackage(JSON.parse(await (await (0, promises_1.readFile)(path)).toString())); } function decodePackage(potentialPackage) { return (0, adeilad_1.decode)(packageDecoder, potentialPackage); }