@danypops/pi-packed 0.27.11 → 0.27.13

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.
Files changed (40) hide show
  1. package/dist/adoption/check.d.ts +54 -0
  2. package/dist/adoption/check.d.ts.map +1 -0
  3. package/dist/adoption/duplicate-dependency-doctor.d.ts +17 -0
  4. package/dist/adoption/duplicate-dependency-doctor.d.ts.map +1 -0
  5. package/dist/adoption/install-validation.d.ts +63 -0
  6. package/dist/adoption/install-validation.d.ts.map +1 -0
  7. package/dist/adoption/module-freshness.d.ts +39 -0
  8. package/dist/adoption/module-freshness.d.ts.map +1 -0
  9. package/dist/adoption/service-doctor.d.ts +21 -0
  10. package/dist/adoption/service-doctor.d.ts.map +1 -0
  11. package/dist/adoption/smoke.d.ts +39 -0
  12. package/dist/adoption/smoke.d.ts.map +1 -0
  13. package/dist/daemon/daemon-service.d.ts +281 -0
  14. package/dist/daemon/daemon-service.d.ts.map +1 -0
  15. package/dist/doctor-format.js +16 -0
  16. package/dist/packages/installed.d.ts +32 -0
  17. package/dist/packages/installed.d.ts.map +1 -0
  18. package/dist/packages/package.d.ts +272 -0
  19. package/dist/packages/package.d.ts.map +1 -0
  20. package/dist/public/client.d.ts.map +1 -0
  21. package/dist/public/doctor-format.d.ts +57 -0
  22. package/dist/public/doctor-format.d.ts.map +1 -0
  23. package/dist/public/protocol.d.ts.map +1 -0
  24. package/dist/publish/publish.d.ts +120 -0
  25. package/dist/publish/publish.d.ts.map +1 -0
  26. package/dist/shared/constants.d.ts +51 -0
  27. package/dist/shared/constants.d.ts.map +1 -0
  28. package/extension/src/doctor-render.ts +32 -0
  29. package/extension/src/vehicle-tools.ts +16 -0
  30. package/package.json +8 -4
  31. package/service/src/adoption/doctor.ts +20 -78
  32. package/service/src/adoption/service-doctor.ts +30 -2
  33. package/service/src/public/doctor-format.ts +89 -0
  34. package/service/test/public-boundary.test.ts +5 -1
  35. package/service/test/service-doctor.test.ts +54 -0
  36. package/service/tsconfig.public.json +11 -2
  37. package/dist/client.d.ts.map +0 -1
  38. package/dist/protocol.d.ts.map +0 -1
  39. /package/dist/{client.d.ts → public/client.d.ts} +0 -0
  40. /package/dist/{protocol.d.ts → public/protocol.d.ts} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danypops/pi-packed",
3
- "version": "0.27.11",
3
+ "version": "0.27.13",
4
4
  "description": "Pi package lifecycle, validation, daemon, tools, profiles, and TUI",
5
5
  "type": "module",
6
6
  "bin": {
@@ -22,7 +22,7 @@
22
22
  }
23
23
  },
24
24
  "scripts": {
25
- "build": "rm -rf dist && bun build service/src/public/client.ts service/src/public/protocol.ts --outdir dist --target node --format esm --minify && bunx tsc -p service/tsconfig.public.json",
25
+ "build": "rm -rf dist && bun build service/src/public/client.ts service/src/public/protocol.ts service/src/public/doctor-format.ts --outdir dist --target node --format esm --minify && bunx tsc -p service/tsconfig.public.json",
26
26
  "test": "bun run build && bun test service/test test",
27
27
  "typecheck": "bunx tsc --noEmit"
28
28
  },
@@ -57,12 +57,16 @@
57
57
  },
58
58
  "exports": {
59
59
  "./client": {
60
- "types": "./dist/client.d.ts",
60
+ "types": "./dist/public/client.d.ts",
61
61
  "import": "./dist/client.js"
62
62
  },
63
63
  "./protocol": {
64
- "types": "./dist/protocol.d.ts",
64
+ "types": "./dist/public/protocol.d.ts",
65
65
  "import": "./dist/protocol.js"
66
+ },
67
+ "./doctor-format": {
68
+ "types": "./dist/public/doctor-format.d.ts",
69
+ "import": "./dist/doctor-format.js"
66
70
  }
67
71
  },
68
72
  "files": ["extension", "service", "dist", "README.md"]
