derw
Version:
An Elm-inspired language that transpiles to TypeScript
73 lines (72 loc) • 2.34 kB
JavaScript
;
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);
}