• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

terminal-nerds / snippets / 4433938838

pending completion
4433938838

Pull #34

github

GitHub
Merge a2b01b8cb into e9bca3452
Pull Request #34: feat(runtime): ✨ Add a a new module `module`

256 of 303 branches covered (84.49%)

Branch coverage included in aggregate %.

66 of 66 new or added lines in 1 file covered. (100.0%)

2086 of 2138 relevant lines covered (97.57%)

15.72 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

88.31
/packages/runtime/source/module/module.ts
1
import { RuntimeError } from "@terminal-nerds/snippets-error";
1✔
2
import { resolveModule } from "local-pkg";
1✔
3
import { type NormalizedPackageJson, readPackageUpSync } from "read-pkg-up";
1✔
4
import type { KebabCase } from "type-fest/source/kebab-case.js";
1✔
5

1✔
6
import { IN_BROWSER } from "../environment/environment.js";
1✔
7

1✔
8
/** @see {@link https://nodejs.org/api/modules.html#modules-commonjs-modules} CommonJS Module */
1✔
9
export const IN_CJS = typeof globalThis.require === "function";
1✔
10

1✔
11
/** @see {@link https://nodejs.org/api/esm.html#modules-ecmascript-modules} ECMAScript Module */
1✔
12
export const IN_ESM = !IN_CJS && Boolean(import.meta);
1✔
13

1✔
14
export function hasModule(name: string): boolean {
1✔
15
        if (IN_BROWSER) throw new RuntimeError(`You cannot check for module existence in the browser.`);
4!
16

4✔
17
        return Boolean(resolveModule(name));
4✔
18
}
4✔
19

1✔
20
export type PackageName<T extends string = string> = KebabCase<T>;
1✔
21
// TODO: Add typings for SemVer and other doable stuff, e.g. `workspace:*`
1✔
22
export type PackageVersion = string;
1✔
23

1✔
24
export function readPackageJSON(): NormalizedPackageJson {
1✔
25
        if (IN_BROWSER) throw new RuntimeError(`You cannot read the package.json inside the browser.`);
2!
26

2✔
27
        const file = readPackageUpSync();
2✔
28

2✔
29
        if (file) {
2✔
30
                return file.packageJson;
2✔
31
        } else {
2!
32
                throw new Error('Cannot locate nearest "package.json" file!');
×
33
        }
×
34
}
×
35

1✔
36
export type DepedencyType = "dependencies" | "devDependencies" | "optionalDependencies" | "peerDependencies";
1✔
37
export type Depedencies = Partial<Record<PackageName, PackageVersion>>;
1✔
38

1✔
39
export function getDependenciesMap(): Map<DepedencyType, Depedencies | undefined> {
1✔
40
        const { dependencies, devDependencies, optionalDependencies, peerDependencies } = readPackageJSON();
1✔
41

1✔
42
        return new Map(
1✔
43
                Object.entries({
1✔
44
                        dependencies,
1✔
45
                        devDependencies,
1✔
46
                        optionalDependencies,
1✔
47
                        peerDependencies,
1✔
48
                }) as Array<[DepedencyType, Depedencies]>,
1✔
49
        );
1✔
50
}
1✔
51

1✔
52
/** TODO: Add targetting, for better debugging (required, dev, optional or peer) */
1✔
53
export function getDepedencies(): Depedencies {
1✔
54
        const { dependencies, devDependencies, optionalDependencies, peerDependencies } = readPackageJSON();
1✔
55

1✔
56
        return { ...dependencies, ...devDependencies, ...optionalDependencies, ...peerDependencies };
1✔
57
}
×
58

1✔
59
export function getPackagesNames(): Set<PackageName> {
1✔
60
        return new Set(Object.keys(getDepedencies()));
1✔
61
}
1✔
62

1✔
63
/** TODO: Add targetting, for better debugging (required, dev, optional or peer) */
1✔
64
export function hasPackage(name: string): boolean {
1✔
65
        return getPackagesNames().has(name);
×
66
}
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc