@prostgles/prostgles 2.3.6-dev.1787353201 → 2.3.6-dev.1788628254
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/dist/common/DashboardTypes.d.ts +3 -0
- package/dist/common/DashboardTypes.d.ts.map +1 -1
- package/dist/server/DB.Dockerfile +11 -0
- package/dist/server/Dockerfile +33 -0
- package/dist/server/package.json +2 -2
- package/dist/server/src/ConnectionManager/getHotReloadConfigs.d.ts.map +1 -1
- package/dist/server/src/McpHub/DockerSandbox/getDockerRunArgs.d.ts +1 -1
- package/dist/server/src/McpHub/DockerSandbox/getDockerRunArgs.d.ts.map +1 -1
- package/dist/server/src/McpHub/DockerSandbox/getDockerRunArgs.js +5 -4
- package/dist/server/src/McpHub/DockerSandbox/getDockerRunArgs.js.map +1 -1
- package/dist/server/src/ServiceManager/buildService.d.ts +0 -1
- package/dist/server/src/ServiceManager/buildService.d.ts.map +1 -1
- package/dist/server/src/ServiceManager/buildService.js +2 -9
- package/dist/server/src/ServiceManager/buildService.js.map +1 -1
- package/dist/server/src/ServiceManager/startService.d.ts.map +1 -1
- package/dist/server/src/ServiceManager/startService.js +12 -10
- package/dist/server/src/ServiceManager/startService.js.map +1 -1
- package/dist/server/src/cli/DB.Dockerfile +11 -0
- package/dist/server/src/cli/Dockerfile +33 -0
- package/dist/server/src/cli/cli.js +32 -7
- package/dist/server/src/cli/cli.js.map +1 -1
- package/dist/server/src/cli/cliTemplateFiles.d.ts +80 -0
- package/dist/server/src/cli/cliTemplateFiles.d.ts.map +1 -1
- package/dist/server/src/cli/cliTemplateFiles.js +142 -1
- package/dist/server/src/cli/cliTemplateFiles.js.map +1 -1
- package/dist/server/src/cli/cliTemplateFiles.spec.d.ts +2 -0
- package/dist/server/src/cli/cliTemplateFiles.spec.d.ts.map +1 -0
- package/dist/server/src/cli/cliTemplateFiles.spec.js +38 -0
- package/dist/server/src/cli/cliTemplateFiles.spec.js.map +1 -0
- package/dist/server/src/cli/upgradeCli.d.ts +6 -0
- package/dist/server/src/cli/upgradeCli.d.ts.map +1 -0
- package/dist/server/src/cli/upgradeCli.js +88 -0
- package/dist/server/src/cli/upgradeCli.js.map +1 -0
- package/dist/server/src/cli/upgradeCli.spec.d.ts +2 -0
- package/dist/server/src/cli/upgradeCli.spec.d.ts.map +1 -0
- package/dist/server/src/cli/upgradeCli.spec.js +59 -0
- package/dist/server/src/cli/upgradeCli.spec.js.map +1 -0
- package/dist/server/src/dockerRuntime.d.ts +21 -0
- package/dist/server/src/dockerRuntime.d.ts.map +1 -0
- package/dist/server/src/dockerRuntime.js +45 -0
- package/dist/server/src/dockerRuntime.js.map +1 -0
- package/dist/server/src/dockerRuntime.spec.d.ts +2 -0
- package/dist/server/src/dockerRuntime.spec.d.ts.map +1 -0
- package/dist/server/src/dockerRuntime.spec.js +51 -0
- package/dist/server/src/dockerRuntime.spec.js.map +1 -0
- package/dist/server/src/schemaConfig.d.ts +4 -1
- package/dist/server/src/schemaConfig.d.ts.map +1 -1
- package/dist/server/src/schemaConfig.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.srcSubfolderNames = exports.generatedFolderName = exports.srcFolderName = exports.saveCliTemplateFiles = void 0;
|
|
3
|
+
exports.getCliComposeFiles = exports.srcSubfolderNames = exports.generatedFolderName = exports.srcFolderName = exports.saveCliComposeFiles = exports.saveCliTemplateFiles = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const utils_1 = require("../../../common/utils");
|
|
6
6
|
const crypto_1 = require("crypto");
|
|
@@ -12,6 +12,15 @@ const saveCliTemplateFiles = ({ configId, targetPath, }) => {
|
|
|
12
12
|
saveFolderFiles(targetPath, getCliTemplateFiles({ configId }));
|
|
13
13
|
};
|
|
14
14
|
exports.saveCliTemplateFiles = saveCliTemplateFiles;
|
|
15
|
+
const saveCliComposeFiles = ({ configId, targetPath, }) => {
|
|
16
|
+
const files = (0, exports.getCliComposeFiles)({ configId });
|
|
17
|
+
const existingFiles = Object.keys(files).filter((fileName) => (0, fs_1.existsSync)((0, path_1.join)(targetPath, fileName)));
|
|
18
|
+
if (existingFiles.length) {
|
|
19
|
+
throw new Error(`Refusing to overwrite existing deployment files: ${existingFiles.join(", ")}`);
|
|
20
|
+
}
|
|
21
|
+
saveFolderFiles(targetPath, files);
|
|
22
|
+
};
|
|
23
|
+
exports.saveCliComposeFiles = saveCliComposeFiles;
|
|
15
24
|
exports.srcFolderName = "src";
|
|
16
25
|
exports.generatedFolderName = "generated";
|
|
17
26
|
const testsFolderName = "tests";
|
|
@@ -38,6 +47,40 @@ const saveFolderFiles = (targetPath, folderFiles) => {
|
|
|
38
47
|
}
|
|
39
48
|
};
|
|
40
49
|
const getCliTemplateFiles = ({ configId }) => ({
|
|
50
|
+
...(0, exports.getCliComposeFiles)({ configId }),
|
|
51
|
+
"README.md": `
|
|
52
|
+
# ${configId}
|
|
53
|
+
|
|
54
|
+
## Development
|
|
55
|
+
|
|
56
|
+
Copy \`.env.example\` to \`.env\`, configure both database URLs, then run:
|
|
57
|
+
|
|
58
|
+
\`\`\`sh
|
|
59
|
+
npm install
|
|
60
|
+
npm run dev
|
|
61
|
+
\`\`\`
|
|
62
|
+
|
|
63
|
+
## Upgrading
|
|
64
|
+
|
|
65
|
+
Run \`npm run upgrade\` to compare this app with the latest scaffold.
|
|
66
|
+
Each new file prompts for skip/save (default: save). Each differing file prompts for
|
|
67
|
+
skip/merge/overwrite (default: merge). Identical files are left alone.
|
|
68
|
+
Merge opens VS Code's merge editor; the \`code\` command must be on PATH.
|
|
69
|
+
There is no historical template baseline, so merge is a manual comparison of both versions.
|
|
70
|
+
Save the result and close the merge editor to continue to the next file.
|
|
71
|
+
Changes are applied as you go. Run \`npm install\` after resolving the files.
|
|
72
|
+
|
|
73
|
+
## Deployment
|
|
74
|
+
|
|
75
|
+
Set strong \`PRGL_PASSWORD\` and \`PROSTGLES_DOCKER_DB_PASSWORD\` values in \`.env\`, then use Docker Compose directly:
|
|
76
|
+
|
|
77
|
+
\`\`\`sh
|
|
78
|
+
docker compose up -d --build
|
|
79
|
+
docker compose logs -f app
|
|
80
|
+
docker compose down
|
|
81
|
+
\`\`\`
|
|
82
|
+
|
|
83
|
+
The database and Prostgles data directory use named volumes. Managed app services share the private runtime network and are not published on host ports.`,
|
|
41
84
|
"package.json": JSON.stringify(getPackageJson(configId), null, 2) + "\n",
|
|
42
85
|
"tsconfig.json": JSON.stringify({
|
|
43
86
|
compilerOptions: {
|
|
@@ -176,10 +219,101 @@ const getCliTemplateFiles = ({ configId }) => ({
|
|
|
176
219
|
# Database exposed by this config. Must use the same server as the state database.
|
|
177
220
|
PROSTGLES_DATABASE_URL=postgres://user:password@localhost:5432/${configId}
|
|
178
221
|
|
|
222
|
+
# Used by compose.yaml for its private PostgreSQL instance.
|
|
223
|
+
PROSTGLES_DOCKER_DB_PASSWORD=${(0, crypto_1.randomBytes)(24).toString("base64url")}
|
|
224
|
+
|
|
179
225
|
# npm test starts an ephemeral PostgreSQL Docker container bound to 127.0.0.1 only.
|
|
180
226
|
# Override only when the app needs a different PostgreSQL/PostGIS version.
|
|
181
227
|
# PROSTGLES_TEST_POSTGRES_IMAGE=postgis/postgis:17-3.4`,
|
|
182
228
|
});
|
|
229
|
+
const readCliDockerfile = (filename) => {
|
|
230
|
+
const filePath = (0, path_1.join)(__dirname, filename);
|
|
231
|
+
if (!(0, fs_1.existsSync)(filePath)) {
|
|
232
|
+
throw new Error(`Missing bundled ${filename}: ${filePath}`);
|
|
233
|
+
}
|
|
234
|
+
return (0, fs_1.readFileSync)(filePath, "utf8");
|
|
235
|
+
};
|
|
236
|
+
const getCliComposeFiles = ({ configId }) => ({
|
|
237
|
+
"DB.Dockerfile": readCliDockerfile("DB.Dockerfile"),
|
|
238
|
+
Dockerfile: `${readCliDockerfile("Dockerfile")}
|
|
239
|
+
FROM runtime AS app
|
|
240
|
+
|
|
241
|
+
WORKDIR /app
|
|
242
|
+
|
|
243
|
+
COPY . .
|
|
244
|
+
RUN npm install
|
|
245
|
+
RUN npm run build
|
|
246
|
+
|
|
247
|
+
ENV NODE_ENV=production
|
|
248
|
+
|
|
249
|
+
CMD ["npm", "start"]`,
|
|
250
|
+
"compose.yaml": `
|
|
251
|
+
name: ${configId}
|
|
252
|
+
|
|
253
|
+
services:
|
|
254
|
+
app:
|
|
255
|
+
build: .
|
|
256
|
+
init: true
|
|
257
|
+
restart: unless-stopped
|
|
258
|
+
depends_on:
|
|
259
|
+
db:
|
|
260
|
+
condition: service_healthy
|
|
261
|
+
environment:
|
|
262
|
+
IS_DOCKER: "yes"
|
|
263
|
+
NODE_ENV: production
|
|
264
|
+
PRGL_USERNAME: \${PRGL_USERNAME:-admin}
|
|
265
|
+
PRGL_PASSWORD: \${PRGL_PASSWORD:?Set PRGL_PASSWORD in .env}
|
|
266
|
+
PROSTGLES_UI_HOST: "0.0.0.0"
|
|
267
|
+
PROSTGLES_DATA_DIR: /var/lib/prostgles
|
|
268
|
+
PROSTGLES_STATE_DATABASE_URL: postgres://postgres:\${PROSTGLES_DOCKER_DB_PASSWORD:?Set PROSTGLES_DOCKER_DB_PASSWORD in .env}@db:5432/prostgles_state
|
|
269
|
+
PROSTGLES_DATABASE_URL: postgres://postgres:\${PROSTGLES_DOCKER_DB_PASSWORD:?Set PROSTGLES_DOCKER_DB_PASSWORD in .env}@db:5432/${configId}
|
|
270
|
+
PROSTGLES_DOCKER_NETWORK: \${PROSTGLES_DOCKER_NETWORK:-${configId}-runtime}
|
|
271
|
+
PROSTGLES_INSTANCE_ID: \${PROSTGLES_INSTANCE_ID:-${configId}}
|
|
272
|
+
ports:
|
|
273
|
+
- "\${PROSTGLES_DOCKER_IP:-127.0.0.1}:\${PROSTGLES_DOCKER_PORT:-3004}:3004"
|
|
274
|
+
volumes:
|
|
275
|
+
- prostgles-data:/var/lib/prostgles
|
|
276
|
+
- /var/run/docker.sock:/var/run/docker.sock
|
|
277
|
+
networks:
|
|
278
|
+
- runtime
|
|
279
|
+
|
|
280
|
+
db:
|
|
281
|
+
build:
|
|
282
|
+
context: .
|
|
283
|
+
dockerfile: DB.Dockerfile
|
|
284
|
+
command: postgres -c shared_preload_libraries=pg_stat_statements -c max_connections=200
|
|
285
|
+
restart: unless-stopped
|
|
286
|
+
environment:
|
|
287
|
+
POSTGRES_DB: postgres
|
|
288
|
+
POSTGRES_USER: postgres
|
|
289
|
+
POSTGRES_PASSWORD: \${PROSTGLES_DOCKER_DB_PASSWORD:?Set PROSTGLES_DOCKER_DB_PASSWORD in .env}
|
|
290
|
+
healthcheck:
|
|
291
|
+
test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"]
|
|
292
|
+
interval: 2s
|
|
293
|
+
timeout: 3s
|
|
294
|
+
retries: 30
|
|
295
|
+
volumes:
|
|
296
|
+
- database:/var/lib/postgresql/data
|
|
297
|
+
networks:
|
|
298
|
+
- runtime
|
|
299
|
+
|
|
300
|
+
volumes:
|
|
301
|
+
database:
|
|
302
|
+
prostgles-data:
|
|
303
|
+
|
|
304
|
+
networks:
|
|
305
|
+
runtime:
|
|
306
|
+
name: \${PROSTGLES_DOCKER_NETWORK:-${configId}-runtime}
|
|
307
|
+
driver: bridge`,
|
|
308
|
+
".dockerignore": `
|
|
309
|
+
.env
|
|
310
|
+
.git
|
|
311
|
+
.prostgles
|
|
312
|
+
build
|
|
313
|
+
node_modules
|
|
314
|
+
*.log`,
|
|
315
|
+
});
|
|
316
|
+
exports.getCliComposeFiles = getCliComposeFiles;
|
|
183
317
|
const getPackageJson = (configId) => ({
|
|
184
318
|
name: configId,
|
|
185
319
|
private: true,
|
|
@@ -191,6 +325,7 @@ const getPackageJson = (configId) => ({
|
|
|
191
325
|
lint: "eslint .",
|
|
192
326
|
"lint:fix": "eslint . --fix",
|
|
193
327
|
start: "prostgles start --config .",
|
|
328
|
+
upgrade: `npx ${package_json_1.default.name}@latest upgrade --config .`,
|
|
194
329
|
test: 'npm run build && node --env-file-if-exists=.env --test "build/tests/**/*.test.js"',
|
|
195
330
|
},
|
|
196
331
|
dependencies: { [package_json_1.default.name]: `^${package_json_1.default.version}` },
|
|
@@ -376,6 +511,12 @@ const getCliAgentsFile = () => `
|
|
|
376
511
|
- Add test users through the fixture's \`users\` option and connect with \`connectProjectAs(userKey)\`. Sessions are seeded directly, so deployment tests do not need to exercise the login UI.
|
|
377
512
|
- Add deterministic database state with the fixture's \`seed\` callback. Never use development or production database URLs for test setup.
|
|
378
513
|
|
|
514
|
+
## Deployment
|
|
515
|
+
|
|
516
|
+
- Use \`docker compose up -d --build\` for production deployment. Keep Compose as the operational interface for logs, restarts, upgrades, and shutdown.
|
|
517
|
+
- The generated stack persists PostgreSQL and \`/var/lib/prostgles\`. Back up both named volumes.
|
|
518
|
+
- Managed services use the configured private Docker runtime network. Do not publish their ports unless an external client explicitly requires access.
|
|
519
|
+
|
|
379
520
|
## Tables, display options, and hooks
|
|
380
521
|
|
|
381
522
|
- ${schemaConfigGuidance.tableConfig} ${schemaConfigGuidance.tableConfigMigrations}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cliTemplateFiles.js","sourceRoot":"","sources":["../../../../src/cli/cliTemplateFiles.ts"],"names":[],"mappings":";;;;AAAA,yCAA0C;AAC1C,mCAAqC;AAErC,8EAA6C;AAC7C,qDAAwD;AACxD,+BAAqC;AACrC,
|
|
1
|
+
{"version":3,"file":"cliTemplateFiles.js","sourceRoot":"","sources":["../../../../src/cli/cliTemplateFiles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliTemplateFiles.spec.d.ts","sourceRoot":"","sources":["../../../../src/cli/cliTemplateFiles.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const strict_1 = tslib_1.__importDefault(require("node:assert/strict"));
|
|
5
|
+
const node_fs_1 = require("node:fs");
|
|
6
|
+
const node_os_1 = require("node:os");
|
|
7
|
+
const node_path_1 = require("node:path");
|
|
8
|
+
const node_test_1 = tslib_1.__importDefault(require("node:test"));
|
|
9
|
+
const cliTemplateFiles_1 = require("./cliTemplateFiles");
|
|
10
|
+
void (0, node_test_1.default)("new CLI apps include a native Compose deployment", (context) => {
|
|
11
|
+
const targetPath = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), "prostgles-cli-template-"));
|
|
12
|
+
context.after(() => (0, node_fs_1.rmSync)(targetPath, { force: true, recursive: true }));
|
|
13
|
+
(0, cliTemplateFiles_1.saveCliTemplateFiles)({ configId: "my-app", targetPath });
|
|
14
|
+
const compose = (0, node_fs_1.readFileSync)((0, node_path_1.join)(targetPath, "compose.yaml"), "utf8");
|
|
15
|
+
const dockerfile = (0, node_fs_1.readFileSync)((0, node_path_1.join)(targetPath, "Dockerfile"), "utf8");
|
|
16
|
+
strict_1.default.match(compose, /^name: my-app$/m);
|
|
17
|
+
strict_1.default.match(compose, /^ {2}app:$/m);
|
|
18
|
+
strict_1.default.match(compose, /^ {2}db:$/m);
|
|
19
|
+
strict_1.default.match(compose, /PROSTGLES_DOCKER_NETWORK: \$\{PROSTGLES_DOCKER_NETWORK:-my-app-runtime\}/);
|
|
20
|
+
strict_1.default.match(compose, /PROSTGLES_INSTANCE_ID: \$\{PROSTGLES_INSTANCE_ID:-my-app\}/);
|
|
21
|
+
strict_1.default.match(compose, /\/var\/run\/docker\.sock:\/var\/run\/docker\.sock/);
|
|
22
|
+
strict_1.default.match(compose, /^ {4}name: \$\{PROSTGLES_DOCKER_NETWORK:-my-app-runtime\}$/m);
|
|
23
|
+
strict_1.default.ok(dockerfile.includes("AS runtime"));
|
|
24
|
+
strict_1.default.ok(dockerfile.includes("FROM runtime AS app"));
|
|
25
|
+
strict_1.default.ok(!dockerfile.includes("prostgles/ui-runtime"));
|
|
26
|
+
strict_1.default.ok(compose.includes("dockerfile: DB.Dockerfile"));
|
|
27
|
+
strict_1.default.ok((0, node_fs_1.readFileSync)((0, node_path_1.join)(targetPath, "DB.Dockerfile"), "utf8").includes("procps"));
|
|
28
|
+
strict_1.default.ok(compose.includes("shared_preload_libraries=pg_stat_statements"));
|
|
29
|
+
strict_1.default.ok(compose.includes("max_connections=200"));
|
|
30
|
+
});
|
|
31
|
+
void (0, node_test_1.default)("compose init does not overwrite deployment files", (context) => {
|
|
32
|
+
const targetPath = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), "prostgles-compose-init-"));
|
|
33
|
+
context.after(() => (0, node_fs_1.rmSync)(targetPath, { force: true, recursive: true }));
|
|
34
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(targetPath, "Dockerfile"), "custom\n");
|
|
35
|
+
strict_1.default.throws(() => (0, cliTemplateFiles_1.saveCliComposeFiles)({ configId: "my-app", targetPath }), /Refusing to overwrite existing deployment files: Dockerfile/);
|
|
36
|
+
strict_1.default.equal((0, node_fs_1.readFileSync)((0, node_path_1.join)(targetPath, "Dockerfile"), "utf8"), "custom\n");
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=cliTemplateFiles.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliTemplateFiles.spec.js","sourceRoot":"","sources":["../../../../src/cli/cliTemplateFiles.spec.ts"],"names":[],"mappings":";;;AAAA,wEAAwC;AACxC,qCAA2E;AAC3E,qCAAiC;AACjC,yCAAiC;AACjC,kEAA6B;AAC7B,yDAA+E;AAE/E,KAAK,IAAA,mBAAI,EAAC,kDAAkD,EAAE,CAAC,OAAO,EAAE,EAAE;IACxE,MAAM,UAAU,GAAG,IAAA,qBAAW,EAAC,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,yBAAyB,CAAC,CAAC,CAAC;IAC1E,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAA,gBAAM,EAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAE1E,IAAA,uCAAoB,EAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;IAEzD,MAAM,OAAO,GAAG,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,UAAU,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC;IACvE,MAAM,UAAU,GAAG,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,UAAU,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;IACxE,gBAAM,CAAC,KAAK,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IACzC,gBAAM,CAAC,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACrC,gBAAM,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACpC,gBAAM,CAAC,KAAK,CACV,OAAO,EACP,0EAA0E,CAC3E,CAAC;IACF,gBAAM,CAAC,KAAK,CACV,OAAO,EACP,4DAA4D,CAC7D,CAAC;IACF,gBAAM,CAAC,KAAK,CAAC,OAAO,EAAE,mDAAmD,CAAC,CAAC;IAC3E,gBAAM,CAAC,KAAK,CACV,OAAO,EACP,6DAA6D,CAC9D,CAAC;IACF,gBAAM,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IAC7C,gBAAM,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACtD,gBAAM,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACxD,gBAAM,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACzD,gBAAM,CAAC,EAAE,CACP,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,UAAU,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAC3E,CAAC;IACF,gBAAM,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,6CAA6C,CAAC,CAAC,CAAC;IAC3E,gBAAM,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;AACrD,CAAC,CAAC,CAAC;AAEH,KAAK,IAAA,mBAAI,EAAC,kDAAkD,EAAE,CAAC,OAAO,EAAE,EAAE;IACxE,MAAM,UAAU,GAAG,IAAA,qBAAW,EAAC,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,yBAAyB,CAAC,CAAC,CAAC;IAC1E,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAA,gBAAM,EAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1E,IAAA,uBAAa,EAAC,IAAA,gBAAI,EAAC,UAAU,EAAE,YAAY,CAAC,EAAE,UAAU,CAAC,CAAC;IAE1D,gBAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,IAAA,sCAAmB,EAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,EAC7D,6DAA6D,CAC9D,CAAC;IACF,gBAAM,CAAC,KAAK,CACV,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,UAAU,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,EACpD,UAAU,CACX,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
type FileAction = "skip" | "save" | "merge" | "overwrite";
|
|
2
|
+
type ChooseFileAction = (file: string, choices: readonly FileAction[], defaultAction: FileAction) => Promise<FileAction>;
|
|
3
|
+
export declare const applyCliUpgradeFiles: (incomingPath: string, targetPath: string, chooseAction: ChooseFileAction, merge?: (local: string, incoming: string) => void) => Promise<void>;
|
|
4
|
+
export declare const upgradeCli: (configId: string, targetPath: string) => Promise<void>;
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=upgradeCli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgradeCli.d.ts","sourceRoot":"","sources":["../../../../src/cli/upgradeCli.ts"],"names":[],"mappings":"AAgBA,KAAK,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;AAC1D,KAAK,gBAAgB,GAAG,CACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,aAAa,EAAE,UAAU,KACtB,OAAO,CAAC,UAAU,CAAC,CAAC;AA6BzB,eAAO,MAAM,oBAAoB,GAC/B,cAAc,MAAM,EACpB,YAAY,MAAM,EAClB,cAAc,gBAAgB,EAC9B,gBA/B8B,MAAM,YAAY,MAAM,SA+B/B,kBA8BxB,CAAC;AAEF,eAAO,MAAM,UAAU,GAAU,UAAU,MAAM,EAAE,YAAY,MAAM,kBAgCpE,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.upgradeCli = exports.applyCliUpgradeFiles = void 0;
|
|
4
|
+
const node_child_process_1 = require("node:child_process");
|
|
5
|
+
const node_fs_1 = require("node:fs");
|
|
6
|
+
const node_os_1 = require("node:os");
|
|
7
|
+
const promises_1 = require("node:readline/promises");
|
|
8
|
+
const node_path_1 = require("node:path");
|
|
9
|
+
const cliTemplateFiles_1 = require("./cliTemplateFiles");
|
|
10
|
+
const mergeWithVSCode = (local, incoming) => {
|
|
11
|
+
const temporaryPath = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), "prostgles-merge-"));
|
|
12
|
+
try {
|
|
13
|
+
const current = (0, node_path_1.join)(temporaryPath, "current");
|
|
14
|
+
const base = (0, node_path_1.join)(temporaryPath, "base");
|
|
15
|
+
(0, node_fs_1.copyFileSync)(local, current);
|
|
16
|
+
// No historical template is available. Let the user reconcile both versions.
|
|
17
|
+
(0, node_fs_1.writeFileSync)(base, "");
|
|
18
|
+
const result = (0, node_child_process_1.spawnSync)("code", ["--wait", "--merge", current, incoming, base, local], {
|
|
19
|
+
stdio: "inherit",
|
|
20
|
+
});
|
|
21
|
+
if (result.error)
|
|
22
|
+
throw new Error("Could not open VS Code. Ensure the code command is on PATH.", { cause: result.error });
|
|
23
|
+
if (result.status !== 0)
|
|
24
|
+
throw new Error(`VS Code exited with status ${result.status ?? 1}`);
|
|
25
|
+
}
|
|
26
|
+
finally {
|
|
27
|
+
(0, node_fs_1.rmSync)(temporaryPath, { recursive: true, force: true });
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const applyCliUpgradeFiles = async (incomingPath, targetPath, chooseAction, merge = mergeWithVSCode) => {
|
|
31
|
+
for (const entry of (0, node_fs_1.readdirSync)(incomingPath, { withFileTypes: true })) {
|
|
32
|
+
const incoming = (0, node_path_1.join)(incomingPath, entry.name);
|
|
33
|
+
const target = (0, node_path_1.join)(targetPath, entry.name);
|
|
34
|
+
if (entry.isDirectory()) {
|
|
35
|
+
await (0, exports.applyCliUpgradeFiles)(incoming, target, chooseAction, merge);
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (!(0, node_fs_1.existsSync)(target)) {
|
|
39
|
+
if ((await chooseAction(target, ["skip", "save"], "save")) === "save") {
|
|
40
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(target), { recursive: true });
|
|
41
|
+
(0, node_fs_1.copyFileSync)(incoming, target);
|
|
42
|
+
console.log(`Saved ${target}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
else if (!(0, node_fs_1.readFileSync)(target).equals((0, node_fs_1.readFileSync)(incoming))) {
|
|
46
|
+
const action = await chooseAction(target, ["skip", "merge", "overwrite"], "merge");
|
|
47
|
+
if (action === "overwrite") {
|
|
48
|
+
(0, node_fs_1.copyFileSync)(incoming, target);
|
|
49
|
+
console.log(`Overwrote ${target}`);
|
|
50
|
+
}
|
|
51
|
+
else if (action === "merge") {
|
|
52
|
+
console.log(`Merging ${target}`);
|
|
53
|
+
merge(target, incoming);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
exports.applyCliUpgradeFiles = applyCliUpgradeFiles;
|
|
59
|
+
const upgradeCli = async (configId, targetPath) => {
|
|
60
|
+
const incomingPath = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), "prostgles-upgrade-"));
|
|
61
|
+
const readline = (0, promises_1.createInterface)({
|
|
62
|
+
input: process.stdin,
|
|
63
|
+
output: process.stdout,
|
|
64
|
+
});
|
|
65
|
+
try {
|
|
66
|
+
(0, cliTemplateFiles_1.saveCliTemplateFiles)({ configId, targetPath: incomingPath });
|
|
67
|
+
await (0, exports.applyCliUpgradeFiles)(incomingPath, targetPath, async (file, choices, defaultAction) => {
|
|
68
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
69
|
+
while (true) {
|
|
70
|
+
const answer = (await readline.question(`${file} [${choices.join("/")}] (${defaultAction}): `))
|
|
71
|
+
.trim()
|
|
72
|
+
.toLowerCase();
|
|
73
|
+
if (!answer)
|
|
74
|
+
return defaultAction;
|
|
75
|
+
const action = choices.find((choice) => choice === answer);
|
|
76
|
+
if (action)
|
|
77
|
+
return action;
|
|
78
|
+
console.log(`Choose ${choices.join(", ")}.`);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
finally {
|
|
83
|
+
readline.close();
|
|
84
|
+
(0, node_fs_1.rmSync)(incomingPath, { recursive: true, force: true });
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
exports.upgradeCli = upgradeCli;
|
|
88
|
+
//# sourceMappingURL=upgradeCli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgradeCli.js","sourceRoot":"","sources":["../../../../src/cli/upgradeCli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgradeCli.spec.d.ts","sourceRoot":"","sources":["../../../../src/cli/upgradeCli.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const strict_1 = tslib_1.__importDefault(require("node:assert/strict"));
|
|
5
|
+
const node_fs_1 = require("node:fs");
|
|
6
|
+
const node_os_1 = require("node:os");
|
|
7
|
+
const node_path_1 = require("node:path");
|
|
8
|
+
const node_test_1 = tslib_1.__importDefault(require("node:test"));
|
|
9
|
+
const upgradeCli_1 = require("./upgradeCli");
|
|
10
|
+
void (0, node_test_1.default)("upgrade prompts per file with defaults and respects every action", async (context) => {
|
|
11
|
+
const root = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), "prostgles-upgrade-test-"));
|
|
12
|
+
context.after(() => (0, node_fs_1.rmSync)(root, { recursive: true, force: true }));
|
|
13
|
+
const incoming = (0, node_path_1.join)(root, "incoming");
|
|
14
|
+
const target = (0, node_path_1.join)(root, "target");
|
|
15
|
+
(0, node_fs_1.mkdirSync)(incoming);
|
|
16
|
+
(0, node_fs_1.mkdirSync)(target);
|
|
17
|
+
const actions = {
|
|
18
|
+
"new-save": "save",
|
|
19
|
+
"new-skip": "skip",
|
|
20
|
+
"existing-skip": "skip",
|
|
21
|
+
"existing-merge": "merge",
|
|
22
|
+
"existing-overwrite": "overwrite",
|
|
23
|
+
};
|
|
24
|
+
for (const name of Object.keys(actions)) {
|
|
25
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(incoming, name), "incoming");
|
|
26
|
+
if (name.startsWith("existing"))
|
|
27
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(target, name), "local");
|
|
28
|
+
}
|
|
29
|
+
for (const directory of [incoming, target])
|
|
30
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(directory, "identical"), "same");
|
|
31
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(target, "app-only"), "custom");
|
|
32
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.join)(incoming, "nested"));
|
|
33
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(incoming, "nested", "new-save"), "incoming");
|
|
34
|
+
const prompted = [];
|
|
35
|
+
const merged = [];
|
|
36
|
+
await (0, upgradeCli_1.applyCliUpgradeFiles)(incoming, target, async (file, choices, defaultAction) => {
|
|
37
|
+
const name = file.split("/").at(-1);
|
|
38
|
+
prompted.push(file);
|
|
39
|
+
const isNew = name.startsWith("new");
|
|
40
|
+
strict_1.default.deepEqual(choices, isNew ? ["skip", "save"] : ["skip", "merge", "overwrite"]);
|
|
41
|
+
strict_1.default.equal(defaultAction, isNew ? "save" : "merge");
|
|
42
|
+
return actions[name];
|
|
43
|
+
}, (local, remote) => {
|
|
44
|
+
strict_1.default.equal((0, node_fs_1.readFileSync)(local, "utf8"), "local");
|
|
45
|
+
strict_1.default.equal((0, node_fs_1.readFileSync)(remote, "utf8"), "incoming");
|
|
46
|
+
merged.push(local);
|
|
47
|
+
(0, node_fs_1.writeFileSync)(local, "resolved");
|
|
48
|
+
});
|
|
49
|
+
strict_1.default.equal(prompted.length, 6);
|
|
50
|
+
strict_1.default.deepEqual(merged, [(0, node_path_1.join)(target, "existing-merge")]);
|
|
51
|
+
strict_1.default.equal((0, node_fs_1.readFileSync)((0, node_path_1.join)(target, "existing-merge"), "utf8"), "resolved");
|
|
52
|
+
strict_1.default.equal((0, node_fs_1.readFileSync)((0, node_path_1.join)(target, "existing-skip"), "utf8"), "local");
|
|
53
|
+
strict_1.default.equal((0, node_fs_1.readFileSync)((0, node_path_1.join)(target, "existing-overwrite"), "utf8"), "incoming");
|
|
54
|
+
strict_1.default.equal((0, node_fs_1.readFileSync)((0, node_path_1.join)(target, "new-save"), "utf8"), "incoming");
|
|
55
|
+
strict_1.default.equal((0, node_fs_1.readFileSync)((0, node_path_1.join)(target, "nested", "new-save"), "utf8"), "incoming");
|
|
56
|
+
strict_1.default.equal((0, node_fs_1.existsSync)((0, node_path_1.join)(target, "new-skip")), false);
|
|
57
|
+
strict_1.default.equal((0, node_fs_1.readFileSync)((0, node_path_1.join)(target, "app-only"), "utf8"), "custom");
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=upgradeCli.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgradeCli.spec.js","sourceRoot":"","sources":["../../../../src/cli/upgradeCli.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare const DEFAULT_DOCKER_NETWORK_NAME = "prostgles-bridge-net";
|
|
2
|
+
export declare const getDockerRuntime: (environment?: NodeJS.ProcessEnv) => {
|
|
3
|
+
instanceId: string | undefined;
|
|
4
|
+
networkName: string | undefined;
|
|
5
|
+
};
|
|
6
|
+
export declare const getServiceDockerResources: (serviceName: string, environment?: NodeJS.ProcessEnv) => {
|
|
7
|
+
containerName: string;
|
|
8
|
+
imageName: string;
|
|
9
|
+
networkName: string | undefined;
|
|
10
|
+
volumePrefix: string;
|
|
11
|
+
};
|
|
12
|
+
export declare const getServiceDockerConnectivity: ({ containerName, containerPort, hostPort, networkName, }: {
|
|
13
|
+
containerName: string;
|
|
14
|
+
containerPort: number;
|
|
15
|
+
hostPort: number;
|
|
16
|
+
networkName?: string;
|
|
17
|
+
}) => {
|
|
18
|
+
baseUrl: string;
|
|
19
|
+
runArgs: string[];
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=dockerRuntime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dockerRuntime.d.ts","sourceRoot":"","sources":["../../../src/dockerRuntime.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,2BAA2B,yBAAyB,CAAC;AASlE,eAAO,MAAM,gBAAgB,GAC3B,cAAa,MAAM,CAAC,UAAwB;;;CAY7C,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,aAAa,MAAM,EACnB,cAAa,MAAM,CAAC,UAAwB;;;;;CAe7C,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAI,0DAK1C;IACD,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;;;CAUA,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getServiceDockerConnectivity = exports.getServiceDockerResources = exports.getDockerRuntime = exports.DEFAULT_DOCKER_NETWORK_NAME = void 0;
|
|
4
|
+
const DEFAULT_INSTANCE_ID = "prostgles";
|
|
5
|
+
exports.DEFAULT_DOCKER_NETWORK_NAME = "prostgles-bridge-net";
|
|
6
|
+
const toDockerName = (value) => value
|
|
7
|
+
.replace(/([a-z])([A-Z])/g, "$1-$2")
|
|
8
|
+
.replace(/[^a-zA-Z0-9_.-]+/g, "-")
|
|
9
|
+
.replace(/^[^a-zA-Z0-9]+|[^a-zA-Z0-9]+$/g, "")
|
|
10
|
+
.toLowerCase();
|
|
11
|
+
const getDockerRuntime = (environment = process.env) => {
|
|
12
|
+
const networkName = environment.PROSTGLES_DOCKER_NETWORK?.trim() || undefined;
|
|
13
|
+
const configuredInstanceId = environment.PROSTGLES_INSTANCE_ID?.trim();
|
|
14
|
+
const instanceId = configuredInstanceId ? toDockerName(configuredInstanceId) : undefined;
|
|
15
|
+
if (configuredInstanceId && !instanceId) {
|
|
16
|
+
throw new Error("PROSTGLES_INSTANCE_ID must contain a letter or number.");
|
|
17
|
+
}
|
|
18
|
+
return { instanceId, networkName };
|
|
19
|
+
};
|
|
20
|
+
exports.getDockerRuntime = getDockerRuntime;
|
|
21
|
+
const getServiceDockerResources = (serviceName, environment = process.env) => {
|
|
22
|
+
const serviceId = toDockerName(serviceName);
|
|
23
|
+
if (!serviceId)
|
|
24
|
+
throw new Error("Service name must contain a letter or number.");
|
|
25
|
+
const { instanceId, networkName } = (0, exports.getDockerRuntime)(environment);
|
|
26
|
+
const containerName = `${instanceId ?? DEFAULT_INSTANCE_ID}-service-${serviceId}`;
|
|
27
|
+
return {
|
|
28
|
+
containerName,
|
|
29
|
+
imageName: instanceId ? containerName : serviceId,
|
|
30
|
+
networkName,
|
|
31
|
+
volumePrefix: containerName,
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
exports.getServiceDockerResources = getServiceDockerResources;
|
|
35
|
+
const getServiceDockerConnectivity = ({ containerName, containerPort, hostPort, networkName, }) => {
|
|
36
|
+
const baseHost = networkName ? `${containerName}:${containerPort}` : `127.0.0.1:${hostPort}`;
|
|
37
|
+
return {
|
|
38
|
+
baseUrl: `http://${baseHost}`,
|
|
39
|
+
runArgs: networkName ?
|
|
40
|
+
["--network", networkName]
|
|
41
|
+
: ["-p", `${baseHost}:${containerPort}`],
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
exports.getServiceDockerConnectivity = getServiceDockerConnectivity;
|
|
45
|
+
//# sourceMappingURL=dockerRuntime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dockerRuntime.js","sourceRoot":"","sources":["../../../src/dockerRuntime.ts"],"names":[],"mappings":";;;AAAA,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAE3B,QAAA,2BAA2B,GAAG,sBAAsB,CAAC;AAElE,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE,CACrC,KAAK;KACF,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;KACnC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC;KACjC,OAAO,CAAC,gCAAgC,EAAE,EAAE,CAAC;KAC7C,WAAW,EAAE,CAAC;AAEZ,MAAM,gBAAgB,GAAG,CAC9B,cAAiC,OAAO,CAAC,GAAG,EAC5C,EAAE;IACF,MAAM,WAAW,GAAG,WAAW,CAAC,wBAAwB,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IAC9E,MAAM,oBAAoB,GAAG,WAAW,CAAC,qBAAqB,EAAE,IAAI,EAAE,CAAC;IACvE,MAAM,UAAU,GACd,oBAAoB,CAAC,CAAC,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAExE,IAAI,oBAAoB,IAAI,CAAC,UAAU,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;AACrC,CAAC,CAAC;AAbW,QAAA,gBAAgB,oBAa3B;AAEK,MAAM,yBAAyB,GAAG,CACvC,WAAmB,EACnB,cAAiC,OAAO,CAAC,GAAG,EAC5C,EAAE;IACF,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IAC5C,IAAI,CAAC,SAAS;QACZ,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IAEnE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,IAAA,wBAAgB,EAAC,WAAW,CAAC,CAAC;IAClE,MAAM,aAAa,GAAG,GAAG,UAAU,IAAI,mBAAmB,YAAY,SAAS,EAAE,CAAC;IAElF,OAAO;QACL,aAAa;QACb,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;QACjD,WAAW;QACX,YAAY,EAAE,aAAa;KAC5B,CAAC;AACJ,CAAC,CAAC;AAjBW,QAAA,yBAAyB,6BAiBpC;AAEK,MAAM,4BAA4B,GAAG,CAAC,EAC3C,aAAa,EACb,aAAa,EACb,QAAQ,EACR,WAAW,GAMZ,EAAE,EAAE;IACH,MAAM,QAAQ,GACZ,WAAW,CAAC,CAAC,CAAC,GAAG,aAAa,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC,aAAa,QAAQ,EAAE,CAAC;IAC9E,OAAO;QACL,OAAO,EAAE,UAAU,QAAQ,EAAE;QAC7B,OAAO,EACL,WAAW,CAAC,CAAC;YACX,CAAC,WAAW,EAAE,WAAW,CAAC;YAC5B,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,QAAQ,IAAI,aAAa,EAAE,CAAC;KAC3C,CAAC;AACJ,CAAC,CAAC;AApBW,QAAA,4BAA4B,gCAoBvC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dockerRuntime.spec.d.ts","sourceRoot":"","sources":["../../../src/dockerRuntime.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const strict_1 = tslib_1.__importDefault(require("node:assert/strict"));
|
|
5
|
+
const node_test_1 = tslib_1.__importDefault(require("node:test"));
|
|
6
|
+
const dockerRuntime_1 = require("./dockerRuntime");
|
|
7
|
+
void (0, node_test_1.default)("preserves existing service Docker names without deployment variables", () => {
|
|
8
|
+
strict_1.default.deepEqual((0, dockerRuntime_1.getServiceDockerResources)("myService", {}), {
|
|
9
|
+
containerName: "prostgles-service-my-service",
|
|
10
|
+
imageName: "my-service",
|
|
11
|
+
networkName: undefined,
|
|
12
|
+
volumePrefix: "prostgles-service-my-service",
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
void (0, node_test_1.default)("uses container DNS without publishing managed service ports", () => {
|
|
16
|
+
strict_1.default.deepEqual((0, dockerRuntime_1.getServiceDockerConnectivity)({
|
|
17
|
+
containerName: "my-app-service-my-service",
|
|
18
|
+
containerPort: 8080,
|
|
19
|
+
hostPort: 8080,
|
|
20
|
+
networkName: "my-app-runtime",
|
|
21
|
+
}), {
|
|
22
|
+
baseUrl: "http://my-app-service-my-service:8080",
|
|
23
|
+
runArgs: ["--network", "my-app-runtime"],
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
void (0, node_test_1.default)("preserves loopback publishing outside a Docker runtime", () => {
|
|
27
|
+
strict_1.default.deepEqual((0, dockerRuntime_1.getServiceDockerConnectivity)({
|
|
28
|
+
containerName: "prostgles-service-my-service",
|
|
29
|
+
containerPort: 8080,
|
|
30
|
+
hostPort: 49123,
|
|
31
|
+
}), {
|
|
32
|
+
baseUrl: "http://127.0.0.1:49123",
|
|
33
|
+
runArgs: ["-p", "127.0.0.1:49123:8080"],
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
void (0, node_test_1.default)("namespaces service Docker resources in a configured runtime", () => {
|
|
37
|
+
strict_1.default.deepEqual((0, dockerRuntime_1.getServiceDockerResources)("myService", {
|
|
38
|
+
PROSTGLES_DOCKER_NETWORK: "my-app-runtime",
|
|
39
|
+
PROSTGLES_INSTANCE_ID: "My App",
|
|
40
|
+
}), {
|
|
41
|
+
containerName: "my-app-service-my-service",
|
|
42
|
+
imageName: "my-app-service-my-service",
|
|
43
|
+
networkName: "my-app-runtime",
|
|
44
|
+
volumePrefix: "my-app-service-my-service",
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
void (0, node_test_1.default)("rejects an unusable configured instance id", () => {
|
|
48
|
+
strict_1.default.throws(() => (0, dockerRuntime_1.getDockerRuntime)({ PROSTGLES_INSTANCE_ID: "---" }), /must contain a letter or number/);
|
|
49
|
+
strict_1.default.equal(dockerRuntime_1.DEFAULT_DOCKER_NETWORK_NAME, "prostgles-bridge-net");
|
|
50
|
+
});
|
|
51
|
+
//# sourceMappingURL=dockerRuntime.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dockerRuntime.spec.js","sourceRoot":"","sources":["../../../src/dockerRuntime.spec.ts"],"names":[],"mappings":";;;AAAA,wEAAwC;AACxC,kEAA6B;AAC7B,mDAKyB;AAEzB,KAAK,IAAA,mBAAI,EAAC,sEAAsE,EAAE,GAAG,EAAE;IACrF,gBAAM,CAAC,SAAS,CAAC,IAAA,yCAAyB,EAAC,WAAW,EAAE,EAAE,CAAC,EAAE;QAC3D,aAAa,EAAE,8BAA8B;QAC7C,SAAS,EAAE,YAAY;QACvB,WAAW,EAAE,SAAS;QACtB,YAAY,EAAE,8BAA8B;KAC7C,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,KAAK,IAAA,mBAAI,EAAC,6DAA6D,EAAE,GAAG,EAAE;IAC5E,gBAAM,CAAC,SAAS,CACd,IAAA,4CAA4B,EAAC;QAC3B,aAAa,EAAE,2BAA2B;QAC1C,aAAa,EAAE,IAAI;QACnB,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,gBAAgB;KAC9B,CAAC,EACF;QACE,OAAO,EAAE,uCAAuC;QAChD,OAAO,EAAE,CAAC,WAAW,EAAE,gBAAgB,CAAC;KACzC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,KAAK,IAAA,mBAAI,EAAC,wDAAwD,EAAE,GAAG,EAAE;IACvE,gBAAM,CAAC,SAAS,CACd,IAAA,4CAA4B,EAAC;QAC3B,aAAa,EAAE,8BAA8B;QAC7C,aAAa,EAAE,IAAI;QACnB,QAAQ,EAAE,KAAK;KAChB,CAAC,EACF;QACE,OAAO,EAAE,wBAAwB;QACjC,OAAO,EAAE,CAAC,IAAI,EAAE,sBAAsB,CAAC;KACxC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,KAAK,IAAA,mBAAI,EAAC,6DAA6D,EAAE,GAAG,EAAE;IAC5E,gBAAM,CAAC,SAAS,CACd,IAAA,yCAAyB,EAAC,WAAW,EAAE;QACrC,wBAAwB,EAAE,gBAAgB;QAC1C,qBAAqB,EAAE,QAAQ;KAChC,CAAC,EACF;QACE,aAAa,EAAE,2BAA2B;QAC1C,SAAS,EAAE,2BAA2B;QACtC,WAAW,EAAE,gBAAgB;QAC7B,YAAY,EAAE,2BAA2B;KAC1C,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,KAAK,IAAA,mBAAI,EAAC,4CAA4C,EAAE,GAAG,EAAE;IAC3D,gBAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,IAAA,gCAAgB,EAAC,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC,EACxD,iCAAiC,CAClC,CAAC;IACF,gBAAM,CAAC,KAAK,CAAC,2CAA2B,EAAE,sBAAsB,CAAC,CAAC;AACpE,CAAC,CAAC,CAAC"}
|
|
@@ -5,6 +5,7 @@ export { defineFunction, createFunctionGroupDefiner, createFunctionGroupDefinerW
|
|
|
5
5
|
import type { ProstglesInitOptions } from "prostgles-server/dist/ProstglesTypes";
|
|
6
6
|
import type { OnReadyParams } from "prostgles-server/dist/initProstgles";
|
|
7
7
|
import type { ServiceManager, ServiceManagerConfig } from "./ServiceManager/ServiceManager";
|
|
8
|
+
import type { ServerFunctionDefinitions } from "prostgles-server";
|
|
8
9
|
import { prostglesServices, type ServiceRegistry } from "./ServiceManager/ServiceManagerTypes";
|
|
9
10
|
export type { DBGeneratedSchema } from "../../common/DBGeneratedSchema";
|
|
10
11
|
export type * from "../../common/DashboardTypes";
|
|
@@ -26,7 +27,9 @@ export type SchemaConfigAccessControl = DBSSchema["access_control"]["dbPermissio
|
|
|
26
27
|
* instance. Transport, authentication, storage wiring, and connection
|
|
27
28
|
* lifecycle remain owned by the host application.
|
|
28
29
|
*/
|
|
29
|
-
export type SchemaConfigProstglesOptions<S = void, SUser extends SessionUser = SessionUser, Services extends ServiceRegistry = Record<never, never>> = Pick<ProstglesInitOptions<S, SUser, ProstglesContext<Services>>, "functions" | "joins" | "tableHooks" | "tableConfig" | "tableConfigMigrations" | "watchSchemaType"
|
|
30
|
+
export type SchemaConfigProstglesOptions<S = void, SUser extends SessionUser = SessionUser, Services extends ServiceRegistry = Record<never, never>> = Omit<Pick<ProstglesInitOptions<S, SUser, ProstglesContext<Services>>, "functions" | "joins" | "tableHooks" | "tableConfig" | "tableConfigMigrations" | "watchSchemaType">, "functions"> & {
|
|
31
|
+
functions?: ServerFunctionDefinitions<S, SUser, ProstglesContext<Services> | undefined>;
|
|
32
|
+
};
|
|
30
33
|
export type SchemaConfig<S = void, SUser extends SessionUser = SessionUser, Services extends ServiceRegistry = Record<never, never>> = SchemaConfigProstglesOptions<S, SUser, Services> & {
|
|
31
34
|
/** Stable deployment identifier. Required when starting through the CLI. */
|
|
32
35
|
id?: string;
|