@fireproof/core-cli 0.24.2-dev-cloud-api → 0.24.2-dev-clerk

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.
package/tsc-cmd.js CHANGED
@@ -8,13 +8,15 @@ function isPowerShell() {
8
8
  export async function handleTsc(args, sthis) {
9
9
  const tsc = sthis.env.get("FP_TSC") ?? "tsgo";
10
10
  const cmd = [tsc, ...args];
11
- console.log(`Using typescript: ${cmd} on ${isPowerShell() ? "PowerShell" : "Unix shell"}`);
11
+ console.log(`Using typescript: ${cmd} on ${isPowerShell() ? "PowerShell" : "UnixShell"}`);
12
12
  if (isPowerShell()) {
13
13
  $.quote = quotePowerShell;
14
14
  }
15
15
  $.verbose = false;
16
16
  const p = $({ stdio: ["inherit", "inherit", "inherit"] }) `${cmd}`;
17
- await p;
17
+ await p.catch((err) => {
18
+ process.exit(err.exitCode);
19
+ });
18
20
  }
19
21
  export function tscCmd(sthis) {
20
22
  const cmd = command({
package/tsc-cmd.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tsc-cmd.js","sourceRoot":"","sources":["../jsr/tsc-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAGvC,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAExC,SAAS,YAAY;IAEnB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC9C,MAAM,2BAA2B,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;IAG5E,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,2BAA2B,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAc,EAAE,KAAgB;IAK9D,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC;IAE9C,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAI3B,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,OAAO,YAAY,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;IAC3F,IAAI,YAAY,EAAE,EAAE,CAAC;QACnB,CAAC,CAAC,KAAK,GAAG,eAAe,CAAC;IAC5B,CAAC;IAED,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;IAClB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,CAAA,GAAG,GAAG,EAAE,CAAC;IAClE,MAAM,CAAC,CAAC;AAGV,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAgB;IACrC,MAAM,GAAG,GAAG,OAAO,CAAC;QAClB,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,oBAAoB;QACjC,IAAI,EAAE;YACJ,IAAI,EAAE,IAAI,CAAC;gBACT,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,GAAG;gBACV,YAAY,EAAE,GAAG,EAAE,CAAC,KAAK;gBACzB,WAAW,EAAE,YAAY;aAC1B,CAAC;SACH;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,OAAO,SAAS,CAAC,IAA2B,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC;KACF,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"tsc-cmd.js","sourceRoot":"","sources":["../jsr/tsc-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAGvC,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAExC,SAAS,YAAY;IAEnB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC9C,MAAM,2BAA2B,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;IAG5E,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,2BAA2B,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAc,EAAE,KAAgB;IAK9D,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC;IAE9C,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAI3B,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,OAAO,YAAY,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1F,IAAI,YAAY,EAAE,EAAE,CAAC;QACnB,CAAC,CAAC,KAAK,GAAG,eAAe,CAAC;IAC5B,CAAC;IAED,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;IAClB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,CAAA,GAAG,GAAG,EAAE,CAAC;IAClE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACpB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAgB;IACrC,MAAM,GAAG,GAAG,OAAO,CAAC;QAClB,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,oBAAoB;QACjC,IAAI,EAAE;YACJ,IAAI,EAAE,IAAI,CAAC;gBACT,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,GAAG;gBACV,YAAY,EAAE,GAAG,EAAE,CAAC,KAAK;gBACzB,WAAW,EAAE,YAAY;aAC1B,CAAC;SACH;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,OAAO,SAAS,CAAC,IAA2B,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC;KACF,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { PackageJson } from "./build-cmd.js";
2
+ interface PinVersionOptions {
3
+ readonly includeDevDeps?: boolean;
4
+ readonly workspaceVersion?: string;
5
+ }
6
+ interface CreateOptions {
7
+ readonly lockfilePath?: string;
8
+ }
9
+ export interface PackageDependencies {
10
+ name: string;
11
+ version: string;
12
+ dependencies: Record<string, string>;
13
+ peerDependencies?: Record<string, string>;
14
+ transitivePeerDependencies?: string[];
15
+ }
16
+ export declare class VersionPinner {
17
+ private allDeps;
18
+ private constructor();
19
+ private pinDependencies;
20
+ static fromLockfilePath(lockfilePath: string): Promise<VersionPinner>;
21
+ static create(options?: CreateOptions): Promise<VersionPinner>;
22
+ pinVersions(pkg: PackageJson, options?: PinVersionOptions): PackageJson;
23
+ }
24
+ export declare function getPackageDependencies(packageName: string, lockfilePath: string): Promise<PackageDependencies | null>;
25
+ export declare function getAllTransitiveDependencies(packageName: string, lockfilePath: string, depth?: number): Promise<Map<string, string>>;
26
+ export {};
@@ -0,0 +1,131 @@
1
+ import { readWantedLockfile } from "@pnpm/lockfile-file";
2
+ import { findUp } from "find-up";
3
+ export class VersionPinner {
4
+ allDeps = {};
5
+ constructor(allDeps) {
6
+ this.allDeps = allDeps;
7
+ }
8
+ pinDependencies(deps, workspaceVersion) {
9
+ const pinnedDeps = {};
10
+ if (!deps) {
11
+ return pinnedDeps;
12
+ }
13
+ for (const [name, version] of Object.entries(deps)) {
14
+ if (version.match(/^[\^~*]/) || version.match(/^[0-9]+-/)) {
15
+ if (this.allDeps[name]) {
16
+ pinnedDeps[name] = this.allDeps[name];
17
+ }
18
+ else {
19
+ pinnedDeps[name] = version;
20
+ }
21
+ }
22
+ else if (version.startsWith("workspace:")) {
23
+ pinnedDeps[name] = workspaceVersion;
24
+ }
25
+ else {
26
+ pinnedDeps[name] = version;
27
+ }
28
+ }
29
+ return pinnedDeps;
30
+ }
31
+ static async fromLockfilePath(lockfilePath) {
32
+ const projectDir = lockfilePath.replace(/\/[^/]+$/, "");
33
+ const lockfile = await readWantedLockfile(projectDir, { ignoreIncompatible: false });
34
+ if (!lockfile) {
35
+ throw new Error(`No lockfile found at ${lockfilePath}`);
36
+ }
37
+ const allDeps = {};
38
+ if (lockfile.packages) {
39
+ for (const [key, _pkgInfo] of Object.entries(lockfile.packages)) {
40
+ const match = key.match(/^\/?(@?[^@]+)@(.+?)(?:\(|$)/);
41
+ if (match) {
42
+ const [, name, version] = match;
43
+ allDeps[name] = version;
44
+ }
45
+ }
46
+ }
47
+ return new VersionPinner(allDeps);
48
+ }
49
+ static async create(options = {}) {
50
+ let lockfilePath = options.lockfilePath;
51
+ if (!lockfilePath) {
52
+ const foundPath = await findUp("pnpm-lock.yaml");
53
+ if (!foundPath) {
54
+ throw new Error("Could not find pnpm-lock.yaml in parent directories");
55
+ }
56
+ lockfilePath = foundPath;
57
+ }
58
+ return VersionPinner.fromLockfilePath(lockfilePath);
59
+ }
60
+ pinVersions(pkg, options = {}) {
61
+ const workspaceVersion = options.workspaceVersion ?? pkg.version;
62
+ const pinnedDeps = this.pinDependencies(pkg.dependencies, workspaceVersion);
63
+ const sortedDeps = {};
64
+ for (const name of Object.keys(pinnedDeps).sort()) {
65
+ sortedDeps[name] = pinnedDeps[name];
66
+ }
67
+ let sortedDevDeps;
68
+ if (options.includeDevDeps && pkg.devDependencies) {
69
+ const pinnedDevDeps = this.pinDependencies(pkg.devDependencies, workspaceVersion);
70
+ sortedDevDeps = {};
71
+ for (const name of Object.keys(pinnedDevDeps).sort()) {
72
+ sortedDevDeps[name] = pinnedDevDeps[name];
73
+ }
74
+ }
75
+ const output = {
76
+ ...pkg,
77
+ dependencies: sortedDeps,
78
+ };
79
+ if (sortedDevDeps) {
80
+ output.devDependencies = sortedDevDeps;
81
+ }
82
+ else if (!options.includeDevDeps) {
83
+ delete output.devDependencies;
84
+ }
85
+ return output;
86
+ }
87
+ }
88
+ export async function getPackageDependencies(packageName, lockfilePath) {
89
+ const projectDir = lockfilePath.replace(/\/[^/]+$/, "");
90
+ const lockfile = await readWantedLockfile(projectDir, { ignoreIncompatible: false });
91
+ if (!lockfile?.packages) {
92
+ throw new Error(`No lockfile found at ${lockfilePath}`);
93
+ }
94
+ for (const [key, pkgInfo] of Object.entries(lockfile.packages)) {
95
+ const match = key.match(/^\/?(@?[^@]+)@(.+?)(?:\(|$)/);
96
+ if (match) {
97
+ const [, name, version] = match;
98
+ if (name === packageName) {
99
+ return {
100
+ name,
101
+ version,
102
+ dependencies: pkgInfo.dependencies || {},
103
+ peerDependencies: pkgInfo.peerDependencies || {},
104
+ transitivePeerDependencies: pkgInfo.transitivePeerDependencies || [],
105
+ };
106
+ }
107
+ }
108
+ }
109
+ return null;
110
+ }
111
+ export async function getAllTransitiveDependencies(packageName, lockfilePath, depth = Infinity) {
112
+ const result = new Map();
113
+ const visited = new Set();
114
+ async function traverse(pkgName, currentDepth) {
115
+ if (currentDepth > depth || visited.has(pkgName)) {
116
+ return;
117
+ }
118
+ visited.add(pkgName);
119
+ const pkgInfo = await getPackageDependencies(pkgName, lockfilePath);
120
+ if (!pkgInfo) {
121
+ return;
122
+ }
123
+ result.set(pkgName, pkgInfo.version);
124
+ for (const [depName] of Object.entries(pkgInfo.dependencies)) {
125
+ await traverse(depName, currentDepth + 1);
126
+ }
127
+ }
128
+ await traverse(packageName, 0);
129
+ return result;
130
+ }
131
+ //# sourceMappingURL=version-pinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-pinner.js","sourceRoot":"","sources":["../jsr/version-pinner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,233 @@
1
+ import { expect, it, describe, beforeAll } from "vitest";
2
+ import { VersionPinner } from "./version-pinner.js";
3
+ import { findUp } from "find-up";
4
+ import { $ } from "zx";
5
+ import { Lazy } from "@adviser/cement";
6
+ class PnpmService {
7
+ workingDirectory;
8
+ constructor(workingDirectory) {
9
+ this.workingDirectory = workingDirectory ?? new URL(".", import.meta.url).pathname;
10
+ }
11
+ getDependencies = Lazy(async () => {
12
+ const result = await $ `cd ${this.workingDirectory} && pnpm list --depth 1 --json`.quiet();
13
+ const json = JSON.parse(result.stdout);
14
+ const deps = {};
15
+ const packages = json[0];
16
+ if (packages?.dependencies) {
17
+ for (const [name, info] of Object.entries(packages.dependencies)) {
18
+ deps[name] = info.version;
19
+ }
20
+ }
21
+ if (packages?.devDependencies) {
22
+ for (const [name, info] of Object.entries(packages.devDependencies)) {
23
+ deps[name] = info.version;
24
+ }
25
+ }
26
+ return deps;
27
+ });
28
+ async getInstalledVersion(packageName) {
29
+ const deps = await this.getDependencies();
30
+ const version = deps[packageName];
31
+ if (!version) {
32
+ throw new Error(`Could not find installed version for ${packageName}`);
33
+ }
34
+ return version;
35
+ }
36
+ }
37
+ const pkgTemplate = {
38
+ name: "@fireproof/test-package",
39
+ version: "1.0.0",
40
+ license: "MIT",
41
+ scripts: {},
42
+ exports: {},
43
+ dependencies: {},
44
+ devDependencies: {},
45
+ };
46
+ describe("VersionPinner", () => {
47
+ let pinner;
48
+ let pnpmService;
49
+ let cmdTsVersion;
50
+ let semverVersion;
51
+ let multiformatsVersion;
52
+ beforeAll(async () => {
53
+ const lockfilePath = await findUp("pnpm-lock.yaml");
54
+ if (!lockfilePath) {
55
+ throw new Error("Could not find pnpm-lock.yaml");
56
+ }
57
+ pinner = await VersionPinner.create({ lockfilePath });
58
+ pnpmService = new PnpmService();
59
+ cmdTsVersion = await pnpmService.getInstalledVersion("cmd-ts");
60
+ semverVersion = await pnpmService.getInstalledVersion("semver");
61
+ multiformatsVersion = await pnpmService.getInstalledVersion("multiformats");
62
+ });
63
+ describe("pinVersions", () => {
64
+ it("should pin unpinned dependencies with caret (^)", () => {
65
+ const pkg = {
66
+ ...pkgTemplate,
67
+ dependencies: {
68
+ "cmd-ts": `^${cmdTsVersion}`,
69
+ },
70
+ };
71
+ const result = pinner.pinVersions(pkg);
72
+ expect(result.dependencies["cmd-ts"]).toBe(cmdTsVersion);
73
+ });
74
+ it("should pin unpinned dependencies with tilde (~)", () => {
75
+ const pkg = {
76
+ ...pkgTemplate,
77
+ dependencies: {
78
+ semver: `~${semverVersion}`,
79
+ },
80
+ };
81
+ const result = pinner.pinVersions(pkg);
82
+ expect(result.dependencies["semver"]).toBe(semverVersion);
83
+ });
84
+ it("should pin unpinned dependencies with asterisk (*)", () => {
85
+ const pkg = {
86
+ ...pkgTemplate,
87
+ dependencies: {
88
+ multiformats: "*",
89
+ },
90
+ };
91
+ const result = pinner.pinVersions(pkg);
92
+ expect(result.dependencies["multiformats"]).toBe(multiformatsVersion);
93
+ });
94
+ it("should keep already pinned versions as-is", () => {
95
+ const pkg = {
96
+ ...pkgTemplate,
97
+ dependencies: {
98
+ "cmd-ts": cmdTsVersion,
99
+ semver: semverVersion,
100
+ },
101
+ };
102
+ const result = pinner.pinVersions(pkg);
103
+ expect(result.dependencies["cmd-ts"]).toBe(cmdTsVersion);
104
+ expect(result.dependencies["semver"]).toBe(semverVersion);
105
+ });
106
+ it("should keep pinned versions as-is without looking in lockfile", () => {
107
+ const pkg = {
108
+ ...pkgTemplate,
109
+ dependencies: {
110
+ "fake-package": "1.2.3",
111
+ "another-fake": "4.5.6",
112
+ },
113
+ };
114
+ const result = pinner.pinVersions(pkg);
115
+ expect(result.dependencies["fake-package"]).toBe("1.2.3");
116
+ expect(result.dependencies["another-fake"]).toBe("4.5.6");
117
+ });
118
+ it("should replace workspace: dependencies with package version", () => {
119
+ const pkg = {
120
+ ...pkgTemplate,
121
+ dependencies: {
122
+ "@fireproof/vendor": "workspace:0.0.0",
123
+ "@fireproof/core": "workspace:*",
124
+ },
125
+ };
126
+ const result = pinner.pinVersions(pkg);
127
+ expect(result.dependencies["@fireproof/vendor"]).toBe("1.0.0");
128
+ expect(result.dependencies["@fireproof/core"]).toBe("1.0.0");
129
+ });
130
+ it("should not include transitive dependencies", async () => {
131
+ const pkg = {
132
+ ...pkgTemplate,
133
+ dependencies: {
134
+ "cmd-ts": `^${cmdTsVersion}`,
135
+ },
136
+ };
137
+ const result = pinner.pinVersions(pkg);
138
+ expect(Object.keys(result.dependencies)).toEqual(["cmd-ts"]);
139
+ expect(result.dependencies["cmd-ts"]).toBe(cmdTsVersion);
140
+ });
141
+ it("should sort dependencies alphabetically", async () => {
142
+ const zxVersion = await pnpmService.getInstalledVersion("zx");
143
+ const pkg = {
144
+ ...pkgTemplate,
145
+ dependencies: {
146
+ zx: `^${zxVersion}`,
147
+ semver: `^${semverVersion}`,
148
+ "cmd-ts": `^${cmdTsVersion}`,
149
+ multiformats: `^${multiformatsVersion}`,
150
+ },
151
+ };
152
+ const result = pinner.pinVersions(pkg);
153
+ const keys = Object.keys(result.dependencies);
154
+ expect(keys).toEqual(["cmd-ts", "multiformats", "semver", "zx"]);
155
+ });
156
+ it("should handle mixed pinned and unpinned dependencies", () => {
157
+ const pkg = {
158
+ ...pkgTemplate,
159
+ version: "2.0.0",
160
+ dependencies: {
161
+ "cmd-ts": cmdTsVersion,
162
+ semver: `^${semverVersion}`,
163
+ "@fireproof/vendor": "workspace:0.0.0",
164
+ multiformats: `~${multiformatsVersion}`,
165
+ },
166
+ };
167
+ const result = pinner.pinVersions(pkg);
168
+ expect(result.dependencies["cmd-ts"]).toBe(cmdTsVersion);
169
+ expect(result.dependencies["semver"]).toBe(semverVersion);
170
+ expect(result.dependencies["@fireproof/vendor"]).toBe("2.0.0");
171
+ expect(result.dependencies["multiformats"]).toBe(multiformatsVersion);
172
+ });
173
+ it("should remove devDependencies by default", () => {
174
+ const pkg = {
175
+ ...pkgTemplate,
176
+ dependencies: {
177
+ "cmd-ts": `^${cmdTsVersion}`,
178
+ },
179
+ devDependencies: {
180
+ vitest: "^4.0.8",
181
+ },
182
+ };
183
+ const result = pinner.pinVersions(pkg);
184
+ expect(result.devDependencies).toBeUndefined();
185
+ });
186
+ it("should pin devDependencies when includeDevDeps option is true", async () => {
187
+ const vitestVersion = await pnpmService.getInstalledVersion("vitest");
188
+ const pkg = {
189
+ ...pkgTemplate,
190
+ dependencies: {
191
+ "cmd-ts": `^${cmdTsVersion}`,
192
+ },
193
+ devDependencies: {
194
+ vitest: `^${vitestVersion}`,
195
+ },
196
+ };
197
+ const result = pinner.pinVersions(pkg, { includeDevDeps: true });
198
+ expect(result.devDependencies).toBeDefined();
199
+ expect(result.devDependencies?.vitest).toBe(vitestVersion);
200
+ });
201
+ });
202
+ describe("VersionPinner.create", () => {
203
+ it("should create instance with explicit lockfile path", async () => {
204
+ const lockfilePath = await findUp("pnpm-lock.yaml");
205
+ if (!lockfilePath) {
206
+ throw new Error("Could not find pnpm-lock.yaml");
207
+ }
208
+ const pinner = await VersionPinner.create({ lockfilePath });
209
+ expect(pinner).toBeInstanceOf(VersionPinner);
210
+ });
211
+ it("should create instance with auto-discovered lockfile", async () => {
212
+ const pinner = await VersionPinner.create();
213
+ expect(pinner).toBeInstanceOf(VersionPinner);
214
+ });
215
+ it("should throw error if lockfile not found with explicit path", async () => {
216
+ await expect(VersionPinner.create({ lockfilePath: "/non/existent/pnpm-lock.yaml" })).rejects.toThrow("No lockfile found");
217
+ });
218
+ });
219
+ describe("VersionPinner.fromLockfilePath", () => {
220
+ it("should create instance from lockfile path", async () => {
221
+ const lockfilePath = await findUp("pnpm-lock.yaml");
222
+ if (!lockfilePath) {
223
+ throw new Error("Could not find pnpm-lock.yaml");
224
+ }
225
+ const pinner = await VersionPinner.fromLockfilePath(lockfilePath);
226
+ expect(pinner).toBeInstanceOf(VersionPinner);
227
+ });
228
+ it("should throw error if lockfile does not exist", async () => {
229
+ await expect(VersionPinner.fromLockfilePath("/non/existent/pnpm-lock.yaml")).rejects.toThrow("No lockfile found");
230
+ });
231
+ });
232
+ });
233
+ //# sourceMappingURL=version-pinner.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-pinner.test.js","sourceRoot":"","sources":["../jsr/version-pinner.test.ts"],"names":[],"mappings":"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"}
package/vitest.config.js CHANGED
@@ -2,6 +2,8 @@ import { defineConfig } from "vitest/config";
2
2
  export default defineConfig({
3
3
  test: {
4
4
  name: "core-cli",
5
+ exclude: ["dist/**", "node_modules/**", "react/**", "examples/**", "gateway/indexeddb"],
6
+ include: ["**/*test.?(c|m)[jt]s?(x)"],
5
7
  },
6
8
  });
7
9
  //# sourceMappingURL=vitest.config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"vitest.config.js","sourceRoot":"","sources":["../jsr/vitest.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,eAAe,YAAY,CAAC;IAC1B,IAAI,EAAE;QACJ,IAAI,EAAE,UAAU;KACjB;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"vitest.config.js","sourceRoot":"","sources":["../jsr/vitest.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,eAAe,YAAY,CAAC;IAC1B,IAAI,EAAE;QACJ,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,CAAC,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,aAAa,EAAE,mBAAmB,CAAC;QACvF,OAAO,EAAE,CAAC,0BAA0B,CAAC;KACtC;CACF,CAAC,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { SuperThis } from "@fireproof/core-types-base";
2
+ export declare function wellKnownCmd(_sthis: SuperThis): Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
3
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
4
+ json: boolean;
5
+ jsons: boolean;
6
+ pem: boolean;
7
+ env: boolean;
8
+ presetKey: string;
9
+ envPrefix: string;
10
+ urls: string[];
11
+ }>>;
12
+ } & import("cmd-ts/dist/cjs/helpdoc.js").PrintHelp & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/helpdoc.js").Named & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned> & import("cmd-ts/dist/cjs/argparser.js").Register & import("cmd-ts/dist/cjs/runner.js").Handling<{
13
+ json: boolean;
14
+ jsons: boolean;
15
+ pem: boolean;
16
+ env: boolean;
17
+ presetKey: string;
18
+ envPrefix: string;
19
+ urls: string[];
20
+ }, Promise<void>> & {
21
+ run(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<Promise<void>>>;
22
+ } & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned & import("cmd-ts/dist/cjs/helpdoc.js").Descriptive & import("cmd-ts/dist/cjs/helpdoc.js").Aliased>;
@@ -0,0 +1,111 @@
1
+ import * as rt from "@fireproof/core-runtime";
2
+ import { command, restPositionals, string, option, flag } from "cmd-ts";
3
+ import { exportSPKI } from "jose";
4
+ export function wellKnownCmd(_sthis) {
5
+ return command({
6
+ name: "well-known",
7
+ description: "Fetch well-known JWKS from URLs",
8
+ version: "1.0.0",
9
+ args: {
10
+ json: flag({
11
+ long: "json",
12
+ description: "Output as JSON (default)",
13
+ defaultValue: () => false,
14
+ }),
15
+ jsons: flag({
16
+ long: "jsons",
17
+ description: "Output as single-line quoted JSON string",
18
+ defaultValue: () => false,
19
+ }),
20
+ pem: flag({
21
+ long: "pem",
22
+ description: "Output as PEM format per key",
23
+ defaultValue: () => false,
24
+ }),
25
+ env: flag({
26
+ long: "env",
27
+ description: "Output as environment variables with single-lined PEM",
28
+ defaultValue: () => false,
29
+ }),
30
+ presetKey: option({
31
+ type: string,
32
+ long: "presetKey",
33
+ defaultValue: () => "",
34
+ description: "Preset key to include (will be processed with coerceJWKPublic)",
35
+ }),
36
+ envPrefix: option({
37
+ type: string,
38
+ long: "env-prefix",
39
+ defaultValue: () => "CLERK_PUB_JWT_KEY",
40
+ description: "Prefix for environment variable names (used with --env)",
41
+ }),
42
+ urls: restPositionals({
43
+ type: string,
44
+ displayName: "urls",
45
+ description: "URLs to fetch well-known JWKS from",
46
+ }),
47
+ },
48
+ handler: async (args) => {
49
+ const urls = args.urls.flatMap((url) => url.split(",").map((u) => u.trim())).filter((u) => u.length > 0);
50
+ const presetKeys = args.presetKey ? await rt.sts.coerceJWKPublic(_sthis, args.presetKey) : [];
51
+ const results = urls.length > 0
52
+ ? await rt.sts.fetchWellKnownJwks(urls, {
53
+ fetchTimeoutMs: 5000,
54
+ })
55
+ : [];
56
+ if (urls.length === 0 && presetKeys.length === 0) {
57
+ console.error("Error: At least one URL or presetKey must be provided");
58
+ process.exit(1);
59
+ }
60
+ const hasCustomEnvPrefix = args.envPrefix !== "CLERK_PUB_JWT_KEY";
61
+ const format = args.pem ? "pem" : args.env || hasCustomEnvPrefix ? "env" : args.jsons ? "jsons" : "json";
62
+ const keyMap = new Map();
63
+ for (const key of presetKeys) {
64
+ if (key.kid) {
65
+ keyMap.set(key.kid, key);
66
+ }
67
+ else {
68
+ keyMap.set(JSON.stringify(key), key);
69
+ }
70
+ }
71
+ for (const result of results) {
72
+ if (result.type === "ok") {
73
+ for (const key of result.keys) {
74
+ if (key.kid) {
75
+ keyMap.set(key.kid, key);
76
+ }
77
+ else {
78
+ keyMap.set(JSON.stringify(key), key);
79
+ }
80
+ }
81
+ }
82
+ }
83
+ const combinedOutput = { keys: Array.from(keyMap.values()) };
84
+ switch (format) {
85
+ case "json":
86
+ console.log(JSON.stringify(combinedOutput, null, 2));
87
+ break;
88
+ case "pem":
89
+ {
90
+ for (const jwk of combinedOutput.keys) {
91
+ const rKey = await rt.sts.importJWK(jwk);
92
+ if (rKey.isErr()) {
93
+ console.error(`Error importing JWK: ${rKey.Err()}`);
94
+ process.exit(1);
95
+ }
96
+ console.log(await exportSPKI(rKey.Ok().key));
97
+ }
98
+ }
99
+ break;
100
+ case "env":
101
+ console.log(`${args.envPrefix}=${JSON.stringify(JSON.stringify(combinedOutput))}`);
102
+ break;
103
+ case "jsons":
104
+ default:
105
+ console.log(JSON.stringify(combinedOutput));
106
+ break;
107
+ }
108
+ },
109
+ });
110
+ }
111
+ //# sourceMappingURL=well-known-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"well-known-cmd.js","sourceRoot":"","sources":["../jsr/well-known-cmd.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,18 @@ import * as rt from "@fireproof/core-runtime";
3
3
  import { param } from "@adviser/cement";
4
4
  import fs from "fs/promises";
5
5
  export async function writeEnvFile(sthis, envFname, outFname, env, vals, doNotOverwrite, json) {
6
+ let render;
7
+ if (json) {
8
+ render = JSON.stringify(vals, null, 2);
9
+ }
10
+ else {
11
+ render = Object.entries(vals)
12
+ .map(([k, v]) => `${k}=${v}`)
13
+ .join("\n");
14
+ }
6
15
  if (outFname === "-") {
7
- outFname = "/dev/stdout";
16
+ process.stdout.write(render + "\n");
17
+ return "-";
8
18
  }
9
19
  const fname = outFname ?? sthis.pathOps.join(sthis.pathOps.dirname(envFname), `.dev.vars.${env}`);
10
20
  if (doNotOverwrite &&
@@ -14,16 +24,7 @@ export async function writeEnvFile(sthis, envFname, outFname, env, vals, doNotOv
14
24
  .catch(() => false))) {
15
25
  return fname;
16
26
  }
17
- let render;
18
- if (json) {
19
- render = JSON.stringify(vals, null, 2);
20
- }
21
- else {
22
- render = Object.entries(vals)
23
- .map(([k, v]) => `${k}=${v}`)
24
- .join("\n");
25
- }
26
- await fs.writeFile(outFname ?? fname, render);
27
+ await fs.writeFile(fname, render);
27
28
  return fname;
28
29
  }
29
30
  export function writeEnvCmd(sthis) {
@@ -100,4 +101,4 @@ export function writeEnvCmd(sthis) {
100
101
  },
101
102
  });
102
103
  }
103
- //# sourceMappingURL=write-env.js.map
104
+ //# sourceMappingURL=write-env-cmd.js.map