@@ -6,14 +6,22 @@
6
6
  * kind of collision at actual startup, one package at a time; doctor
7
7
  * answers the same question proactively, before pi ever runs.
8
8
  */
9
- import { existsSync } from "node:fs";
9
+ import { existsSync, statSync } from "node:fs";
10
10
  import { join } from "node:path";
11
11
  import { createNodeServiceInstallDeps } from "@danypops/vehicle-server/service";
12
12
  import { listPackageResources, type PackageResources, resolveInstalledDir } from "../packages/resources.ts";
13
- import { type DuplicateDependencyDiagnostic, findDuplicateDependencyVersions } from "./duplicate-dependency-doctor.ts";
14
- import type { ModuleFreshnessDiagnostic } from "./module-freshness.ts";
15
- import { checkServiceUnitPaths, type ServiceUnitDiagnostic } from "./service-doctor.ts";
16
- import { runExtensionSmoke, type SmokeOptions, type SmokeRegistrations } from "./smoke.ts";
13
+ import {
14
+ type DoctorClaim,
15
+ type DoctorConflict,
16
+ type DoctorExtensionResult,
17
+ type DoctorReport,
18
+ formatDoctorReport,
19
+ } from "../public/doctor-format.ts";
20
+ import { findDuplicateDependencyVersions } from "./duplicate-dependency-doctor.ts";
21
+ import { checkServiceUnitPaths } from "./service-doctor.ts";
22
+ import { runExtensionSmoke, type SmokeOptions } from "./smoke.ts";
23
+
24
+ export { type DoctorClaim, type DoctorConflict, type DoctorExtensionResult, type DoctorReport, formatDoctorReport } from "../public/doctor-format.ts";
17
25
 
18
26
  const REGISTRATION_KINDS = ["tools", "commands", "shortcuts", "flags"] as const;
19
27
  type RegistrationKind = (typeof REGISTRATION_KINDS)[number];
@@ -26,51 +34,6 @@ const CONFLICT_KIND: Record<RegistrationKind, "tool" | "command" | "shortcut" |
26
34
 
27
35
  const MAX_EXTENSIONS_SCANNED = 50;
28
36
 
