@solidxai/solidctl 0.1.46-beta.7 → 0.1.46-beta.8
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/commands/create-app/create-app.command.js +37 -69
- package/dist/commands/create-app/create-app.command.js.map +1 -1
- package/dist/commands/create-app/helpers.d.ts +0 -2
- package/dist/commands/create-app/helpers.js +0 -4
- package/dist/commands/create-app/helpers.js.map +1 -1
- package/dist/commands/create-app/setup-questions.d.ts +6 -19
- package/dist/commands/create-app/setup-questions.js +5 -22
- package/dist/commands/create-app/setup-questions.js.map +1 -1
- package/dist/commands/seed.command.js +1 -22
- package/dist/commands/seed.command.js.map +1 -1
- package/dist/commands/start.command.js +19 -41
- package/dist/commands/start.command.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utils/dev-ports.d.ts +11 -0
- package/dist/utils/dev-ports.js +94 -0
- package/dist/utils/dev-ports.js.map +1 -0
- package/package.json +1 -3
- package/dist/db/embedded.d.ts +0 -28
- package/dist/db/embedded.js +0 -153
- package/dist/db/embedded.js.map +0 -1
- package/dist/db/pglite-server.d.ts +0 -1
- package/dist/db/pglite-server.js +0 -42
- package/dist/db/pglite-server.js.map +0 -1
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const MCP_DEV_PORT: string;
|
|
2
|
+
export type DevServiceName = 'api' | 'ui' | 'mcp';
|
|
3
|
+
export type DevPortMap = Partial<Record<DevServiceName, string>>;
|
|
4
|
+
export declare function isValidPortValue(value: string): boolean;
|
|
5
|
+
export declare function validatePortInput(value: string): true | string;
|
|
6
|
+
export declare function findDevPortConflicts(ports: DevPortMap): DevServiceName[][];
|
|
7
|
+
export declare function formatDevPortConflictMessage(conflicts: DevServiceName[][], ports: DevPortMap): string;
|
|
8
|
+
export declare function validateDevPortAssignments(ports: DevPortMap): string | null;
|
|
9
|
+
export declare function validateCreateAppPorts(apiPort: string, uiPort: string): string | null;
|
|
10
|
+
export declare function validateCreateAppApiPort(apiPort: string): true | string;
|
|
11
|
+
export declare function validateCreateAppUiPort(uiPort: string, apiPort: string): true | string;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MCP_DEV_PORT = void 0;
|
|
4
|
+
exports.isValidPortValue = isValidPortValue;
|
|
5
|
+
exports.validatePortInput = validatePortInput;
|
|
6
|
+
exports.findDevPortConflicts = findDevPortConflicts;
|
|
7
|
+
exports.formatDevPortConflictMessage = formatDevPortConflictMessage;
|
|
8
|
+
exports.validateDevPortAssignments = validateDevPortAssignments;
|
|
9
|
+
exports.validateCreateAppPorts = validateCreateAppPorts;
|
|
10
|
+
exports.validateCreateAppApiPort = validateCreateAppApiPort;
|
|
11
|
+
exports.validateCreateAppUiPort = validateCreateAppUiPort;
|
|
12
|
+
const mcp_launch_1 = require("../commands/mcp-launch");
|
|
13
|
+
exports.MCP_DEV_PORT = mcp_launch_1.MCP_DEFAULT_OPTIONS.port;
|
|
14
|
+
const SERVICE_LABELS = {
|
|
15
|
+
api: 'API',
|
|
16
|
+
ui: 'UI',
|
|
17
|
+
mcp: 'MCP',
|
|
18
|
+
};
|
|
19
|
+
function isValidPortValue(value) {
|
|
20
|
+
const port = Number(value);
|
|
21
|
+
return Number.isInteger(port) && port >= 1 && port <= 65535;
|
|
22
|
+
}
|
|
23
|
+
function validatePortInput(value) {
|
|
24
|
+
if (!isValidPortValue(value)) {
|
|
25
|
+
return 'Must be a port number between 1 and 65535.';
|
|
26
|
+
}
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
function findDevPortConflicts(ports) {
|
|
30
|
+
const byPort = new Map();
|
|
31
|
+
for (const service of ['api', 'ui', 'mcp']) {
|
|
32
|
+
const port = ports[service];
|
|
33
|
+
if (!port) {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
const services = byPort.get(port) ?? [];
|
|
37
|
+
services.push(service);
|
|
38
|
+
byPort.set(port, services);
|
|
39
|
+
}
|
|
40
|
+
return [...byPort.values()].filter((services) => services.length > 1);
|
|
41
|
+
}
|
|
42
|
+
function formatDevPortConflictMessage(conflicts, ports) {
|
|
43
|
+
const lines = ['Port conflict detected:'];
|
|
44
|
+
for (const services of conflicts) {
|
|
45
|
+
const port = ports[services[0]];
|
|
46
|
+
const labels = services.map((service) => SERVICE_LABELS[service]).join(' and ');
|
|
47
|
+
if (services.includes('mcp') && port === exports.MCP_DEV_PORT) {
|
|
48
|
+
lines.push(` Port ${port} is used by ${labels}. Port ${exports.MCP_DEV_PORT} is reserved for the SolidX MCP server (start:dev).`);
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
lines.push(` Port ${port} is assigned to ${labels}.`);
|
|
52
|
+
}
|
|
53
|
+
lines.push('');
|
|
54
|
+
lines.push('Each dev service needs its own port. Update solid-api/.env (PORT), solid-ui/package.json (dev --port), or choose different ports when running create-app.');
|
|
55
|
+
return lines.join('\n');
|
|
56
|
+
}
|
|
57
|
+
function validateDevPortAssignments(ports) {
|
|
58
|
+
const conflicts = findDevPortConflicts(ports);
|
|
59
|
+
if (!conflicts.length) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
return formatDevPortConflictMessage(conflicts, ports);
|
|
63
|
+
}
|
|
64
|
+
function validateCreateAppPorts(apiPort, uiPort) {
|
|
65
|
+
return validateDevPortAssignments({
|
|
66
|
+
api: apiPort,
|
|
67
|
+
ui: uiPort,
|
|
68
|
+
mcp: exports.MCP_DEV_PORT,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
function validateCreateAppApiPort(apiPort) {
|
|
72
|
+
const portCheck = validatePortInput(apiPort);
|
|
73
|
+
if (portCheck !== true) {
|
|
74
|
+
return portCheck;
|
|
75
|
+
}
|
|
76
|
+
if (apiPort === exports.MCP_DEV_PORT) {
|
|
77
|
+
return `Port ${exports.MCP_DEV_PORT} is reserved for the SolidX MCP server (started by start:dev).`;
|
|
78
|
+
}
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
function validateCreateAppUiPort(uiPort, apiPort) {
|
|
82
|
+
const portCheck = validatePortInput(uiPort);
|
|
83
|
+
if (portCheck !== true) {
|
|
84
|
+
return portCheck;
|
|
85
|
+
}
|
|
86
|
+
if (uiPort === exports.MCP_DEV_PORT) {
|
|
87
|
+
return `Port ${exports.MCP_DEV_PORT} is reserved for the SolidX MCP server (started by start:dev).`;
|
|
88
|
+
}
|
|
89
|
+
if (uiPort === apiPort) {
|
|
90
|
+
return `UI port must differ from the API port (${apiPort}).`;
|
|
91
|
+
}
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=dev-ports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-ports.js","sourceRoot":"","sources":["../../src/utils/dev-ports.ts"],"names":[],"mappings":";;;AAcA,4CAGC;AAED,8CAKC;AAED,oDAeC;AAED,oEA0BC;AAED,gEAOC;AAED,wDAMC;AAED,4DAWC;AAED,0DAkBC;AAvHD,uDAA6D;AAEhD,QAAA,YAAY,GAAG,gCAAmB,CAAC,IAAI,CAAC;AAMrD,MAAM,cAAc,GAAmC;IACrD,GAAG,EAAE,KAAK;IACV,EAAE,EAAE,IAAI;IACR,GAAG,EAAE,KAAK;CACX,CAAC;AAEF,SAAgB,gBAAgB,CAAC,KAAa;IAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,CAAC;AAC9D,CAAC;AAED,SAAgB,iBAAiB,CAAC,KAAa;IAC7C,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,4CAA4C,CAAC;IACtD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,oBAAoB,CAAC,KAAiB;IACpD,MAAM,MAAM,GAAG,IAAI,GAAG,EAA4B,CAAC;IAEnD,KAAK,MAAM,OAAO,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAU,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACxC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAgB,4BAA4B,CAC1C,SAA6B,EAC7B,KAAiB;IAEjB,MAAM,KAAK,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAE1C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEhF,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,oBAAY,EAAE,CAAC;YACtD,KAAK,CAAC,IAAI,CACR,UAAU,IAAI,eAAe,MAAM,UAAU,oBAAY,qDAAqD,CAC/G,CAAC;YACF,SAAS;QACX,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,mBAAmB,MAAM,GAAG,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CACR,2JAA2J,CAC5J,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,0BAA0B,CAAC,KAAiB;IAC1D,MAAM,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,4BAA4B,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,SAAgB,sBAAsB,CAAC,OAAe,EAAE,MAAc;IACpE,OAAO,0BAA0B,CAAC;QAChC,GAAG,EAAE,OAAO;QACZ,EAAE,EAAE,MAAM;QACV,GAAG,EAAE,oBAAY;KAClB,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,wBAAwB,CAAC,OAAe;IACtD,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,OAAO,KAAK,oBAAY,EAAE,CAAC;QAC7B,OAAO,QAAQ,oBAAY,gEAAgE,CAAC;IAC9F,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,uBAAuB,CACrC,MAAc,EACd,OAAe;IAEf,MAAM,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,MAAM,KAAK,oBAAY,EAAE,CAAC;QAC5B,OAAO,QAAQ,oBAAY,gEAAgE,CAAC;IAC9F,CAAC;IAED,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO,0CAA0C,OAAO,IAAI,CAAC;IAC/D,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solidxai/solidctl",
|
|
3
|
-
"version": "0.1.46-beta.
|
|
3
|
+
"version": "0.1.46-beta.8",
|
|
4
4
|
"description": "",
|
|
5
5
|
"author": "",
|
|
6
6
|
"private": false,
|
|
@@ -41,8 +41,6 @@
|
|
|
41
41
|
"release:alpha:major": "npx ts-node src/main.ts release major --preid=alpha"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@electric-sql/pglite": "^0.5.3",
|
|
45
|
-
"@electric-sql/pglite-socket": "^0.2.4",
|
|
46
44
|
"@nestjs/common": "^11.0.1",
|
|
47
45
|
"@nestjs/core": "^11.0.1",
|
|
48
46
|
"@nestjs/platform-express": "^11.0.1",
|
package/dist/db/embedded.d.ts
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { ChildProcess } from 'child_process';
|
|
2
|
-
import { SetupAnswers } from '../commands/create-app/setup-questions';
|
|
3
|
-
export declare const EMBEDDED_DRIVER = "pglite";
|
|
4
|
-
export declare const EMBEDDED_DEFAULT_PORT = "54329";
|
|
5
|
-
export declare const EMBEDDED_DEFAULT_HOST = "127.0.0.1";
|
|
6
|
-
export declare const EMBEDDED_DB_NAME = "solidx_app_db";
|
|
7
|
-
export declare const EMBEDDED_DB_USER = "solidx";
|
|
8
|
-
export declare const EMBEDDED_DB_PASSWORD = "solidx";
|
|
9
|
-
export declare function applyEmbeddedDatabaseDefaults(answers: SetupAnswers): SetupAnswers;
|
|
10
|
-
export interface EmbeddedConfig {
|
|
11
|
-
host: string;
|
|
12
|
-
port: string;
|
|
13
|
-
dataDir: string;
|
|
14
|
-
}
|
|
15
|
-
export declare function getEmbeddedDataDir(projectRoot: string): string;
|
|
16
|
-
export declare function isEmbeddedProject(projectRoot: string): boolean;
|
|
17
|
-
export declare function getEmbeddedConfig(projectRoot: string): EmbeddedConfig;
|
|
18
|
-
export interface EmbeddedServerHandle {
|
|
19
|
-
child: ChildProcess;
|
|
20
|
-
ready: Promise<void>;
|
|
21
|
-
}
|
|
22
|
-
export declare function startEmbeddedServer(config: EmbeddedConfig, options?: {
|
|
23
|
-
maxConnections?: number;
|
|
24
|
-
onLog?: (line: string) => void;
|
|
25
|
-
readyTimeoutMs?: number;
|
|
26
|
-
}): EmbeddedServerHandle;
|
|
27
|
-
export declare function isEmbeddedServerRunning(config: EmbeddedConfig): Promise<boolean>;
|
|
28
|
-
export declare function stopEmbeddedServer(child: ChildProcess): Promise<void>;
|
package/dist/db/embedded.js
DELETED
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.EMBEDDED_DB_PASSWORD = exports.EMBEDDED_DB_USER = exports.EMBEDDED_DB_NAME = exports.EMBEDDED_DEFAULT_HOST = exports.EMBEDDED_DEFAULT_PORT = exports.EMBEDDED_DRIVER = void 0;
|
|
7
|
-
exports.applyEmbeddedDatabaseDefaults = applyEmbeddedDatabaseDefaults;
|
|
8
|
-
exports.getEmbeddedDataDir = getEmbeddedDataDir;
|
|
9
|
-
exports.isEmbeddedProject = isEmbeddedProject;
|
|
10
|
-
exports.getEmbeddedConfig = getEmbeddedConfig;
|
|
11
|
-
exports.startEmbeddedServer = startEmbeddedServer;
|
|
12
|
-
exports.isEmbeddedServerRunning = isEmbeddedServerRunning;
|
|
13
|
-
exports.stopEmbeddedServer = stopEmbeddedServer;
|
|
14
|
-
const child_process_1 = require("child_process");
|
|
15
|
-
const net_1 = __importDefault(require("net"));
|
|
16
|
-
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
17
|
-
const path_1 = __importDefault(require("path"));
|
|
18
|
-
const pglite_server_1 = require("./pglite-server");
|
|
19
|
-
exports.EMBEDDED_DRIVER = 'pglite';
|
|
20
|
-
exports.EMBEDDED_DEFAULT_PORT = '54329';
|
|
21
|
-
exports.EMBEDDED_DEFAULT_HOST = '127.0.0.1';
|
|
22
|
-
exports.EMBEDDED_DB_NAME = 'solidx_app_db';
|
|
23
|
-
exports.EMBEDDED_DB_USER = 'solidx';
|
|
24
|
-
exports.EMBEDDED_DB_PASSWORD = 'solidx';
|
|
25
|
-
const STATE_DIR = path_1.default.join('.solidx', 'db');
|
|
26
|
-
function applyEmbeddedDatabaseDefaults(answers) {
|
|
27
|
-
answers.databaseMode = 'embedded';
|
|
28
|
-
answers.solidApiDatabaseClient = 'PostgreSQL';
|
|
29
|
-
answers.solidApiDatabaseHost = exports.EMBEDDED_DEFAULT_HOST;
|
|
30
|
-
answers.solidApiDatabasePort = exports.EMBEDDED_DEFAULT_PORT;
|
|
31
|
-
answers.solidApiDatabaseName = exports.EMBEDDED_DB_NAME;
|
|
32
|
-
answers.solidApiDatabaseUsername = exports.EMBEDDED_DB_USER;
|
|
33
|
-
answers.solidApiDatabasePassword = exports.EMBEDDED_DB_PASSWORD;
|
|
34
|
-
answers.solidApiDatabaseSynchronize = 'Yes';
|
|
35
|
-
answers.databaseExists = 'Yes';
|
|
36
|
-
return answers;
|
|
37
|
-
}
|
|
38
|
-
function getEmbeddedDataDir(projectRoot) {
|
|
39
|
-
return path_1.default.join(projectRoot, STATE_DIR, 'pgdata');
|
|
40
|
-
}
|
|
41
|
-
function isEmbeddedProject(projectRoot) {
|
|
42
|
-
const envPath = path_1.default.join(projectRoot, 'solid-api', '.env');
|
|
43
|
-
try {
|
|
44
|
-
if (!fs_extra_1.default.existsSync(envPath))
|
|
45
|
-
return false;
|
|
46
|
-
const content = fs_extra_1.default.readFileSync(envPath, 'utf8');
|
|
47
|
-
const match = content.match(/^\s*DEFAULT_DATABASE_DRIVER\s*=\s*(.+?)\s*$/m);
|
|
48
|
-
const value = match?.[1]?.replace(/^['"]|['"]$/g, '');
|
|
49
|
-
return value === exports.EMBEDDED_DRIVER;
|
|
50
|
-
}
|
|
51
|
-
catch {
|
|
52
|
-
return false;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
function readEnvValue(envPath, key) {
|
|
56
|
-
try {
|
|
57
|
-
if (!fs_extra_1.default.existsSync(envPath))
|
|
58
|
-
return null;
|
|
59
|
-
const content = fs_extra_1.default.readFileSync(envPath, 'utf8');
|
|
60
|
-
const escaped = key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
61
|
-
const match = content.match(new RegExp(`^\\s*${escaped}\\s*=\\s*(.+?)\\s*$`, 'm'));
|
|
62
|
-
return match?.[1]?.replace(/^['"]|['"]$/g, '') ?? null;
|
|
63
|
-
}
|
|
64
|
-
catch {
|
|
65
|
-
return null;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
function getEmbeddedConfig(projectRoot) {
|
|
69
|
-
const envPath = path_1.default.join(projectRoot, 'solid-api', '.env');
|
|
70
|
-
return {
|
|
71
|
-
host: readEnvValue(envPath, 'DEFAULT_DATABASE_HOST') ?? exports.EMBEDDED_DEFAULT_HOST,
|
|
72
|
-
port: readEnvValue(envPath, 'DEFAULT_DATABASE_PORT') ?? exports.EMBEDDED_DEFAULT_PORT,
|
|
73
|
-
dataDir: getEmbeddedDataDir(projectRoot),
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
function startEmbeddedServer(config, options = {}) {
|
|
77
|
-
fs_extra_1.default.ensureDirSync(config.dataDir);
|
|
78
|
-
const serverScript = path_1.default.join(__dirname, 'pglite-server.js');
|
|
79
|
-
const child = (0, child_process_1.spawn)(process.execPath, [serverScript], {
|
|
80
|
-
cwd: path_1.default.dirname(__dirname),
|
|
81
|
-
env: {
|
|
82
|
-
...process.env,
|
|
83
|
-
SOLIDX_PGLITE_HOST: config.host,
|
|
84
|
-
SOLIDX_PGLITE_PORT: config.port,
|
|
85
|
-
SOLIDX_PGLITE_DATA: config.dataDir,
|
|
86
|
-
SOLIDX_PGLITE_MAX_CONNECTIONS: String(options.maxConnections ?? 1),
|
|
87
|
-
},
|
|
88
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
89
|
-
});
|
|
90
|
-
const ready = new Promise((resolve, reject) => {
|
|
91
|
-
const timeoutMs = options.readyTimeoutMs ?? 30000;
|
|
92
|
-
let settled = false;
|
|
93
|
-
const finish = (fn) => {
|
|
94
|
-
if (settled)
|
|
95
|
-
return;
|
|
96
|
-
settled = true;
|
|
97
|
-
clearTimeout(timer);
|
|
98
|
-
fn();
|
|
99
|
-
};
|
|
100
|
-
const timer = setTimeout(() => {
|
|
101
|
-
finish(() => reject(new Error('Embedded database did not become ready in time')));
|
|
102
|
-
}, timeoutMs);
|
|
103
|
-
const onData = (chunk) => {
|
|
104
|
-
const text = chunk.toString();
|
|
105
|
-
for (const line of text.split(/\r?\n/)) {
|
|
106
|
-
if (!line.trim())
|
|
107
|
-
continue;
|
|
108
|
-
options.onLog?.(line);
|
|
109
|
-
if (line.includes(pglite_server_1.PGLITE_READY_SENTINEL)) {
|
|
110
|
-
finish(resolve);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
};
|
|
114
|
-
child.stdout?.on('data', onData);
|
|
115
|
-
child.stderr?.on('data', onData);
|
|
116
|
-
child.on('error', (err) => finish(() => reject(err)));
|
|
117
|
-
child.on('exit', (code) => {
|
|
118
|
-
finish(() => reject(new Error(`Embedded database exited early with code ${code ?? 'unknown'}`)));
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
return { child, ready };
|
|
122
|
-
}
|
|
123
|
-
function isEmbeddedServerRunning(config) {
|
|
124
|
-
return new Promise((resolve) => {
|
|
125
|
-
const socket = net_1.default.connect({
|
|
126
|
-
host: config.host,
|
|
127
|
-
port: Number(config.port),
|
|
128
|
-
});
|
|
129
|
-
const done = (running) => {
|
|
130
|
-
socket.destroy();
|
|
131
|
-
resolve(running);
|
|
132
|
-
};
|
|
133
|
-
socket.setTimeout(1000);
|
|
134
|
-
socket.once('connect', () => done(true));
|
|
135
|
-
socket.once('timeout', () => done(false));
|
|
136
|
-
socket.once('error', () => done(false));
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
async function stopEmbeddedServer(child) {
|
|
140
|
-
if (child.exitCode !== null || child.signalCode !== null)
|
|
141
|
-
return;
|
|
142
|
-
await new Promise((resolve) => {
|
|
143
|
-
child.once('exit', () => resolve());
|
|
144
|
-
child.kill('SIGTERM');
|
|
145
|
-
setTimeout(() => {
|
|
146
|
-
if (child.exitCode === null && child.signalCode === null) {
|
|
147
|
-
child.kill('SIGKILL');
|
|
148
|
-
}
|
|
149
|
-
resolve();
|
|
150
|
-
}, 5000);
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
//# sourceMappingURL=embedded.js.map
|
package/dist/db/embedded.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"embedded.js","sourceRoot":"","sources":["../../src/db/embedded.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const PGLITE_READY_SENTINEL = "SOLIDX_PGLITE_READY";
|
package/dist/db/pglite-server.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PGLITE_READY_SENTINEL = void 0;
|
|
4
|
-
exports.PGLITE_READY_SENTINEL = 'SOLIDX_PGLITE_READY';
|
|
5
|
-
async function main() {
|
|
6
|
-
const host = process.env.SOLIDX_PGLITE_HOST || '127.0.0.1';
|
|
7
|
-
const port = Number(process.env.SOLIDX_PGLITE_PORT || '54329');
|
|
8
|
-
const dataDir = process.env.SOLIDX_PGLITE_DATA;
|
|
9
|
-
const maxConnections = Number(process.env.SOLIDX_PGLITE_MAX_CONNECTIONS || '1');
|
|
10
|
-
if (!dataDir) {
|
|
11
|
-
console.error('SOLIDX_PGLITE_DATA is required');
|
|
12
|
-
process.exit(1);
|
|
13
|
-
}
|
|
14
|
-
const { PGlite } = await import('@electric-sql/pglite');
|
|
15
|
-
const { PGLiteSocketServer } = await import('@electric-sql/pglite-socket');
|
|
16
|
-
const db = await PGlite.create({ dataDir });
|
|
17
|
-
const server = new PGLiteSocketServer({ db, host, port, maxConnections });
|
|
18
|
-
await server.start();
|
|
19
|
-
console.log(`${exports.PGLITE_READY_SENTINEL} ${host}:${port}`);
|
|
20
|
-
let shuttingDown = false;
|
|
21
|
-
const shutdown = async (code = 0) => {
|
|
22
|
-
if (shuttingDown)
|
|
23
|
-
return;
|
|
24
|
-
shuttingDown = true;
|
|
25
|
-
try {
|
|
26
|
-
await server.stop();
|
|
27
|
-
await db.close();
|
|
28
|
-
}
|
|
29
|
-
catch {
|
|
30
|
-
}
|
|
31
|
-
process.exit(code);
|
|
32
|
-
};
|
|
33
|
-
process.on('SIGINT', () => void shutdown(0));
|
|
34
|
-
process.on('SIGTERM', () => void shutdown(0));
|
|
35
|
-
}
|
|
36
|
-
if (require.main === module) {
|
|
37
|
-
main().catch((err) => {
|
|
38
|
-
console.error('Failed to start embedded PGlite server:', err);
|
|
39
|
-
process.exit(1);
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
//# sourceMappingURL=pglite-server.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pglite-server.js","sourceRoot":"","sources":["../../src/db/pglite-server.ts"],"names":[],"mappings":";;;AAWa,QAAA,qBAAqB,GAAG,qBAAqB,CAAC;AAE3D,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,WAAW,CAAC;IAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC/C,MAAM,cAAc,GAAG,MAAM,CAC3B,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,GAAG,CACjD,CAAC;IAEF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACxD,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;IAE3E,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;IAC1E,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IAGrB,OAAO,CAAC,GAAG,CAAC,GAAG,6BAAqB,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;IAExD,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,MAAM,QAAQ,GAAG,KAAK,EAAE,IAAI,GAAG,CAAC,EAAE,EAAE;QAClC,IAAI,YAAY;YAAE,OAAO;QACzB,YAAY,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAID,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACnB,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,GAAG,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|