@cedarjs/pg 0.2.0-alpha.0 → 0.3.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.
- package/README.md +300 -230
- package/dist/cli.cjs +99 -43
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.mjs +85 -29
- package/dist/cli.mjs.map +1 -1
- package/dist/dev-env.cjs +1 -1
- package/dist/dev-env.mjs +1 -1
- package/dist/index.cjs +9 -8
- package/dist/index.d.cts +80 -9
- package/dist/index.d.mts +80 -9
- package/dist/index.mjs +7 -7
- package/dist/jest-teardown.cjs +1 -1
- package/dist/jest-teardown.mjs +1 -1
- package/dist/jest-template.cjs +7 -2
- package/dist/jest-template.cjs.map +1 -1
- package/dist/jest-template.d.cts +7 -2
- package/dist/jest-template.d.mts +7 -2
- package/dist/jest-template.mjs +7 -2
- package/dist/jest-template.mjs.map +1 -1
- package/dist/jest.cjs +1 -1
- package/dist/jest.mjs +1 -1
- package/dist/{lease-BSBBpaR4.mjs → lease-DS1SX8U_.mjs} +23 -3
- package/dist/lease-DS1SX8U_.mjs.map +1 -0
- package/dist/{lease-Bq9wKwQa.cjs → lease-WlmOnNDi.cjs} +41 -3
- package/dist/lease-WlmOnNDi.cjs.map +1 -0
- package/dist/lifecycle-2BZgSVz2.mjs +1072 -0
- package/dist/lifecycle-2BZgSVz2.mjs.map +1 -0
- package/dist/{lifecycle-DEJ4GgWV.cjs → lifecycle-BCeM96tI.cjs} +517 -117
- package/dist/lifecycle-BCeM96tI.cjs.map +1 -0
- package/dist/{load-dev-env-7UjMHhw7.mjs → load-dev-env-BULkXyen.mjs} +2 -2
- package/dist/{load-dev-env-7UjMHhw7.mjs.map → load-dev-env-BULkXyen.mjs.map} +1 -1
- package/dist/{load-dev-env-cII6N4ZP.cjs → load-dev-env-Bl6Ddv1U.cjs} +2 -2
- package/dist/{load-dev-env-cII6N4ZP.cjs.map → load-dev-env-Bl6Ddv1U.cjs.map} +1 -1
- package/dist/{load-mode-env-B0qO9DZx.cjs → load-mode-env-CX9vd56X.cjs} +2 -2
- package/dist/{load-mode-env-B0qO9DZx.cjs.map → load-mode-env-CX9vd56X.cjs.map} +1 -1
- package/dist/{load-mode-env-C8gy4v9V.mjs → load-mode-env-Ce9ujisN.mjs} +2 -2
- package/dist/{load-mode-env-C8gy4v9V.mjs.map → load-mode-env-Ce9ujisN.mjs.map} +1 -1
- package/dist/{load-test-env-C34wpkIX.mjs → load-test-env-BqtA6V-d.mjs} +2 -2
- package/dist/{load-test-env-C34wpkIX.mjs.map → load-test-env-BqtA6V-d.mjs.map} +1 -1
- package/dist/{load-test-env-CkdUjTpV.cjs → load-test-env-Dcgh6YHV.cjs} +2 -2
- package/dist/{load-test-env-CkdUjTpV.cjs.map → load-test-env-Dcgh6YHV.cjs.map} +1 -1
- package/dist/{naming-C2nGVxPk.d.cts → naming-Df4fz_Fb.d.cts} +3 -2
- package/dist/{naming-C2nGVxPk.d.mts → naming-Df4fz_Fb.d.mts} +3 -2
- package/dist/status-B68SGSKx.mjs +26 -0
- package/dist/status-B68SGSKx.mjs.map +1 -0
- package/dist/status-Z_BYdxzI.cjs +31 -0
- package/dist/status-Z_BYdxzI.cjs.map +1 -0
- package/dist/studio-Bi6SU9jE.mjs +221 -0
- package/dist/studio-Bi6SU9jE.mjs.map +1 -0
- package/dist/studio-CdWIdnxr.cjs +280 -0
- package/dist/studio-CdWIdnxr.cjs.map +1 -0
- package/dist/{template-D0gJ_MS2.cjs → template-Cd77H7Cr.cjs} +21 -18
- package/dist/template-Cd77H7Cr.cjs.map +1 -0
- package/dist/{template-CGw3C1Ob.mjs → template-DlqHL8Go.mjs} +21 -18
- package/dist/template-DlqHL8Go.mjs.map +1 -0
- package/dist/template-mode-BqV3GjXI.d.cts +48 -0
- package/dist/template-mode-BqV3GjXI.d.mts +48 -0
- package/dist/template-mode-DK5cAlv9.mjs +81 -0
- package/dist/template-mode-DK5cAlv9.mjs.map +1 -0
- package/dist/template-mode-DMO5-z7O.cjs +92 -0
- package/dist/template-mode-DMO5-z7O.cjs.map +1 -0
- package/dist/test-env.cjs +1 -1
- package/dist/test-env.mjs +1 -1
- package/dist/vite-plus.cjs +113 -10
- package/dist/vite-plus.cjs.map +1 -1
- package/dist/vite-plus.d.cts +41 -2
- package/dist/vite-plus.d.mts +41 -2
- package/dist/vite-plus.mjs +110 -7
- package/dist/vite-plus.mjs.map +1 -1
- package/dist/vitest-template.cjs +6 -3
- package/dist/vitest-template.cjs.map +1 -1
- package/dist/vitest-template.d.cts +6 -3
- package/dist/vitest-template.d.mts +6 -3
- package/dist/vitest-template.mjs +6 -3
- package/dist/vitest-template.mjs.map +1 -1
- package/dist/vitest.cjs +1 -1
- package/dist/vitest.mjs +1 -1
- package/package.json +11 -7
- package/scripts/autopg-version +1 -1
- package/scripts/ci-install-autopg.sh +7 -2
- package/scripts/postinstall.js +41 -13
- package/dist/constants-Ct8myrEn.cjs +0 -41
- package/dist/constants-Ct8myrEn.cjs.map +0 -1
- package/dist/constants-NLR0U4NR.mjs +0 -24
- package/dist/constants-NLR0U4NR.mjs.map +0 -1
- package/dist/lease-B3TuX92y.d.mts +0 -24
- package/dist/lease-BSBBpaR4.mjs.map +0 -1
- package/dist/lease-Bq9wKwQa.cjs.map +0 -1
- package/dist/lease-t4I9JahV.d.cts +0 -24
- package/dist/lifecycle-BOo6xBjD.mjs +0 -684
- package/dist/lifecycle-BOo6xBjD.mjs.map +0 -1
- package/dist/lifecycle-DEJ4GgWV.cjs.map +0 -1
- package/dist/nx.cjs +0 -44
- package/dist/nx.cjs.map +0 -1
- package/dist/nx.d.cts +0 -15
- package/dist/nx.d.mts +0 -15
- package/dist/nx.mjs +0 -36
- package/dist/nx.mjs.map +0 -1
- package/dist/tasks-Caud9yHr.cjs +0 -67
- package/dist/tasks-Caud9yHr.cjs.map +0 -1
- package/dist/tasks-CjaZRi_G.d.mts +0 -19
- package/dist/tasks-DdQoP9We.d.cts +0 -19
- package/dist/tasks-KherHLac.mjs +0 -38
- package/dist/tasks-KherHLac.mjs.map +0 -1
- package/dist/template-CGw3C1Ob.mjs.map +0 -1
- package/dist/template-D0gJ_MS2.cjs.map +0 -1
- package/dist/template-mode-BkEs9LnY.cjs +0 -91
- package/dist/template-mode-BkEs9LnY.cjs.map +0 -1
- package/dist/template-mode-CcxV_Iju.d.cts +0 -28
- package/dist/template-mode-CcxV_Iju.d.mts +0 -28
- package/dist/template-mode-IjlFOG4O.mjs +0 -80
- package/dist/template-mode-IjlFOG4O.mjs.map +0 -1
package/dist/vite-plus.d.mts
CHANGED
|
@@ -1,7 +1,46 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { t as DbMode } from "./naming-Df4fz_Fb.mjs";
|
|
2
|
+
import { Plugin } from "vite";
|
|
3
|
+
//#region src/adapters/tasks.d.ts
|
|
4
|
+
/** Vite+ lifecycle task names and command strings (also used by the status hint). */
|
|
5
|
+
declare const CEDAR_PG_TASK_ACQUIRE_DEV = "db:acquire";
|
|
6
|
+
declare const CEDAR_PG_TASK_ACQUIRE_TEST = "db:acquire-test";
|
|
7
|
+
declare const CEDAR_PG_TASK_DISPOSE_TEST = "db:dispose-test";
|
|
8
|
+
type CedarPgLifecycleTarget = {
|
|
9
|
+
command: string;
|
|
10
|
+
cache?: boolean;
|
|
11
|
+
};
|
|
12
|
+
type CedarPgLifecycleTargetsOptions = {
|
|
13
|
+
bin?: string;
|
|
14
|
+
/** Include dispose-test target (default: true). */
|
|
15
|
+
includeDisposeTest?: boolean;
|
|
16
|
+
};
|
|
17
|
+
declare function cedarPgLifecycleTargets(options?: CedarPgLifecycleTargetsOptions): Record<string, CedarPgLifecycleTarget>;
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region src/adapters/studio.d.ts
|
|
20
|
+
type StudioKind = "prisma" | "drizzle";
|
|
21
|
+
//#endregion
|
|
22
|
+
//#region src/adapters/vite-dev-plugin.d.ts
|
|
23
|
+
type CedarPgDevOptions = {
|
|
24
|
+
mode?: DbMode;
|
|
25
|
+
/** Worktree / lease root. Omit to resolve from cwd (git toplevel). */
|
|
26
|
+
root?: string;
|
|
27
|
+
/** App package to search for Prisma/Drizzle. Defaults to Vite `config.root`. */
|
|
28
|
+
cwd?: string;
|
|
29
|
+
/** Force Prisma/Drizzle Studio; `false` disables the `s` shortcut. Omit to auto-detect. */
|
|
30
|
+
studio?: StudioKind | false;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Vite / Vite+ plugin: print a cedar-pg status panel on listen and register
|
|
34
|
+
* CLI shortcuts (`d` status, `s` studio) on Vite 8+. Does **not** acquire —
|
|
35
|
+
* pair with `cedarPgTasks()` / `dependsOn: ['db:acquire']`.
|
|
36
|
+
*
|
|
37
|
+
* @param viteVersion Test-only override for the shortcut gate. Omit in production.
|
|
38
|
+
*/
|
|
39
|
+
declare function cedarPgDev(options?: CedarPgDevOptions, viteVersion?: string): Plugin;
|
|
40
|
+
//#endregion
|
|
2
41
|
//#region src/adapters/vite-plus.d.ts
|
|
3
42
|
type CedarPgTaskDef = CedarPgLifecycleTarget;
|
|
4
43
|
type CedarPgTasksOptions = CedarPgLifecycleTargetsOptions;
|
|
5
44
|
//#endregion
|
|
6
|
-
export { CEDAR_PG_TASK_ACQUIRE_DEV, CEDAR_PG_TASK_ACQUIRE_TEST, CEDAR_PG_TASK_DISPOSE_TEST, CedarPgTaskDef, CedarPgTasksOptions, cedarPgLifecycleTargets as cedarPgTasks };
|
|
45
|
+
export { CEDAR_PG_TASK_ACQUIRE_DEV, CEDAR_PG_TASK_ACQUIRE_TEST, CEDAR_PG_TASK_DISPOSE_TEST, type CedarPgDevOptions, CedarPgTaskDef, CedarPgTasksOptions, cedarPgDev, cedarPgLifecycleTargets as cedarPgTasks };
|
|
7
46
|
//# sourceMappingURL=vite-plus.d.mts.map
|
package/dist/vite-plus.mjs
CHANGED
|
@@ -1,17 +1,119 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { p as CLI_NAME } from "./lease-DS1SX8U_.mjs";
|
|
2
|
+
import { t as resolveDevStatus } from "./status-B68SGSKx.mjs";
|
|
3
|
+
import { a as formatDevStatus, c as CEDAR_PG_TASK_DISPOSE_TEST, i as studioChildRunning, l as cedarPgLifecycleTargets, n as openStudio, o as CEDAR_PG_TASK_ACQUIRE_DEV, s as CEDAR_PG_TASK_ACQUIRE_TEST, t as detectStudio } from "./studio-Bi6SU9jE.mjs";
|
|
4
|
+
import { createRequire } from "node:module";
|
|
5
|
+
//#region src/adapters/vite-dev-plugin.ts
|
|
6
|
+
const requireVite = createRequire(import.meta.url);
|
|
7
|
+
function installedViteVersion() {
|
|
8
|
+
try {
|
|
9
|
+
return requireVite("vite/package.json").version;
|
|
10
|
+
} catch {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function viteBindsPluginShortcuts(version) {
|
|
15
|
+
const resolved = version ?? installedViteVersion();
|
|
16
|
+
if (resolved === void 0) return false;
|
|
17
|
+
return Number.parseInt(resolved, 10) >= 8;
|
|
18
|
+
}
|
|
19
|
+
function shouldShowPanel() {
|
|
20
|
+
return Boolean(process.stdin.isTTY) && !process.env.CI;
|
|
21
|
+
}
|
|
22
|
+
function logStatus(server, options) {
|
|
23
|
+
const status = resolveDevStatus({
|
|
24
|
+
root: options.root,
|
|
25
|
+
mode: options.mode
|
|
26
|
+
});
|
|
27
|
+
for (const line of formatDevStatus(status)) if (status.ok) server.config.logger.info(line);
|
|
28
|
+
else server.config.logger.warn(line);
|
|
29
|
+
return status;
|
|
30
|
+
}
|
|
31
|
+
function createStudioLauncher(options) {
|
|
32
|
+
let studioChild;
|
|
33
|
+
const prefer = options.studio === false ? void 0 : options.studio;
|
|
34
|
+
return (s) => {
|
|
35
|
+
const status = logStatus(s, options);
|
|
36
|
+
if (!status.ok) return;
|
|
37
|
+
const studio = detectStudio({
|
|
38
|
+
root: status.root,
|
|
39
|
+
cwd: options.cwd ?? s.config.root,
|
|
40
|
+
prefer
|
|
41
|
+
});
|
|
42
|
+
if (!studio) {
|
|
43
|
+
s.config.logger.warn(`${CLI_NAME}: no Prisma or Drizzle Studio found (install prisma or drizzle-kit)`);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (studioChildRunning(studioChild)) {
|
|
47
|
+
s.config.logger.info(`${CLI_NAME}: studio already running`);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const child = openStudio({
|
|
51
|
+
databaseUrl: status.databaseUrl,
|
|
52
|
+
studio
|
|
53
|
+
});
|
|
54
|
+
child.once("error", (err) => {
|
|
55
|
+
studioChild = void 0;
|
|
56
|
+
s.config.logger.error(`${CLI_NAME}: studio failed: ${err.message}`);
|
|
57
|
+
});
|
|
58
|
+
child.once("exit", (code, signal) => {
|
|
59
|
+
studioChild = void 0;
|
|
60
|
+
if (code && code !== 0) s.config.logger.warn(`${CLI_NAME}: studio exited ${code}`);
|
|
61
|
+
else if (signal) s.config.logger.warn(`${CLI_NAME}: studio killed (${signal})`);
|
|
62
|
+
});
|
|
63
|
+
studioChild = child;
|
|
64
|
+
s.config.logger.info(`${CLI_NAME}: opening ${studio.kind} studio (${studio.command} ${studio.args.join(" ")})`);
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Vite / Vite+ plugin: print a cedar-pg status panel on listen and register
|
|
69
|
+
* CLI shortcuts (`d` status, `s` studio) on Vite 8+. Does **not** acquire —
|
|
70
|
+
* pair with `cedarPgTasks()` / `dependsOn: ['db:acquire']`.
|
|
71
|
+
*
|
|
72
|
+
* @param viteVersion Test-only override for the shortcut gate. Omit in production.
|
|
73
|
+
*/
|
|
74
|
+
function cedarPgDev(options = {}, viteVersion) {
|
|
75
|
+
return {
|
|
76
|
+
name: "cedar-pg-dev",
|
|
77
|
+
configureServer(server) {
|
|
78
|
+
if (shouldShowPanel() && server.httpServer) server.httpServer.once("listening", () => {
|
|
79
|
+
logStatus(server, options);
|
|
80
|
+
});
|
|
81
|
+
if (!viteBindsPluginShortcuts(viteVersion)) return;
|
|
82
|
+
const dShortcut = {
|
|
83
|
+
key: "d",
|
|
84
|
+
description: "show cedar-pg database status",
|
|
85
|
+
action(s) {
|
|
86
|
+
logStatus(s, options);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
const shortcuts = options.studio === false ? [dShortcut] : [dShortcut, {
|
|
90
|
+
key: "s",
|
|
91
|
+
description: "open Prisma/Drizzle studio (cedar-pg DATABASE_URL)",
|
|
92
|
+
action: createStudioLauncher(options)
|
|
93
|
+
}];
|
|
94
|
+
server.bindCLIShortcuts({
|
|
95
|
+
print: false,
|
|
96
|
+
customShortcuts: shortcuts
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
//#endregion
|
|
2
102
|
//#region src/adapters/vite-plus.ts
|
|
3
103
|
/**
|
|
4
104
|
* Consumer adapter for external Vite+ projects.
|
|
5
105
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
106
|
+
* - `cedarPgTasks()` — merge into `run.tasks` so `vp run test` / `vp run dev`
|
|
107
|
+
* depend on cedarpg acquire.
|
|
108
|
+
* - `cedarPgDev()` — Vite plugin: status panel + `d` / `s` shortcuts on Vite 8 (no acquire).
|
|
8
109
|
*
|
|
9
110
|
* @example
|
|
10
111
|
* ```ts
|
|
11
112
|
* import { defineConfig } from 'vite-plus'
|
|
12
|
-
* import { cedarPgTasks } from '@cedarjs/pg/vite-plus'
|
|
113
|
+
* import { cedarPgTasks, cedarPgDev } from '@cedarjs/pg/vite-plus'
|
|
13
114
|
*
|
|
14
115
|
* export default defineConfig({
|
|
116
|
+
* plugins: [cedarPgDev()],
|
|
15
117
|
* run: {
|
|
16
118
|
* tasks: {
|
|
17
119
|
* ...cedarPgTasks(),
|
|
@@ -20,10 +122,11 @@ import { i as cedarPgLifecycleTargets, n as CEDAR_PG_TASK_ACQUIRE_TEST, r as CED
|
|
|
20
122
|
* dependsOn: ['db:acquire-test'],
|
|
21
123
|
* env: ['DATABASE_URL', 'TEST_DATABASE_URL'],
|
|
22
124
|
* },
|
|
125
|
+
* // dependsOn does not forward env: attach hands vp dev the lease URL.
|
|
23
126
|
* dev: {
|
|
24
|
-
* command: 'vp dev',
|
|
127
|
+
* command: 'cedarpg run --attach --mode=dev -- vp dev',
|
|
25
128
|
* dependsOn: ['db:acquire'],
|
|
26
|
-
*
|
|
129
|
+
* cache: false,
|
|
27
130
|
* },
|
|
28
131
|
* },
|
|
29
132
|
* },
|
|
@@ -31,6 +134,6 @@ import { i as cedarPgLifecycleTargets, n as CEDAR_PG_TASK_ACQUIRE_TEST, r as CED
|
|
|
31
134
|
* ```
|
|
32
135
|
*/
|
|
33
136
|
//#endregion
|
|
34
|
-
export { CEDAR_PG_TASK_ACQUIRE_DEV, CEDAR_PG_TASK_ACQUIRE_TEST, CEDAR_PG_TASK_DISPOSE_TEST, cedarPgLifecycleTargets as cedarPgTasks };
|
|
137
|
+
export { CEDAR_PG_TASK_ACQUIRE_DEV, CEDAR_PG_TASK_ACQUIRE_TEST, CEDAR_PG_TASK_DISPOSE_TEST, cedarPgDev, cedarPgLifecycleTargets as cedarPgTasks };
|
|
35
138
|
|
|
36
139
|
//# sourceMappingURL=vite-plus.mjs.map
|
package/dist/vite-plus.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite-plus.mjs","names":[],"sources":["../src/adapters/vite-plus.ts"],"sourcesContent":["/**\n * Consumer adapter for external Vite+ projects.\n *\n *
|
|
1
|
+
{"version":3,"file":"vite-plus.mjs","names":[],"sources":["../src/adapters/vite-dev-plugin.ts","../src/adapters/vite-plus.ts"],"sourcesContent":["import { createRequire } from \"node:module\";\nimport type { ChildProcess } from \"node:child_process\";\nimport type { Plugin, ViteDevServer } from \"vite\";\nimport { CLI_NAME } from \"../core/constants.ts\";\nimport { resolveDevStatus, type DevStatus } from \"../core/status.ts\";\nimport type { DbMode } from \"../core/naming.ts\";\nimport { formatDevStatus } from \"./status-format.ts\";\nimport { detectStudio, openStudio, studioChildRunning, type StudioKind } from \"./studio.ts\";\n\nconst requireVite = createRequire(import.meta.url);\n\nfunction installedViteVersion(): string | undefined {\n try {\n return (requireVite(\"vite/package.json\") as { version: string }).version;\n } catch {\n return undefined;\n }\n}\n\nexport function viteBindsPluginShortcuts(version?: string): boolean {\n const resolved = version ?? installedViteVersion();\n if (resolved === undefined) return false;\n return Number.parseInt(resolved, 10) >= 8;\n}\n\nexport type CedarPgDevOptions = {\n mode?: DbMode;\n /** Worktree / lease root. Omit to resolve from cwd (git toplevel). */\n root?: string;\n /** App package to search for Prisma/Drizzle. Defaults to Vite `config.root`. */\n cwd?: string;\n /** Force Prisma/Drizzle Studio; `false` disables the `s` shortcut. Omit to auto-detect. */\n studio?: StudioKind | false;\n};\n\nfunction shouldShowPanel(): boolean {\n return Boolean(process.stdin.isTTY) && !process.env.CI;\n}\n\nfunction logStatus(server: ViteDevServer, options: CedarPgDevOptions): DevStatus {\n const status = resolveDevStatus({ root: options.root, mode: options.mode });\n for (const line of formatDevStatus(status)) {\n if (status.ok) server.config.logger.info(line);\n else server.config.logger.warn(line);\n }\n return status;\n}\n\nfunction createStudioLauncher(options: CedarPgDevOptions): (s: ViteDevServer) => void {\n let studioChild: ChildProcess | undefined;\n const prefer = options.studio === false ? undefined : options.studio;\n return (s) => {\n const status = logStatus(s, options);\n if (!status.ok) return;\n\n const studio = detectStudio({\n root: status.root,\n cwd: options.cwd ?? s.config.root,\n prefer,\n });\n if (!studio) {\n s.config.logger.warn(\n `${CLI_NAME}: no Prisma or Drizzle Studio found (install prisma or drizzle-kit)`,\n );\n return;\n }\n\n if (studioChildRunning(studioChild)) {\n s.config.logger.info(`${CLI_NAME}: studio already running`);\n return;\n }\n\n const child = openStudio({ databaseUrl: status.databaseUrl, studio });\n child.once(\"error\", (err) => {\n studioChild = undefined;\n s.config.logger.error(`${CLI_NAME}: studio failed: ${err.message}`);\n });\n child.once(\"exit\", (code, signal) => {\n studioChild = undefined;\n if (code && code !== 0) {\n s.config.logger.warn(`${CLI_NAME}: studio exited ${code}`);\n } else if (signal) {\n s.config.logger.warn(`${CLI_NAME}: studio killed (${signal})`);\n }\n });\n studioChild = child;\n s.config.logger.info(\n `${CLI_NAME}: opening ${studio.kind} studio (${studio.command} ${studio.args.join(\" \")})`,\n );\n };\n}\n\n/**\n * Vite / Vite+ plugin: print a cedar-pg status panel on listen and register\n * CLI shortcuts (`d` status, `s` studio) on Vite 8+. Does **not** acquire —\n * pair with `cedarPgTasks()` / `dependsOn: ['db:acquire']`.\n *\n * @param viteVersion Test-only override for the shortcut gate. Omit in production.\n */\nexport function cedarPgDev(options: CedarPgDevOptions = {}, viteVersion?: string): Plugin {\n return {\n name: \"cedar-pg-dev\",\n configureServer(server) {\n if (shouldShowPanel() && server.httpServer) {\n server.httpServer.once(\"listening\", () => {\n logStatus(server, options);\n });\n }\n\n if (!viteBindsPluginShortcuts(viteVersion)) {\n return;\n }\n\n const dShortcut = {\n key: \"d\",\n description: \"show cedar-pg database status\",\n action(s: ViteDevServer) {\n logStatus(s, options);\n },\n };\n const shortcuts =\n options.studio === false\n ? [dShortcut]\n : [\n dShortcut,\n {\n key: \"s\",\n description: \"open Prisma/Drizzle studio (cedar-pg DATABASE_URL)\",\n action: createStudioLauncher(options),\n },\n ];\n\n server.bindCLIShortcuts({\n print: false,\n customShortcuts: shortcuts,\n });\n },\n };\n}\n","/**\n * Consumer adapter for external Vite+ projects.\n *\n * - `cedarPgTasks()` — merge into `run.tasks` so `vp run test` / `vp run dev`\n * depend on cedarpg acquire.\n * - `cedarPgDev()` — Vite plugin: status panel + `d` / `s` shortcuts on Vite 8 (no acquire).\n *\n * @example\n * ```ts\n * import { defineConfig } from 'vite-plus'\n * import { cedarPgTasks, cedarPgDev } from '@cedarjs/pg/vite-plus'\n *\n * export default defineConfig({\n * plugins: [cedarPgDev()],\n * run: {\n * tasks: {\n * ...cedarPgTasks(),\n * test: {\n * command: 'vp test',\n * dependsOn: ['db:acquire-test'],\n * env: ['DATABASE_URL', 'TEST_DATABASE_URL'],\n * },\n * // dependsOn does not forward env: attach hands vp dev the lease URL.\n * dev: {\n * command: 'cedarpg run --attach --mode=dev -- vp dev',\n * dependsOn: ['db:acquire'],\n * cache: false,\n * },\n * },\n * },\n * })\n * ```\n */\n\nimport {\n cedarPgLifecycleTargets,\n type CedarPgLifecycleTarget,\n type CedarPgLifecycleTargetsOptions,\n CEDAR_PG_TASK_DISPOSE_TEST,\n CEDAR_PG_TASK_ACQUIRE_DEV,\n CEDAR_PG_TASK_ACQUIRE_TEST,\n} from \"./tasks.ts\";\n\nexport {\n CEDAR_PG_TASK_ACQUIRE_DEV,\n CEDAR_PG_TASK_ACQUIRE_TEST,\n CEDAR_PG_TASK_DISPOSE_TEST,\n cedarPgLifecycleTargets as cedarPgTasks,\n};\n\nexport type CedarPgTaskDef = CedarPgLifecycleTarget;\nexport type CedarPgTasksOptions = CedarPgLifecycleTargetsOptions;\n\nexport { cedarPgDev } from \"./vite-dev-plugin.ts\";\nexport type { CedarPgDevOptions } from \"./vite-dev-plugin.ts\";\n"],"mappings":";;;;;AASA,MAAM,cAAc,cAAc,OAAO,KAAK,GAAG;AAEjD,SAAS,uBAA2C;CAClD,IAAI;EACF,OAAQ,YAAY,mBAAmB,CAAC,CAAyB;CACnE,QAAQ;EACN;CACF;AACF;AAEA,SAAgB,yBAAyB,SAA2B;CAClE,MAAM,WAAW,WAAW,qBAAqB;CACjD,IAAI,aAAa,KAAA,GAAW,OAAO;CACnC,OAAO,OAAO,SAAS,UAAU,EAAE,KAAK;AAC1C;AAYA,SAAS,kBAA2B;CAClC,OAAO,QAAQ,QAAQ,MAAM,KAAK,KAAK,CAAC,QAAQ,IAAI;AACtD;AAEA,SAAS,UAAU,QAAuB,SAAuC;CAC/E,MAAM,SAAS,iBAAiB;EAAE,MAAM,QAAQ;EAAM,MAAM,QAAQ;CAAK,CAAC;CAC1E,KAAK,MAAM,QAAQ,gBAAgB,MAAM,GACvC,IAAI,OAAO,IAAI,OAAO,OAAO,OAAO,KAAK,IAAI;MACxC,OAAO,OAAO,OAAO,KAAK,IAAI;CAErC,OAAO;AACT;AAEA,SAAS,qBAAqB,SAAwD;CACpF,IAAI;CACJ,MAAM,SAAS,QAAQ,WAAW,QAAQ,KAAA,IAAY,QAAQ;CAC9D,QAAQ,MAAM;EACZ,MAAM,SAAS,UAAU,GAAG,OAAO;EACnC,IAAI,CAAC,OAAO,IAAI;EAEhB,MAAM,SAAS,aAAa;GAC1B,MAAM,OAAO;GACb,KAAK,QAAQ,OAAO,EAAE,OAAO;GAC7B;EACF,CAAC;EACD,IAAI,CAAC,QAAQ;GACX,EAAE,OAAO,OAAO,KACd,GAAG,SAAS,oEACd;GACA;EACF;EAEA,IAAI,mBAAmB,WAAW,GAAG;GACnC,EAAE,OAAO,OAAO,KAAK,GAAG,SAAS,yBAAyB;GAC1D;EACF;EAEA,MAAM,QAAQ,WAAW;GAAE,aAAa,OAAO;GAAa;EAAO,CAAC;EACpE,MAAM,KAAK,UAAU,QAAQ;GAC3B,cAAc,KAAA;GACd,EAAE,OAAO,OAAO,MAAM,GAAG,SAAS,mBAAmB,IAAI,SAAS;EACpE,CAAC;EACD,MAAM,KAAK,SAAS,MAAM,WAAW;GACnC,cAAc,KAAA;GACd,IAAI,QAAQ,SAAS,GACnB,EAAE,OAAO,OAAO,KAAK,GAAG,SAAS,kBAAkB,MAAM;QACpD,IAAI,QACT,EAAE,OAAO,OAAO,KAAK,GAAG,SAAS,mBAAmB,OAAO,EAAE;EAEjE,CAAC;EACD,cAAc;EACd,EAAE,OAAO,OAAO,KACd,GAAG,SAAS,YAAY,OAAO,KAAK,WAAW,OAAO,QAAQ,GAAG,OAAO,KAAK,KAAK,GAAG,EAAE,EACzF;CACF;AACF;;;;;;;;AASA,SAAgB,WAAW,UAA6B,CAAC,GAAG,aAA8B;CACxF,OAAO;EACL,MAAM;EACN,gBAAgB,QAAQ;GACtB,IAAI,gBAAgB,KAAK,OAAO,YAC9B,OAAO,WAAW,KAAK,mBAAmB;IACxC,UAAU,QAAQ,OAAO;GAC3B,CAAC;GAGH,IAAI,CAAC,yBAAyB,WAAW,GACvC;GAGF,MAAM,YAAY;IAChB,KAAK;IACL,aAAa;IACb,OAAO,GAAkB;KACvB,UAAU,GAAG,OAAO;IACtB;GACF;GACA,MAAM,YACJ,QAAQ,WAAW,QACf,CAAC,SAAS,IACV,CACE,WACA;IACE,KAAK;IACL,aAAa;IACb,QAAQ,qBAAqB,OAAO;GACtC,CACF;GAEN,OAAO,iBAAiB;IACtB,OAAO;IACP,iBAAiB;GACnB,CAAC;EACH;CACF;AACF"}
|
package/dist/vitest-template.cjs
CHANGED
|
@@ -2,10 +2,12 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_template_mode = require("./template-mode-
|
|
5
|
+
const require_template_mode = require("./template-mode-DMO5-z7O.cjs");
|
|
6
6
|
//#region src/adapters/vitest-template.ts
|
|
7
7
|
/**
|
|
8
|
-
* Vitest globalSetup (template mode).
|
|
8
|
+
* Vitest globalSetup (template mode). Drops crashed-run leftovers under this
|
|
9
|
+
* worktree's test role, then acquire → migrate → markTemplate. Returns teardown
|
|
10
|
+
* that disposes TEMPLATE + clones.
|
|
9
11
|
*
|
|
10
12
|
* ```ts
|
|
11
13
|
* // vitest.cedar-global.ts
|
|
@@ -20,7 +22,8 @@ const require_template_mode = require("./template-mode-BkEs9LnY.cjs");
|
|
|
20
22
|
* },
|
|
21
23
|
* })
|
|
22
24
|
*
|
|
23
|
-
* // vitest.cedar-worker.ts — local ESM (pack emits CJS+ESM; top-level await lives here)
|
|
25
|
+
* // vitest.cedar-worker.ts — local ESM (pack emits CJS+ESM; top-level await lives here).
|
|
26
|
+
* // Runs per test file: reuses the worker clone, truncated with RESTART IDENTITY first.
|
|
24
27
|
* import { cloneWorkerDatabase } from "@cedarjs/pg/vitest/template";
|
|
25
28
|
* await cloneWorkerDatabase();
|
|
26
29
|
* ```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vitest-template.cjs","names":["setupTemplateMode"],"sources":["../src/adapters/vitest-template.ts"],"sourcesContent":["import {\n cloneWorkerDatabase,\n setupTemplateMode,\n type SetupTemplateModeOptions,\n} from \"./template-mode.ts\";\n\nexport { cloneWorkerDatabase };\nexport type {\n SetupTemplateModeOptions,\n TemplateMigrateFn,\n TemplateMigrateContext,\n} from \"./template-mode.ts\";\n\n/**\n * Vitest globalSetup (template mode). Returns teardown that disposes TEMPLATE + clones.\n *\n * ```ts\n * // vitest.cedar-global.ts\n * import { createGlobalSetup } from \"@cedarjs/pg/vitest/template\";\n * export default createGlobalSetup({ migrate: async ({ databaseUrl }) => {} });\n *\n * // vitest.config.ts\n * export default defineConfig({\n * test: {\n * globalSetup: [\"./vitest.cedar-global.ts\"],\n * setupFiles: [\"./vitest.cedar-worker.ts\"],\n * },\n * })\n *\n * // vitest.cedar-worker.ts — local ESM (pack emits CJS+ESM; top-level await lives here)
|
|
1
|
+
{"version":3,"file":"vitest-template.cjs","names":["setupTemplateMode"],"sources":["../src/adapters/vitest-template.ts"],"sourcesContent":["import {\n cloneWorkerDatabase,\n setupTemplateMode,\n type SetupTemplateModeOptions,\n} from \"./template-mode.ts\";\n\nexport { cloneWorkerDatabase };\nexport type {\n SetupTemplateModeOptions,\n TemplateMigrateFn,\n TemplateMigrateContext,\n} from \"./template-mode.ts\";\n\n/**\n * Vitest globalSetup (template mode). Drops crashed-run leftovers under this\n * worktree's test role, then acquire → migrate → markTemplate. Returns teardown\n * that disposes TEMPLATE + clones.\n *\n * ```ts\n * // vitest.cedar-global.ts\n * import { createGlobalSetup } from \"@cedarjs/pg/vitest/template\";\n * export default createGlobalSetup({ migrate: async ({ databaseUrl }) => {} });\n *\n * // vitest.config.ts\n * export default defineConfig({\n * test: {\n * globalSetup: [\"./vitest.cedar-global.ts\"],\n * setupFiles: [\"./vitest.cedar-worker.ts\"],\n * },\n * })\n *\n * // vitest.cedar-worker.ts — local ESM (pack emits CJS+ESM; top-level await lives here).\n * // Runs per test file: reuses the worker clone, truncated with RESTART IDENTITY first.\n * import { cloneWorkerDatabase } from \"@cedarjs/pg/vitest/template\";\n * await cloneWorkerDatabase();\n * ```\n *\n * Stock `@cedarjs/pg/vitest` is one shared test DB only.\n */\nexport function createGlobalSetup(options: SetupTemplateModeOptions) {\n return async () => {\n const result = await setupTemplateMode(options);\n if (result.status !== \"acquired\") {\n return async () => {};\n }\n return async () => {\n await result.dispose();\n };\n };\n}\n\n/** String path without a migrate hook is unsupported — use `createGlobalSetup`. */\nexport default async function setup(): Promise<() => Promise<void>> {\n throw new Error(\n \"@cedarjs/pg/vitest/template requires createGlobalSetup({ migrate }). \" +\n \"Point globalSetup at a local module that exports createGlobalSetup({ migrate }).\",\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,SAAgB,kBAAkB,SAAmC;CACnE,OAAO,YAAY;EACjB,MAAM,SAAS,MAAMA,sBAAAA,kBAAkB,OAAO;EAC9C,IAAI,OAAO,WAAW,YACpB,OAAO,YAAY,CAAC;EAEtB,OAAO,YAAY;GACjB,MAAM,OAAO,QAAQ;EACvB;CACF;AACF;;AAGA,eAA8B,QAAsC;CAClE,MAAM,IAAI,MACR,uJAEF;AACF"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { i as cloneWorkerDatabase, n as TemplateMigrateContext, r as TemplateMigrateFn, t as SetupTemplateModeOptions } from "./template-mode-
|
|
1
|
+
import { i as cloneWorkerDatabase, n as TemplateMigrateContext, r as TemplateMigrateFn, t as SetupTemplateModeOptions } from "./template-mode-BqV3GjXI.cjs";
|
|
2
2
|
//#region src/adapters/vitest-template.d.ts
|
|
3
3
|
/**
|
|
4
|
-
* Vitest globalSetup (template mode).
|
|
4
|
+
* Vitest globalSetup (template mode). Drops crashed-run leftovers under this
|
|
5
|
+
* worktree's test role, then acquire → migrate → markTemplate. Returns teardown
|
|
6
|
+
* that disposes TEMPLATE + clones.
|
|
5
7
|
*
|
|
6
8
|
* ```ts
|
|
7
9
|
* // vitest.cedar-global.ts
|
|
@@ -16,7 +18,8 @@ import { i as cloneWorkerDatabase, n as TemplateMigrateContext, r as TemplateMig
|
|
|
16
18
|
* },
|
|
17
19
|
* })
|
|
18
20
|
*
|
|
19
|
-
* // vitest.cedar-worker.ts — local ESM (pack emits CJS+ESM; top-level await lives here)
|
|
21
|
+
* // vitest.cedar-worker.ts — local ESM (pack emits CJS+ESM; top-level await lives here).
|
|
22
|
+
* // Runs per test file: reuses the worker clone, truncated with RESTART IDENTITY first.
|
|
20
23
|
* import { cloneWorkerDatabase } from "@cedarjs/pg/vitest/template";
|
|
21
24
|
* await cloneWorkerDatabase();
|
|
22
25
|
* ```
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { i as cloneWorkerDatabase, n as TemplateMigrateContext, r as TemplateMigrateFn, t as SetupTemplateModeOptions } from "./template-mode-
|
|
1
|
+
import { i as cloneWorkerDatabase, n as TemplateMigrateContext, r as TemplateMigrateFn, t as SetupTemplateModeOptions } from "./template-mode-BqV3GjXI.mjs";
|
|
2
2
|
//#region src/adapters/vitest-template.d.ts
|
|
3
3
|
/**
|
|
4
|
-
* Vitest globalSetup (template mode).
|
|
4
|
+
* Vitest globalSetup (template mode). Drops crashed-run leftovers under this
|
|
5
|
+
* worktree's test role, then acquire → migrate → markTemplate. Returns teardown
|
|
6
|
+
* that disposes TEMPLATE + clones.
|
|
5
7
|
*
|
|
6
8
|
* ```ts
|
|
7
9
|
* // vitest.cedar-global.ts
|
|
@@ -16,7 +18,8 @@ import { i as cloneWorkerDatabase, n as TemplateMigrateContext, r as TemplateMig
|
|
|
16
18
|
* },
|
|
17
19
|
* })
|
|
18
20
|
*
|
|
19
|
-
* // vitest.cedar-worker.ts — local ESM (pack emits CJS+ESM; top-level await lives here)
|
|
21
|
+
* // vitest.cedar-worker.ts — local ESM (pack emits CJS+ESM; top-level await lives here).
|
|
22
|
+
* // Runs per test file: reuses the worker clone, truncated with RESTART IDENTITY first.
|
|
20
23
|
* import { cloneWorkerDatabase } from "@cedarjs/pg/vitest/template";
|
|
21
24
|
* await cloneWorkerDatabase();
|
|
22
25
|
* ```
|
package/dist/vitest-template.mjs
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { n as setupTemplateMode, t as cloneWorkerDatabase } from "./template-mode-
|
|
1
|
+
import { n as setupTemplateMode, t as cloneWorkerDatabase } from "./template-mode-DK5cAlv9.mjs";
|
|
2
2
|
//#region src/adapters/vitest-template.ts
|
|
3
3
|
/**
|
|
4
|
-
* Vitest globalSetup (template mode).
|
|
4
|
+
* Vitest globalSetup (template mode). Drops crashed-run leftovers under this
|
|
5
|
+
* worktree's test role, then acquire → migrate → markTemplate. Returns teardown
|
|
6
|
+
* that disposes TEMPLATE + clones.
|
|
5
7
|
*
|
|
6
8
|
* ```ts
|
|
7
9
|
* // vitest.cedar-global.ts
|
|
@@ -16,7 +18,8 @@ import { n as setupTemplateMode, t as cloneWorkerDatabase } from "./template-mod
|
|
|
16
18
|
* },
|
|
17
19
|
* })
|
|
18
20
|
*
|
|
19
|
-
* // vitest.cedar-worker.ts — local ESM (pack emits CJS+ESM; top-level await lives here)
|
|
21
|
+
* // vitest.cedar-worker.ts — local ESM (pack emits CJS+ESM; top-level await lives here).
|
|
22
|
+
* // Runs per test file: reuses the worker clone, truncated with RESTART IDENTITY first.
|
|
20
23
|
* import { cloneWorkerDatabase } from "@cedarjs/pg/vitest/template";
|
|
21
24
|
* await cloneWorkerDatabase();
|
|
22
25
|
* ```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vitest-template.mjs","names":[],"sources":["../src/adapters/vitest-template.ts"],"sourcesContent":["import {\n cloneWorkerDatabase,\n setupTemplateMode,\n type SetupTemplateModeOptions,\n} from \"./template-mode.ts\";\n\nexport { cloneWorkerDatabase };\nexport type {\n SetupTemplateModeOptions,\n TemplateMigrateFn,\n TemplateMigrateContext,\n} from \"./template-mode.ts\";\n\n/**\n * Vitest globalSetup (template mode). Returns teardown that disposes TEMPLATE + clones.\n *\n * ```ts\n * // vitest.cedar-global.ts\n * import { createGlobalSetup } from \"@cedarjs/pg/vitest/template\";\n * export default createGlobalSetup({ migrate: async ({ databaseUrl }) => {} });\n *\n * // vitest.config.ts\n * export default defineConfig({\n * test: {\n * globalSetup: [\"./vitest.cedar-global.ts\"],\n * setupFiles: [\"./vitest.cedar-worker.ts\"],\n * },\n * })\n *\n * // vitest.cedar-worker.ts — local ESM (pack emits CJS+ESM; top-level await lives here)
|
|
1
|
+
{"version":3,"file":"vitest-template.mjs","names":[],"sources":["../src/adapters/vitest-template.ts"],"sourcesContent":["import {\n cloneWorkerDatabase,\n setupTemplateMode,\n type SetupTemplateModeOptions,\n} from \"./template-mode.ts\";\n\nexport { cloneWorkerDatabase };\nexport type {\n SetupTemplateModeOptions,\n TemplateMigrateFn,\n TemplateMigrateContext,\n} from \"./template-mode.ts\";\n\n/**\n * Vitest globalSetup (template mode). Drops crashed-run leftovers under this\n * worktree's test role, then acquire → migrate → markTemplate. Returns teardown\n * that disposes TEMPLATE + clones.\n *\n * ```ts\n * // vitest.cedar-global.ts\n * import { createGlobalSetup } from \"@cedarjs/pg/vitest/template\";\n * export default createGlobalSetup({ migrate: async ({ databaseUrl }) => {} });\n *\n * // vitest.config.ts\n * export default defineConfig({\n * test: {\n * globalSetup: [\"./vitest.cedar-global.ts\"],\n * setupFiles: [\"./vitest.cedar-worker.ts\"],\n * },\n * })\n *\n * // vitest.cedar-worker.ts — local ESM (pack emits CJS+ESM; top-level await lives here).\n * // Runs per test file: reuses the worker clone, truncated with RESTART IDENTITY first.\n * import { cloneWorkerDatabase } from \"@cedarjs/pg/vitest/template\";\n * await cloneWorkerDatabase();\n * ```\n *\n * Stock `@cedarjs/pg/vitest` is one shared test DB only.\n */\nexport function createGlobalSetup(options: SetupTemplateModeOptions) {\n return async () => {\n const result = await setupTemplateMode(options);\n if (result.status !== \"acquired\") {\n return async () => {};\n }\n return async () => {\n await result.dispose();\n };\n };\n}\n\n/** String path without a migrate hook is unsupported — use `createGlobalSetup`. */\nexport default async function setup(): Promise<() => Promise<void>> {\n throw new Error(\n \"@cedarjs/pg/vitest/template requires createGlobalSetup({ migrate }). \" +\n \"Point globalSetup at a local module that exports createGlobalSetup({ migrate }).\",\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,SAAgB,kBAAkB,SAAmC;CACnE,OAAO,YAAY;EACjB,MAAM,SAAS,MAAM,kBAAkB,OAAO;EAC9C,IAAI,OAAO,WAAW,YACpB,OAAO,YAAY,CAAC;EAEtB,OAAO,YAAY;GACjB,MAAM,OAAO,QAAQ;EACvB;CACF;AACF;;AAGA,eAA8B,QAAsC;CAClE,MAAM,IAAI,MACR,uJAEF;AACF"}
|
package/dist/vitest.cjs
CHANGED
package/dist/vitest.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cedarjs/pg",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Worktree-isolated local Postgres for Vite+, Nx, and CedarJS (via autopg)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"autopg",
|
|
@@ -48,11 +48,6 @@
|
|
|
48
48
|
"import": "./dist/vite-plus.mjs",
|
|
49
49
|
"require": "./dist/vite-plus.cjs"
|
|
50
50
|
},
|
|
51
|
-
"./nx": {
|
|
52
|
-
"types": "./dist/nx.d.mts",
|
|
53
|
-
"import": "./dist/nx.mjs",
|
|
54
|
-
"require": "./dist/nx.cjs"
|
|
55
|
-
},
|
|
56
51
|
"./vitest": {
|
|
57
52
|
"types": "./dist/vitest.d.mts",
|
|
58
53
|
"import": "./dist/vitest.mjs",
|
|
@@ -92,7 +87,7 @@
|
|
|
92
87
|
},
|
|
93
88
|
"publishConfig": {
|
|
94
89
|
"access": "public",
|
|
95
|
-
"tag": "
|
|
90
|
+
"tag": "latest"
|
|
96
91
|
},
|
|
97
92
|
"dependencies": {
|
|
98
93
|
"pg": "^8.16.3"
|
|
@@ -101,8 +96,17 @@
|
|
|
101
96
|
"@types/node": "^22.15.0",
|
|
102
97
|
"@types/pg": "^8.15.4",
|
|
103
98
|
"typescript": "^5.8.3",
|
|
99
|
+
"vite": "^8.2.0",
|
|
104
100
|
"vite-plus": "^0.2.4"
|
|
105
101
|
},
|
|
102
|
+
"peerDependencies": {
|
|
103
|
+
"vite": ">=8.0.0"
|
|
104
|
+
},
|
|
105
|
+
"peerDependenciesMeta": {
|
|
106
|
+
"vite": {
|
|
107
|
+
"optional": true
|
|
108
|
+
}
|
|
109
|
+
},
|
|
106
110
|
"overrides": {
|
|
107
111
|
"vite": "npm:@voidzero-dev/vite-plus-core@latest",
|
|
108
112
|
"vitest": "4.1.9"
|
package/scripts/autopg-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
v3.
|
|
1
|
+
v3.2.2
|
|
@@ -31,10 +31,15 @@ case "$(uname -s)-$(uname -m)" in
|
|
|
31
31
|
;;
|
|
32
32
|
esac
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
# Reuse only the pinned version; a stale binary (cached runner, older image) is replaced.
|
|
35
|
+
EXISTING="$("${HOME}/.local/bin/autopg" --version 2>/dev/null || true)"
|
|
36
|
+
if [ "${EXISTING}" = "autopg ${VERSION#v}" ]; then
|
|
37
|
+
echo "[ci-install-autopg] already present: ${HOME}/.local/bin/autopg (${EXISTING})"
|
|
36
38
|
exit 0
|
|
37
39
|
fi
|
|
40
|
+
if [ -n "${EXISTING}" ]; then
|
|
41
|
+
echo "[ci-install-autopg] replacing ${EXISTING} with ${VERSION}"
|
|
42
|
+
fi
|
|
38
43
|
|
|
39
44
|
TARBALL="autopg-${VERSION#v}-${PLATFORM}.tar.gz"
|
|
40
45
|
URL="https://github.com/${REPO}/releases/download/${VERSION}/${TARBALL}"
|
package/scripts/postinstall.js
CHANGED
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* Idempotent across npm / yarn / pnpm. Never fails the parent install hard
|
|
5
5
|
* when network is unavailable; prints a clear warning instead.
|
|
6
6
|
*
|
|
7
|
-
* Version pin: scripts/autopg-version (single source of truth).
|
|
7
|
+
* Version pin: scripts/autopg-version (single source of truth). An existing
|
|
8
|
+
* older autopg only gets an upgrade hint (runtime warns the same way).
|
|
8
9
|
*
|
|
9
10
|
* - Local / non-CI: pinned upstream install.sh (may start pm2).
|
|
10
11
|
* - CI + CEDAR_PG_INSTALL_AUTOPG=1: binary-only scripts/ci-install-autopg.sh
|
|
@@ -21,25 +22,54 @@ const HERE = dirname(fileURLToPath(import.meta.url));
|
|
|
21
22
|
const AUTOPG_VERSION = readFileSync(join(HERE, "autopg-version"), "utf8").trim();
|
|
22
23
|
const INSTALL_URL = `https://raw.githubusercontent.com/automagik-dev/autopg/${AUTOPG_VERSION}/install.sh`;
|
|
23
24
|
const CI_INSTALL = join(HERE, "ci-install-autopg.sh");
|
|
25
|
+
/** Where ci-install-autopg.sh installs (and replaces stale binaries). */
|
|
26
|
+
const LOCAL_BIN = join(homedir(), ".local", "bin", "autopg");
|
|
24
27
|
|
|
25
|
-
|
|
26
|
-
|
|
28
|
+
/** Resolved autopg binary (same order as runtime), or null. */
|
|
29
|
+
function findAutopg() {
|
|
30
|
+
if (process.env.AUTOPG_BIN && existsSync(process.env.AUTOPG_BIN)) return process.env.AUTOPG_BIN;
|
|
27
31
|
const which = spawnSync("which", ["autopg"], { encoding: "utf8" });
|
|
28
|
-
if (which.status === 0 && which.stdout.trim()) return
|
|
29
|
-
|
|
30
|
-
|
|
32
|
+
if (which.status === 0 && which.stdout.trim()) return which.stdout.trim();
|
|
33
|
+
return existsSync(LOCAL_BIN) ? LOCAL_BIN : null;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function parseVersion(text) {
|
|
37
|
+
const m = /(\d+)\.(\d+)\.(\d+)/.exec(text);
|
|
38
|
+
return m ? [Number(m[1]), Number(m[2]), Number(m[3])] : null;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Existing autopg older than the pin → hint only. Upgrading restarts the host
|
|
43
|
+
* every worktree shares, so it is never done from `pnpm install`.
|
|
44
|
+
*/
|
|
45
|
+
function warnIfOutdated(bin) {
|
|
46
|
+
const out = spawnSync(bin, ["--version"], { encoding: "utf8", timeout: 5000 }).stdout ?? "";
|
|
47
|
+
const have = parseVersion(out);
|
|
48
|
+
const want = parseVersion(AUTOPG_VERSION);
|
|
49
|
+
if (!have || !want) return;
|
|
50
|
+
if ((have[0] - want[0] || have[1] - want[1] || have[2] - want[2]) >= 0) return;
|
|
51
|
+
console.warn(
|
|
52
|
+
`[cedarpg] autopg ${have.join(".")} is older than ${AUTOPG_VERSION}, the version @cedarjs/pg is tested with.\n` +
|
|
53
|
+
" Upgrade (restarts the shared host; open connections from other worktrees drop):\n" +
|
|
54
|
+
` curl -fsSL ${INSTALL_URL} | AUTOPG_VERSION=${AUTOPG_VERSION} bash\n` +
|
|
55
|
+
" autopg update",
|
|
56
|
+
);
|
|
31
57
|
}
|
|
32
58
|
|
|
33
59
|
function main() {
|
|
34
60
|
if (process.env.CEDAR_PG_SKIP_POSTINSTALL === "1") {
|
|
35
61
|
return;
|
|
36
62
|
}
|
|
37
|
-
if (hasAutopg()) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
63
|
const inCi = process.env.CI === "true";
|
|
42
64
|
const forceCiInstall = process.env.CEDAR_PG_INSTALL_AUTOPG === "1";
|
|
65
|
+
const existing = findAutopg();
|
|
66
|
+
// Forced CI install owns ~/.local/bin/autopg: let the installer replace a
|
|
67
|
+
// stale cached binary (it is a no-op when the pinned version is present).
|
|
68
|
+
const ciOwnsExisting = inCi && forceCiInstall && existing === LOCAL_BIN;
|
|
69
|
+
if (existing && !ciOwnsExisting) {
|
|
70
|
+
warnIfOutdated(existing);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
43
73
|
|
|
44
74
|
// Skip in CI unless explicitly requested; CI images often bake autopg
|
|
45
75
|
// or run scripts/ci-install-autopg.sh from the workflow.
|
|
@@ -52,9 +82,7 @@ function main() {
|
|
|
52
82
|
}
|
|
53
83
|
|
|
54
84
|
if (inCi && forceCiInstall) {
|
|
55
|
-
console.log(
|
|
56
|
-
`[cedarpg] autopg not found; CI binary install ${AUTOPG_VERSION} via ci-install-autopg.sh...`,
|
|
57
|
-
);
|
|
85
|
+
console.log(`[cedarpg] CI binary install ${AUTOPG_VERSION} via ci-install-autopg.sh...`);
|
|
58
86
|
const result = spawnSync("bash", [CI_INSTALL], {
|
|
59
87
|
stdio: "inherit",
|
|
60
88
|
env: { ...process.env, AUTOPG_VERSION },
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
//#region src/core/constants.ts
|
|
2
|
-
/**
|
|
3
|
-
* Product identity vs frozen crypto.
|
|
4
|
-
*
|
|
5
|
-
* State dirs follow the CLI name (`.cedarpg`): product-owned, not nested under
|
|
6
|
-
* autopg's `~/.autopg/` (host owns that) and not a generic `.pg` (collision-prone).
|
|
7
|
-
* Password salt is an opaque crypto constant; bump ROLE_PASSWORD_SCHEME to change it.
|
|
8
|
-
*/
|
|
9
|
-
/** User-facing CLI binary (`package.json` bin) and log prefix */
|
|
10
|
-
const CLI_NAME = "cedarpg";
|
|
11
|
-
/**
|
|
12
|
-
* Worktree-local state dir and home-registry parent (`~/.cedarpg/registry`).
|
|
13
|
-
* Frozen for lease/gc discovery after first alpha consumers appear.
|
|
14
|
-
*/
|
|
15
|
-
const STATE_DIRNAME = ".cedarpg";
|
|
16
|
-
/**
|
|
17
|
-
* Password scheme v2 salt prefix: sha256(`${PASSWORD_SALT_PREFIX}\0` + roleName).
|
|
18
|
-
* Opaque; independent of STATE_DIRNAME / CLI_NAME. Bump ROLE_PASSWORD_SCHEME to change.
|
|
19
|
-
*/
|
|
20
|
-
const PASSWORD_SALT_PREFIX = "cedar-pg";
|
|
21
|
-
//#endregion
|
|
22
|
-
Object.defineProperty(exports, "CLI_NAME", {
|
|
23
|
-
enumerable: true,
|
|
24
|
-
get: function() {
|
|
25
|
-
return CLI_NAME;
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
Object.defineProperty(exports, "PASSWORD_SALT_PREFIX", {
|
|
29
|
-
enumerable: true,
|
|
30
|
-
get: function() {
|
|
31
|
-
return PASSWORD_SALT_PREFIX;
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
Object.defineProperty(exports, "STATE_DIRNAME", {
|
|
35
|
-
enumerable: true,
|
|
36
|
-
get: function() {
|
|
37
|
-
return STATE_DIRNAME;
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
//# sourceMappingURL=constants-Ct8myrEn.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants-Ct8myrEn.cjs","names":[],"sources":["../src/core/constants.ts"],"sourcesContent":["/**\n * Product identity vs frozen crypto.\n *\n * State dirs follow the CLI name (`.cedarpg`): product-owned, not nested under\n * autopg's `~/.autopg/` (host owns that) and not a generic `.pg` (collision-prone).\n * Password salt is an opaque crypto constant; bump ROLE_PASSWORD_SCHEME to change it.\n */\n\n/** User-facing CLI binary (`package.json` bin) and log prefix */\nexport const CLI_NAME = \"cedarpg\";\n\n/**\n * Worktree-local state dir and home-registry parent (`~/.cedarpg/registry`).\n * Frozen for lease/gc discovery after first alpha consumers appear.\n */\nexport const STATE_DIRNAME = \".cedarpg\";\n\n/**\n * Password scheme v2 salt prefix: sha256(`${PASSWORD_SALT_PREFIX}\\0` + roleName).\n * Opaque; independent of STATE_DIRNAME / CLI_NAME. Bump ROLE_PASSWORD_SCHEME to change.\n */\nexport const PASSWORD_SALT_PREFIX = \"cedar-pg\";\n"],"mappings":";;;;;;;;;AASA,MAAa,WAAW;;;;;AAMxB,MAAa,gBAAgB;;;;;AAM7B,MAAa,uBAAuB"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
//#region src/core/constants.ts
|
|
2
|
-
/**
|
|
3
|
-
* Product identity vs frozen crypto.
|
|
4
|
-
*
|
|
5
|
-
* State dirs follow the CLI name (`.cedarpg`): product-owned, not nested under
|
|
6
|
-
* autopg's `~/.autopg/` (host owns that) and not a generic `.pg` (collision-prone).
|
|
7
|
-
* Password salt is an opaque crypto constant; bump ROLE_PASSWORD_SCHEME to change it.
|
|
8
|
-
*/
|
|
9
|
-
/** User-facing CLI binary (`package.json` bin) and log prefix */
|
|
10
|
-
const CLI_NAME = "cedarpg";
|
|
11
|
-
/**
|
|
12
|
-
* Worktree-local state dir and home-registry parent (`~/.cedarpg/registry`).
|
|
13
|
-
* Frozen for lease/gc discovery after first alpha consumers appear.
|
|
14
|
-
*/
|
|
15
|
-
const STATE_DIRNAME = ".cedarpg";
|
|
16
|
-
/**
|
|
17
|
-
* Password scheme v2 salt prefix: sha256(`${PASSWORD_SALT_PREFIX}\0` + roleName).
|
|
18
|
-
* Opaque; independent of STATE_DIRNAME / CLI_NAME. Bump ROLE_PASSWORD_SCHEME to change.
|
|
19
|
-
*/
|
|
20
|
-
const PASSWORD_SALT_PREFIX = "cedar-pg";
|
|
21
|
-
//#endregion
|
|
22
|
-
export { PASSWORD_SALT_PREFIX as n, STATE_DIRNAME as r, CLI_NAME as t };
|
|
23
|
-
|
|
24
|
-
//# sourceMappingURL=constants-NLR0U4NR.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants-NLR0U4NR.mjs","names":[],"sources":["../src/core/constants.ts"],"sourcesContent":["/**\n * Product identity vs frozen crypto.\n *\n * State dirs follow the CLI name (`.cedarpg`): product-owned, not nested under\n * autopg's `~/.autopg/` (host owns that) and not a generic `.pg` (collision-prone).\n * Password salt is an opaque crypto constant; bump ROLE_PASSWORD_SCHEME to change it.\n */\n\n/** User-facing CLI binary (`package.json` bin) and log prefix */\nexport const CLI_NAME = \"cedarpg\";\n\n/**\n * Worktree-local state dir and home-registry parent (`~/.cedarpg/registry`).\n * Frozen for lease/gc discovery after first alpha consumers appear.\n */\nexport const STATE_DIRNAME = \".cedarpg\";\n\n/**\n * Password scheme v2 salt prefix: sha256(`${PASSWORD_SALT_PREFIX}\\0` + roleName).\n * Opaque; independent of STATE_DIRNAME / CLI_NAME. Bump ROLE_PASSWORD_SCHEME to change.\n */\nexport const PASSWORD_SALT_PREFIX = \"cedar-pg\";\n"],"mappings":";;;;;;;;;AASA,MAAa,WAAW;;;;;AAMxB,MAAa,gBAAgB;;;;;AAM7B,MAAa,uBAAuB"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { t as DbMode } from "./naming-C2nGVxPk.mjs";
|
|
2
|
-
//#region src/core/lease.d.ts
|
|
3
|
-
type Lease = {
|
|
4
|
-
schemaVersion: 1;
|
|
5
|
-
mode: DbMode;
|
|
6
|
-
root: string;
|
|
7
|
-
repoSlug: string;
|
|
8
|
-
worktreeSlug: string;
|
|
9
|
-
pathHash: string;
|
|
10
|
-
databaseName: string;
|
|
11
|
-
roleName: string;
|
|
12
|
-
port: number;
|
|
13
|
-
pid: number;
|
|
14
|
-
createdAt: string;
|
|
15
|
-
};
|
|
16
|
-
/** Narrow-parse a lease; reject incomplete or wrong-version records. */
|
|
17
|
-
declare function parseLease(raw: unknown): Lease | null;
|
|
18
|
-
/** Absolute `.cedarpg/<mode>.env` path (resolves root when omitted). */
|
|
19
|
-
declare function envFilePath(root: string | undefined, mode: DbMode): string;
|
|
20
|
-
declare function readLease(root: string, mode: DbMode): Lease | null;
|
|
21
|
-
declare function isOrphanLease(lease: Lease): boolean;
|
|
22
|
-
//#endregion
|
|
23
|
-
export { readLease as a, parseLease as i, envFilePath as n, isOrphanLease as r, Lease as t };
|
|
24
|
-
//# sourceMappingURL=lease-B3TuX92y.d.mts.map
|