29
- export interface DoctorClaim {
30
- name: string;
31
- source: string;
32
- scope: "global" | "project";
33
- extension: string;
34
- }
35
-
36
- export interface DoctorConflict {
37
- kind: "tool" | "command" | "shortcut" | "flag";
38
- name: string;
39
- claimants: DoctorClaim[];
40
- }
41
-
42
- export interface DoctorExtensionResult {
43
- name: string;
44
- source: string;
45
- scope: "global" | "project";
46
- extension: string;
47
- status: string;
48
- registrations: SmokeRegistrations;
49
- message?: string;
50
- }
51
-
52
- export interface DoctorReport {
53
- ok: boolean;
54
- conflicts: DoctorConflict[];
55
- extensions: DoctorExtensionResult[];
56
- scanned: number;
57
- truncated: boolean;
58
- /** A daemon-backed package's systemd --user unit referencing a path that no longer exists on disk -- see service-doctor.ts. Empty (not omitted) on a platform without systemd --user coverage. */
59
- serviceUnits: ServiceUnitDiagnostic[];
60
- /** Any @danypops/* package resolved to more than one distinct version anywhere in piHome's own npm tree -- see duplicate-dependency-doctor.ts's own doc comment for why this stays out of `ok`. */
61
- duplicateDependencies: DuplicateDependencyDiagnostic[];
62
- /**
63
- * Whether THIS running process still holds a stale in-memory copy of one
64
- * of its own runtime dependencies, loaded once at startup -- see
65
- * module-freshness.ts. Only meaningful for a long-running daemon process
66
- * (the one thing that can actually go stale); omitted entirely for a
67
- * standalone `packed doctor` invocation (a fresh CLI process has nothing
68
- * of its own to compare against). Populated by the daemon's own
69
- * doctor.run route, never by runDoctor() itself.
70
- */
71
- moduleFreshness?: ModuleFreshnessDiagnostic[];
72
- }
73
-
74
37
  interface ScanJob {
75
38
  group: PackageResources;
76
39
  dir: string;
@@ -134,6 +97,13 @@ export async function runDoctor(piHome: string, projectRoot?: string, options: S
134
97
  const serviceReport = checkServiceUnitPaths(piHome, projectRoot, {
135
98
  ...createNodeServiceInstallDeps(),
136
99
  fileExists: existsSync,
100
+ getMtimeMs: (path) => {
101
+ try {
102
+ return statSync(path).mtimeMs;
103
+ } catch {
104
+ return undefined;
105
+ }
106
+ },
137
107
  });
138
108
 
139
109
  return {
@@ -147,32 +117,4 @@ export async function runDoctor(piHome: string, projectRoot?: string, options: S
147
117
  };
148
118
  }
149
119
 
150
- function formatClaimant(claim: DoctorClaim): string {
151
- return `${claim.name} (${claim.source}) [${claim.scope}] ${claim.extension}`;
152
- }
153
120
 
154
- export function formatDoctorReport(report: DoctorReport, json: boolean): string {
155
- if (json) return `${JSON.stringify(report)}\n`;
156
- let out = `${report.ok ? "PASS" : "FAIL"} — ${report.scanned} extension(s) scanned, ${report.conflicts.length} conflict(s)\n`;
157
- for (const conflict of report.conflicts) {
158
- out += `\nCONFLICT ${conflict.kind} "${conflict.name}" claimed by:\n`;
159
- for (const claimant of conflict.claimants) out += ` - ${formatClaimant(claimant)}\n`;
160
- }
161
- for (const extension of report.extensions) {
162
- if (extension.status === "ok") continue;
163
- out += `\n${extension.status.toUpperCase()} ${formatClaimant({ name: extension.name, source: extension.source, scope: extension.scope, extension: extension.extension })}${extension.message ? `: ${extension.message}` : ""}\n`;
164
- }
165
- for (const diagnostic of report.serviceUnits) {
166
- out += `\n${diagnostic.severity.toUpperCase()} ${diagnostic.code} ${diagnostic.package} (${diagnostic.unitName}.service): ${diagnostic.message}\n`;
167
- }
168
- for (const duplicate of report.duplicateDependencies) {
169
- const versions = duplicate.locations.map((location) => `${location.version} (${location.path})`).join(", ");
170
- out += `\nDUPLICATE_DEPENDENCY_VERSION ${duplicate.name}: ${versions}\n`;
171
- }
172
- for (const module of report.moduleFreshness ?? []) {
173
- if (!module.stale) continue;
174
- out += `\nSTALE_MODULE_CACHE ${module.name}: the daemon loaded ${module.loadedVersion ?? "an unknown version"} at startup, but ${module.currentVersion ?? "a different version"} is now on disk -- restart the daemon (systemctl --user restart pi-packed.service) to pick it up.\n`;
175
- }
176
- if (report.truncated) out += "\nOutput truncated: more enabled extensions exist than this run's bound.\n";
177
- return out;
178
- }
@@ -1,9 +1,10 @@
1
+ import { join } from "node:path";
1
2
  import type { ServiceInstallDeps } from "@danypops/vehicle-server/service";
2
3
  import { readInstalledPackagesAcrossScopes } from "../packages/installed.ts";
3
4
  import { resolveDaemonServiceSpec } from "../daemon/daemon-service.ts";
4
5
 
5
6
  export interface ServiceUnitDiagnostic {
6
- code: "SERVICE_EXEC_PATH_MISSING" | "SERVICE_NOT_RUNNING" | "SERVICE_STATUS_UNAVAILABLE";
7
+ code: "SERVICE_EXEC_PATH_MISSING" | "SERVICE_NOT_RUNNING" | "SERVICE_STATUS_UNAVAILABLE" | "SERVICE_STALE_CODE";
7
8
  severity: "error" | "warning";
8
9
  package: string;
9
10
  unitName: string;
@@ -18,10 +19,23 @@ export interface ServiceDoctorReport {
18
19
 
19
20
  export interface ServiceDoctorDeps extends ServiceInstallDeps {
20
21
  fileExists(path: string): boolean;
22
+ /** Undefined (never throws) when the path doesn't exist or can't be stat'd. */
23
+ getMtimeMs(path: string): number | undefined;
21
24
  }
22
25
 
23
26
  interface ArmadaStatus {
24
- vehicles?: Array<{ name?: string; executable?: string; nativeStatus?: string; ready?: boolean }>;
27
+ vehicles?: Array<{ name?: string; executable?: string; nativeStatus?: string; ready?: boolean; nativePid?: number }>;
28
+ }
29
+
30
+ /** A boot/registration race can leave a process's own start time a few seconds behind its package.json's write; only a gap past this is treated as a genuinely stale running daemon. */
31
+ const STALE_CODE_GRACE_MS = 15_000;
32
+
33
+ /** Undefined (never throws) when `pid` isn't a running process this host can inspect, or `ps` isn't available. */
34
+ function processStartTimeMs(pid: number, deps: ServiceDoctorDeps): number | undefined {
35
+ const result = deps.runCommand("ps", ["-o", "lstart=", "-p", String(pid)]);
36
+ if (!result.ok) return undefined;
37
+ const parsed = Date.parse(result.output.trim());
38
+ return Number.isNaN(parsed) ? undefined : parsed;
25
39
  }
26
40
 
27
41
  export function checkServiceUnitPaths(
@@ -96,6 +110,20 @@ export function checkServiceUnitPaths(
96
110
  unitName: managedPackage.spec.name,
97
111
  message: `${managedPackage.spec.name}'s Armada service is ${vehicle.nativeStatus}; start it through Armada before connecting`,
98
112
  });
113
+ continue;
114
+ }
115
+ if (vehicle.nativePid !== undefined) {
116
+ const packageJsonMtime = deps.getMtimeMs(join(piHome, "npm", "node_modules", managedPackage.packageName, "package.json"));
117
+ const startedAt = processStartTimeMs(vehicle.nativePid, deps);
118
+ if (packageJsonMtime !== undefined && startedAt !== undefined && startedAt < packageJsonMtime - STALE_CODE_GRACE_MS) {
119
+ diagnostics.push({
120
+ code: "SERVICE_STALE_CODE",
121
+ severity: "warning",
122
+ package: managedPackage.packageName,
123
+ unitName: managedPackage.spec.name,
124
+ message: `${managedPackage.spec.name}'s process (pid ${vehicle.nativePid}) started before its own package.json was last written -- it is very likely still running old in-memory code; restart it through Armada`,
125
+ });
126
+ }
99
127
  }
100
128
  }
101
129
  return { ok: diagnostics.length === 0, diagnostics, checked };
@@ -0,0 +1,89 @@
1
+ /**
2
+ * doctor.run's report shape and its own human-readable formatter (the CLI's `packed doctor`
3
+ * non-JSON path) -- kept as its own leaf module, imported back by adoption/doctor.ts rather than
4
+ * defined there and re-exported, specifically so this file's only real (non-type) dependency is
5
+ * its own formatDoctorReport/formatClaimant bodies. Every field type below crosses module
6
+ * boundaries as `import type` only (fully erased at compile time), so a consumer needing just the
7
+ * formatter -- e.g. pi-packed's own extension, rendering a Pi tool result -- never pulls in
8
+ * runDoctor's own real runtime dependencies (subprocess-based extension smoke-testing, npm-tree
9
+ * scanning, systemd status shell-outs, ...) just to format a report it already has.
10
+ */
11
+ import type { DuplicateDependencyDiagnostic } from "../adoption/duplicate-dependency-doctor.ts";
12
+ import type { ModuleFreshnessDiagnostic } from "../adoption/module-freshness.ts";
13
+ import type { ServiceUnitDiagnostic } from "../adoption/service-doctor.ts";
14
+ import type { SmokeRegistrations } from "../adoption/smoke.ts";
15
+
16
+ export interface DoctorClaim {
17
+ name: string;
18
+ source: string;
19
+ scope: "global" | "project";
20
+ extension: string;
21
+ }
22
+
23
+ export interface DoctorConflict {
24
+ kind: "tool" | "command" | "shortcut" | "flag";
25
+ name: string;
26
+ claimants: DoctorClaim[];
27
+ }
28
+
29
+ export interface DoctorExtensionResult {
30
+ name: string;
31
+ source: string;
32
+ scope: "global" | "project";
33
+ extension: string;
34
+ status: string;
35
+ registrations: SmokeRegistrations;
36
+ message?: string;
37
+ }
38
+
39
+ export interface DoctorReport {
40
+ ok: boolean;
41
+ conflicts: DoctorConflict[];
42
+ extensions: DoctorExtensionResult[];
43
+ scanned: number;
44
+ truncated: boolean;
45
+ /** A daemon-backed package's systemd --user unit referencing a path that no longer exists on disk -- see service-doctor.ts. Empty (not omitted) on a platform without systemd --user coverage. */
46
+ serviceUnits: ServiceUnitDiagnostic[];
47
+ /** Any @danypops/* package resolved to more than one distinct version anywhere in piHome's own npm tree -- see duplicate-dependency-doctor.ts's own doc comment for why this stays out of `ok`. */
48
+ duplicateDependencies: DuplicateDependencyDiagnostic[];
49
+ /**
50
+ * Whether THIS running process still holds a stale in-memory copy of one
51
+ * of its own runtime dependencies, loaded once at startup -- see
52
+ * module-freshness.ts. Only meaningful for a long-running daemon process
53
+ * (the one thing that can actually go stale); omitted entirely for a
54
+ * standalone `packed doctor` invocation (a fresh CLI process has nothing
55
+ * of its own to compare against). Populated by the daemon's own
56
+ * doctor.run route, never by runDoctor() itself.
57
+ */
58
+ moduleFreshness?: ModuleFreshnessDiagnostic[];
59
+ }
60
+
61
+ function formatClaimant(claim: DoctorClaim): string {
62
+ return `${claim.name} (${claim.source}) [${claim.scope}] ${claim.extension}`;
63
+ }
64
+
65
+ export function formatDoctorReport(report: DoctorReport, json: boolean): string {
66
+ if (json) return `${JSON.stringify(report)}\n`;
67
+ let out = `${report.ok ? "PASS" : "FAIL"} — ${report.scanned} extension(s) scanned, ${report.conflicts.length} conflict(s)\n`;
68
+ for (const conflict of report.conflicts) {
69
+ out += `\nCONFLICT ${conflict.kind} "${conflict.name}" claimed by:\n`;
70
+ for (const claimant of conflict.claimants) out += ` - ${formatClaimant(claimant)}\n`;
71
+ }
72
+ for (const extension of report.extensions) {
73
+ if (extension.status === "ok") continue;
74
+ out += `\n${extension.status.toUpperCase()} ${formatClaimant({ name: extension.name, source: extension.source, scope: extension.scope, extension: extension.extension })}${extension.message ? `: ${extension.message}` : ""}\n`;
75
+ }
76
+ for (const diagnostic of report.serviceUnits) {
77
+ out += `\n${diagnostic.severity.toUpperCase()} ${diagnostic.code} ${diagnostic.package} (${diagnostic.unitName}.service): ${diagnostic.message}\n`;
78
+ }
79
+ for (const duplicate of report.duplicateDependencies) {
80
+ const versions = duplicate.locations.map((location) => `${location.version} (${location.path})`).join(", ");
81
+ out += `\nDUPLICATE_DEPENDENCY_VERSION ${duplicate.name}: ${versions}\n`;
82
+ }
83
+ for (const module of report.moduleFreshness ?? []) {
84
+ if (!module.stale) continue;
85
+ out += `\nSTALE_MODULE_CACHE ${module.name}: the daemon loaded ${module.loadedVersion ?? "an unknown version"} at startup, but ${module.currentVersion ?? "a different version"} is now on disk -- restart the daemon (systemctl --user restart pi-packed.service) to pick it up.\n`;
86
+ }
87
+ if (report.truncated) out += "\nOutput truncated: more enabled extensions exist than this run's bound.\n";
88
+ return out;
89
+ }
@@ -46,7 +46,11 @@ describe("compiled public boundary", () => {
46
46
  ]);
47
47
  expect({ code, stderr }).toEqual({ code: 0, stderr: "" });
48
48
  expect(stdout.trim()).toBe("function");
49
- const publicFiles = ["client.js", "client.d.ts", "protocol.d.ts"]
49
+ // client.js/protocol.js stay flat (bun build's own entry-point-basename output), but their
50
+ // .d.ts siblings nest under dist/public/ -- tsconfig.public.json's rootDir covers the whole
51
+ // service tree now (doctor-format.ts's type-only cross-references require it), which changes
52
+ // where tsc emits declarations without touching the flat JS bundle layout at all.
53
+ const publicFiles = ["client.js", "public/client.d.ts", "public/protocol.d.ts"]
50
54
  .map((name) => readFileSync(join(root, "dist", name), "utf8"))
51
55
  .join("\n");
52
56
  expect(publicFiles).not.toMatch(/\bBun\b|bun:sqlite|\.\.\/(?:daemon|db|check)/);
@@ -37,6 +37,7 @@ function fakeDeps(status: unknown, fileExists = true): ServiceDoctorDeps {
37
37
  return {
38
38
  armadaCliPath: "/armada/cli.js",
39
39
  fileExists: () => fileExists,
40
+ getMtimeMs: () => undefined,
40
41
  runCommand: () => ({ ok: true, output: JSON.stringify(status) }),
41
42
  };
42
43
  }
@@ -125,6 +126,59 @@ describe("checkServiceUnitPaths", () => {
125
126
  });
126
127
  });
