sanity
Version:
Sanity is a real-time content infrastructure with a scalable, hosted backend featuring a Graph Oriented Query Language (GROQ), asset pipelines and fast edge caches
73 lines (72 loc) • 2 kB
JavaScript
import path from "node:path";
import resolveFrom from "resolve-from";
import { readFile } from "node:fs/promises";
import { performance } from "node:perf_hooks";
function isPackageManifest(item) {
return typeof item == "object" && item !== null && "name" in item && "version" in item;
}
async function readPackageJson(filePath) {
try {
return JSON.parse(await readFile(filePath, "utf8"));
} catch (err) {
throw new Error(`Failed to read "${filePath}": ${err.message}`, {
cause: err
});
}
}
async function readPackageManifest(packageJsonPath, defaults = {}) {
let manifest;
try {
manifest = {
...defaults,
...await readPackageJson(packageJsonPath)
};
} catch (err) {
throw new Error(`Failed to read "${packageJsonPath}": ${err.message}`, {
cause: err
});
}
if (!isPackageManifest(manifest))
throw new Error(`Failed to read "${packageJsonPath}": Invalid package manifest`);
const {
name,
version,
dependencies = {},
devDependencies = {}
} = manifest;
return {
name,
version,
dependencies,
devDependencies
};
}
async function readModuleVersion(dir, moduleName) {
const manifestPath = resolveFrom.silent(dir, path.join(moduleName, "package.json"));
return manifestPath ? (await readPackageManifest(manifestPath)).version : null;
}
function getTimer() {
const timings = {}, startTimes = {};
function start(name) {
if (typeof startTimes[name] < "u")
throw new Error(`Timer "${name}" already started, cannot overwrite`);
startTimes[name] = performance.now();
}
function end(name) {
if (typeof startTimes[name] > "u")
throw new Error(`Timer "${name}" never started, cannot end`);
return timings[name] = performance.now() - startTimes[name], timings[name];
}
return {
start,
end,
getTimings: () => timings
};
}
export {
getTimer,
readModuleVersion,
readPackageJson,
readPackageManifest
};
//# sourceMappingURL=timing.js.map