@koreanhole/opencodex 2.98.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,75 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { createRequire } from "node:module";
3
+ import { dirname, join } from "node:path";
4
+
5
+ export const UPSTREAM_PACKAGE_NAME = "@bitkyc08/opencodex";
6
+ export const UPSTREAM_PACKAGE_VERSION = "2.94.0";
7
+ export const UPSTREAM_CLI_RELATIVE_PATH = "src/cli/index.ts";
8
+
9
+ export interface UpstreamPackage {
10
+ name: string;
11
+ version: string;
12
+ root: string;
13
+ cliEntry: string;
14
+ }
15
+
16
+ export class UpstreamPackageError extends Error {
17
+ constructor(message: string) {
18
+ super(message);
19
+ this.name = "UpstreamPackageError";
20
+ }
21
+ }
22
+
23
+ export interface ResolveUpstreamPackageDeps {
24
+ resolvePackageJson?: () => string;
25
+ readJson?: (path: string) => unknown;
26
+ exists?: (path: string) => boolean;
27
+ }
28
+
29
+ /** Resolve the exact immutable upstream package without importing its runtime. */
30
+ export function resolveUpstreamPackage(
31
+ deps: ResolveUpstreamPackageDeps = {},
32
+ ): UpstreamPackage {
33
+ const resolvePackageJson = deps.resolvePackageJson
34
+ ?? (() => createRequire(import.meta.url).resolve(UPSTREAM_PACKAGE_NAME + "/package.json"));
35
+ const readJson = deps.readJson
36
+ ?? (path => JSON.parse(readFileSync(path, "utf8")) as unknown);
37
+ const exists = deps.exists ?? existsSync;
38
+
39
+ let packageJsonPath: string;
40
+ try {
41
+ packageJsonPath = resolvePackageJson();
42
+ } catch {
43
+ throw new UpstreamPackageError(
44
+ UPSTREAM_PACKAGE_NAME + " is not installed. Reinstall this package with its dependencies.",
45
+ );
46
+ }
47
+ let parsed: unknown;
48
+ try {
49
+ parsed = readJson(packageJsonPath);
50
+ } catch {
51
+ throw new UpstreamPackageError("The installed opencodex package metadata is unreadable.");
52
+ }
53
+ const packageJson = parsed && typeof parsed === "object" && !Array.isArray(parsed)
54
+ ? parsed as Record<string, unknown>
55
+ : undefined;
56
+ if (packageJson?.name !== UPSTREAM_PACKAGE_NAME || packageJson.version !== UPSTREAM_PACKAGE_VERSION) {
57
+ throw new UpstreamPackageError(
58
+ "Expected " + UPSTREAM_PACKAGE_NAME + "@" + UPSTREAM_PACKAGE_VERSION
59
+ + ", found " + String(packageJson?.name ?? "unknown") + "@" + String(packageJson?.version ?? "unknown") + ".",
60
+ );
61
+ }
62
+ const root = dirname(packageJsonPath);
63
+ const cliEntry = join(root, UPSTREAM_CLI_RELATIVE_PATH);
64
+ if (!exists(cliEntry)) {
65
+ throw new UpstreamPackageError(
66
+ UPSTREAM_PACKAGE_NAME + "@" + UPSTREAM_PACKAGE_VERSION + " does not contain " + UPSTREAM_CLI_RELATIVE_PATH + ".",
67
+ );
68
+ }
69
+ return {
70
+ name: UPSTREAM_PACKAGE_NAME,
71
+ version: UPSTREAM_PACKAGE_VERSION,
72
+ root,
73
+ cliEntry,
74
+ };
75
+ }