127
128
 
129
+ it("reports a running Vehicle whose process predates its own package.json as stale code, not an error", () => {
130
+ const home = piHome(["npm:fakedaemon"]);
131
+ const dir = installDaemonPackage(home, "fakedaemon");
132
+ const deps: ServiceDoctorDeps = {
133
+ armadaCliPath: "/armada/cli.js",
134
+ fileExists: () => true,
135
+ getMtimeMs: () => Date.now(),
136
+ runCommand: (command) =>
137
+ command === "ps"
138
+ ? { ok: true, output: new Date(Date.now() - 60_000).toString() }
139
+ : {
140
+ ok: true,
141
+ output: JSON.stringify({
142
+ vehicles: [{ name: "fakedaemon", executable: join(dir, "cli.ts"), nativeStatus: "running", nativePid: 4242 }],
143
+ }),
144
+ },
145
+ };
146
+ const report = checkServiceUnitPaths(home, undefined, deps);
147
+ expect(report).toEqual({
148
+ ok: false,
149
+ checked: 1,
150
+ diagnostics: [
151
+ {
152
+ code: "SERVICE_STALE_CODE",
153
+ severity: "warning",
154
+ package: "fakedaemon",
155
+ unitName: "fakedaemon",
156
+ message: expect.stringContaining("pid 4242"),
157
+ },
158
+ ],
159
+ });
160
+ });
161
+
162
+ it("never flags a running Vehicle whose process started after its own package.json was last written", () => {
163
+ const home = piHome(["npm:fakedaemon"]);
164
+ const dir = installDaemonPackage(home, "fakedaemon");
165
+ const deps: ServiceDoctorDeps = {
166
+ armadaCliPath: "/armada/cli.js",
167
+ fileExists: () => true,
168
+ getMtimeMs: () => Date.now() - 60_000,
169
+ runCommand: (command) =>
170
+ command === "ps"
171
+ ? { ok: true, output: new Date().toString() }
172
+ : {
173
+ ok: true,
174
+ output: JSON.stringify({
175
+ vehicles: [{ name: "fakedaemon", executable: join(dir, "cli.ts"), nativeStatus: "running", nativePid: 4242 }],
176
+ }),
177
+ },
178
+ };
179
+ expect(checkServiceUnitPaths(home, undefined, deps)).toEqual({ ok: true, diagnostics: [], checked: 1 });
180
+ });
181
+
128
182
  it("reports Armada status failure without guessing from native descriptors", () => {
129
183
  const home = piHome(["npm:fakedaemon"]);
130
184
  installDaemonPackage(home, "fakedaemon");
@@ -6,7 +6,16 @@
6
6
  "declaration": true,
7
7
  "declarationMap": true,
8
8
  "declarationDir": "../dist",
9
- "rootDir": "src/public"
9
+ // doctor-format.ts's type-only cross-references (DuplicateDependencyDiagnostic,
10
+ // ModuleFreshnessDiagnostic, ServiceUnitDiagnostic, SmokeRegistrations) still pull their
11
+ // declaring files into tsc's program for declaration emission even though bun build's own
12
+ // JS bundle erases them entirely -- rootDir must cover the whole service tree for that, not
13
+ // just this entrypoint's own directory. The resulting nested .d.ts paths (dist/public/*.d.ts,
14
+ // dist/adoption/*.d.ts, ...) are an internal build-output detail: package.json's own
15
+ // `exports` map is what consumers actually resolve against, and its `types` paths are kept
16
+ // in sync with this layout independently of `import` (still flat, from bun build's own
17
+ // entry-point-basename output).
18
+ "rootDir": "src"
10
19
  },
11
- "include": ["src/public/client.ts", "src/public/protocol.ts"]
20
+ "include": ["src/public/client.ts", "src/public/protocol.ts", "src/public/doctor-format.ts"]
12
21
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../service/src/public/client.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../service/src/public/protocol.ts"],"names":[],"mappings":"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"}
File without changes
File without changes