UNPKG

derw

Version:

An Elm-inspired language that transpiles to TypeScript

74 lines (73 loc) 2.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.decodePackage = exports.loadPackageFile = exports.exportPackage = exports.addDependency = exports.Package = exports.dependenciesFromRecord = exports.Dependency = exports.PackageModule = void 0; const adeilad_1 = require("@eeue56/adeilad"); const promises_1 = require("fs/promises"); function PackageModule(name) { return { kind: "PackageModule", name, }; } exports.PackageModule = PackageModule; function Dependency(name, version) { return { kind: "Dependency", name, version, }; } exports.Dependency = Dependency; function dependenciesFromRecord(record) { const dependencies = []; for (const entry of Object.keys(record)) { dependencies.push(Dependency(entry, record[entry])); } return dependencies; } exports.dependenciesFromRecord = dependenciesFromRecord; function Package(name, exposing, dependencies) { return { kind: "Package", name, exposing, dependencies, }; } exports.Package = Package; 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_; } exports.addDependency = addDependency; 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); } exports.exportPackage = exportPackage; async function loadPackageFile(path) { return decodePackage(JSON.parse(await (await (0, promises_1.readFile)(path)).toString())); } exports.loadPackageFile = loadPackageFile; function decodePackage(potentialPackage) { return (0, adeilad_1.decode)(packageDecoder, potentialPackage); } exports.decodePackage = decodePackage;