@saplo/cli 0.1.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 +112 -0
- package/bin/dev.js +5 -0
- package/bin/run.js +5 -0
- package/dist/commands/deploy.d.ts +13 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +206 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/domain/add.d.ts +13 -0
- package/dist/commands/domain/add.d.ts.map +1 -0
- package/dist/commands/domain/add.js +44 -0
- package/dist/commands/domain/add.js.map +1 -0
- package/dist/commands/domain/ls.d.ts +10 -0
- package/dist/commands/domain/ls.d.ts.map +1 -0
- package/dist/commands/domain/ls.js +32 -0
- package/dist/commands/domain/ls.js.map +1 -0
- package/dist/commands/domain/rm.d.ts +13 -0
- package/dist/commands/domain/rm.d.ts.map +1 -0
- package/dist/commands/domain/rm.js +29 -0
- package/dist/commands/domain/rm.js.map +1 -0
- package/dist/commands/env/index.d.ts +10 -0
- package/dist/commands/env/index.d.ts.map +1 -0
- package/dist/commands/env/index.js +34 -0
- package/dist/commands/env/index.js.map +1 -0
- package/dist/commands/env/pull.d.ts +12 -0
- package/dist/commands/env/pull.d.ts.map +1 -0
- package/dist/commands/env/pull.js +62 -0
- package/dist/commands/env/pull.js.map +1 -0
- package/dist/commands/env/rm.d.ts +14 -0
- package/dist/commands/env/rm.d.ts.map +1 -0
- package/dist/commands/env/rm.js +36 -0
- package/dist/commands/env/rm.js.map +1 -0
- package/dist/commands/env/set.d.ts +14 -0
- package/dist/commands/env/set.d.ts.map +1 -0
- package/dist/commands/env/set.js +47 -0
- package/dist/commands/env/set.js.map +1 -0
- package/dist/commands/init.d.ts +13 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +144 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/link.d.ts +10 -0
- package/dist/commands/link.d.ts.map +1 -0
- package/dist/commands/link.js +86 -0
- package/dist/commands/link.js.map +1 -0
- package/dist/commands/login.d.ts +12 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +83 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logs.d.ts +13 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +63 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/open.d.ts +10 -0
- package/dist/commands/open.d.ts.map +1 -0
- package/dist/commands/open.js +42 -0
- package/dist/commands/open.js.map +1 -0
- package/dist/commands/rollback.d.ts +16 -0
- package/dist/commands/rollback.d.ts.map +1 -0
- package/dist/commands/rollback.js +51 -0
- package/dist/commands/rollback.js.map +1 -0
- package/dist/commands/status.d.ts +10 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +63 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/whoami.d.ts +7 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +26 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +68 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +117 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/config.d.ts +16 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +74 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/detect.d.ts +9 -0
- package/dist/lib/detect.d.ts.map +1 -0
- package/dist/lib/detect.js +293 -0
- package/dist/lib/detect.js.map +1 -0
- package/dist/lib/packager.d.ts +18 -0
- package/dist/lib/packager.d.ts.map +1 -0
- package/dist/lib/packager.js +139 -0
- package/dist/lib/packager.js.map +1 -0
- package/dist/lib/saplo-config.d.ts +50 -0
- package/dist/lib/saplo-config.d.ts.map +1 -0
- package/dist/lib/saplo-config.js +203 -0
- package/dist/lib/saplo-config.js.map +1 -0
- package/dist/lib/ws-logs.d.ts +6 -0
- package/dist/lib/ws-logs.d.ts.map +1 -0
- package/dist/lib/ws-logs.js +112 -0
- package/dist/lib/ws-logs.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { parse } from 'yaml';
|
|
4
|
+
const VALID_STACKS = ['nextjs', 'react', 'vue', 'nuxt', 'sveltekit', 'django', 'static', 'docker', 'node', 'astro', 'angular'];
|
|
5
|
+
export class ConfigValidationError extends Error {
|
|
6
|
+
field;
|
|
7
|
+
constructor(message, field) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.field = field;
|
|
10
|
+
this.name = 'ConfigValidationError';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export function parseSaploConfig(content) {
|
|
14
|
+
let raw;
|
|
15
|
+
try {
|
|
16
|
+
raw = parse(content);
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
throw new ConfigValidationError(`Failed to parse saplo.yaml: ${err.message}`);
|
|
20
|
+
}
|
|
21
|
+
if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) {
|
|
22
|
+
throw new ConfigValidationError('saplo.yaml must be a YAML object at the top level');
|
|
23
|
+
}
|
|
24
|
+
const obj = raw;
|
|
25
|
+
// Required fields
|
|
26
|
+
if (!('version' in obj)) {
|
|
27
|
+
throw new ConfigValidationError('Missing required field: version', 'version');
|
|
28
|
+
}
|
|
29
|
+
if (obj.version !== 1) {
|
|
30
|
+
throw new ConfigValidationError(`Unsupported version: ${obj.version}. Only version: 1 is supported.`, 'version');
|
|
31
|
+
}
|
|
32
|
+
if (!('name' in obj) || typeof obj.name !== 'string' || !obj.name.trim()) {
|
|
33
|
+
throw new ConfigValidationError('Missing or invalid field: name (must be a non-empty string)', 'name');
|
|
34
|
+
}
|
|
35
|
+
if (!('stack' in obj) || typeof obj.stack !== 'string') {
|
|
36
|
+
throw new ConfigValidationError('Missing required field: stack', 'stack');
|
|
37
|
+
}
|
|
38
|
+
const stack = obj.stack;
|
|
39
|
+
if (!VALID_STACKS.includes(stack)) {
|
|
40
|
+
throw new ConfigValidationError(`Invalid stack: "${stack}". Valid values: ${VALID_STACKS.join(', ')}`, 'stack');
|
|
41
|
+
}
|
|
42
|
+
// Optional: validate name slug
|
|
43
|
+
if (!/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/.test(obj.name)) {
|
|
44
|
+
throw new ConfigValidationError('Field "name" must be a lowercase slug (letters, numbers, hyphens only, cannot start/end with hyphen)', 'name');
|
|
45
|
+
}
|
|
46
|
+
// Validate app_id if present
|
|
47
|
+
if ('app_id' in obj && obj.app_id !== undefined && typeof obj.app_id !== 'number') {
|
|
48
|
+
throw new ConfigValidationError('Field "app_id" must be a number', 'app_id');
|
|
49
|
+
}
|
|
50
|
+
// Validate domains if present
|
|
51
|
+
if ('domains' in obj && obj.domains !== undefined) {
|
|
52
|
+
if (!Array.isArray(obj.domains)) {
|
|
53
|
+
throw new ConfigValidationError('Field "domains" must be an array', 'domains');
|
|
54
|
+
}
|
|
55
|
+
for (const d of obj.domains) {
|
|
56
|
+
if (typeof d !== 'string') {
|
|
57
|
+
throw new ConfigValidationError('Each domain must be a string', 'domains');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Validate start.port if present
|
|
62
|
+
if (typeof obj.start === 'object' && obj.start !== null) {
|
|
63
|
+
const start = obj.start;
|
|
64
|
+
if ('port' in start && typeof start.port !== 'number') {
|
|
65
|
+
throw new ConfigValidationError('Field "start.port" must be a number', 'start.port');
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Validate resources if present
|
|
69
|
+
if (typeof obj.resources === 'object' && obj.resources !== null) {
|
|
70
|
+
const res = obj.resources;
|
|
71
|
+
if ('ram_mb' in res && typeof res.ram_mb !== 'number') {
|
|
72
|
+
throw new ConfigValidationError('Field "resources.ram_mb" must be a number', 'resources.ram_mb');
|
|
73
|
+
}
|
|
74
|
+
if ('ssd_gb' in res && typeof res.ssd_gb !== 'number') {
|
|
75
|
+
throw new ConfigValidationError('Field "resources.ssd_gb" must be a number', 'resources.ssd_gb');
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return raw;
|
|
79
|
+
}
|
|
80
|
+
export function loadSaploConfig(cwd = process.cwd()) {
|
|
81
|
+
const path = join(cwd, 'saplo.yaml');
|
|
82
|
+
if (!existsSync(path)) {
|
|
83
|
+
throw new ConfigValidationError('No saplo.yaml found in current directory. Run: saplo init');
|
|
84
|
+
}
|
|
85
|
+
const content = readFileSync(path, 'utf-8');
|
|
86
|
+
return parseSaploConfig(content);
|
|
87
|
+
}
|
|
88
|
+
export function generateSaploYaml(config) {
|
|
89
|
+
const lines = [
|
|
90
|
+
'version: 1',
|
|
91
|
+
`name: ${config.name}`,
|
|
92
|
+
`stack: ${config.stack}`,
|
|
93
|
+
...(config.app_id ? [`app_id: ${config.app_id}`] : []),
|
|
94
|
+
'',
|
|
95
|
+
];
|
|
96
|
+
if (config.runtime && Object.keys(config.runtime).length > 0) {
|
|
97
|
+
lines.push('runtime:');
|
|
98
|
+
if (config.runtime.node)
|
|
99
|
+
lines.push(` node: "${config.runtime.node}"`);
|
|
100
|
+
if (config.runtime.python)
|
|
101
|
+
lines.push(` python: "${config.runtime.python}"`);
|
|
102
|
+
if (config.runtime.php)
|
|
103
|
+
lines.push(` php: "${config.runtime.php}"`);
|
|
104
|
+
lines.push('');
|
|
105
|
+
}
|
|
106
|
+
if (config.build && Object.keys(config.build).length > 0) {
|
|
107
|
+
lines.push('build:');
|
|
108
|
+
if (config.build.install)
|
|
109
|
+
lines.push(` install: "${config.build.install}"`);
|
|
110
|
+
if (config.build.command)
|
|
111
|
+
lines.push(` command: "${config.build.command}"`);
|
|
112
|
+
if (config.build.output)
|
|
113
|
+
lines.push(` output: "${config.build.output}"`);
|
|
114
|
+
lines.push('');
|
|
115
|
+
}
|
|
116
|
+
if (config.start && Object.keys(config.start).length > 0) {
|
|
117
|
+
lines.push('start:');
|
|
118
|
+
if (config.start.command)
|
|
119
|
+
lines.push(` command: "${config.start.command}"`);
|
|
120
|
+
if (config.start.port)
|
|
121
|
+
lines.push(` port: ${config.start.port}`);
|
|
122
|
+
if (config.start.healthcheck)
|
|
123
|
+
lines.push(` healthcheck: "${config.start.healthcheck}"`);
|
|
124
|
+
lines.push('');
|
|
125
|
+
}
|
|
126
|
+
// env - generuj wykryte zmienne, lub {} gdy brak (pusta sekcja "env:"
|
|
127
|
+
// parsuje sie jako null i lamie walidacje schema).
|
|
128
|
+
const envEntries = config.env ? Object.entries(config.env) : [];
|
|
129
|
+
if (envEntries.length > 0) {
|
|
130
|
+
lines.push('env:');
|
|
131
|
+
for (const [k, v] of envEntries) {
|
|
132
|
+
lines.push(` ${k}: "${v}"`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
lines.push('env: {}');
|
|
137
|
+
}
|
|
138
|
+
lines.push('');
|
|
139
|
+
lines.push('# domains: [example.com, www.example.com]');
|
|
140
|
+
lines.push('');
|
|
141
|
+
lines.push('branches:');
|
|
142
|
+
lines.push(' production: main');
|
|
143
|
+
lines.push('');
|
|
144
|
+
return lines.join('\n');
|
|
145
|
+
}
|
|
146
|
+
const STACK_DEFAULTS = {
|
|
147
|
+
nextjs: {
|
|
148
|
+
runtime: { node: '22' },
|
|
149
|
+
build: { install: 'npm ci', command: 'npm run build', output: '.next' },
|
|
150
|
+
start: { command: 'npm run start', port: 3000, healthcheck: '/' },
|
|
151
|
+
},
|
|
152
|
+
react: {
|
|
153
|
+
runtime: { node: '22' },
|
|
154
|
+
build: { install: 'npm ci', command: 'npm run build', output: 'dist' },
|
|
155
|
+
start: { port: 80 },
|
|
156
|
+
},
|
|
157
|
+
vue: {
|
|
158
|
+
runtime: { node: '22' },
|
|
159
|
+
build: { install: 'npm ci', command: 'npm run build', output: 'dist' },
|
|
160
|
+
start: { port: 80 },
|
|
161
|
+
},
|
|
162
|
+
nuxt: {
|
|
163
|
+
runtime: { node: '22' },
|
|
164
|
+
build: { install: 'npm ci', command: 'npm run build', output: '.output' },
|
|
165
|
+
start: { command: 'node .output/server/index.mjs', port: 3000, healthcheck: '/' },
|
|
166
|
+
},
|
|
167
|
+
sveltekit: {
|
|
168
|
+
runtime: { node: '22' },
|
|
169
|
+
build: { install: 'npm ci', command: 'npm run build', output: 'build' },
|
|
170
|
+
start: { command: 'node build/index.js', port: 3000, healthcheck: '/' },
|
|
171
|
+
},
|
|
172
|
+
django: {
|
|
173
|
+
runtime: { python: '3.13' },
|
|
174
|
+
build: { install: 'pip install -r requirements.txt', command: 'python manage.py collectstatic --noinput' },
|
|
175
|
+
start: { command: 'gunicorn myproject.wsgi:application', port: 8000, healthcheck: '/' },
|
|
176
|
+
},
|
|
177
|
+
static: {
|
|
178
|
+
build: { output: 'dist' },
|
|
179
|
+
start: { port: 80 },
|
|
180
|
+
},
|
|
181
|
+
docker: {
|
|
182
|
+
start: { port: 8080, healthcheck: '/' },
|
|
183
|
+
},
|
|
184
|
+
node: {
|
|
185
|
+
runtime: { node: '22' },
|
|
186
|
+
build: { install: 'npm ci' },
|
|
187
|
+
start: { command: 'node index.js', port: 3000, healthcheck: '/' },
|
|
188
|
+
},
|
|
189
|
+
astro: {
|
|
190
|
+
runtime: { node: '22' },
|
|
191
|
+
build: { install: 'npm ci', command: 'npm run build', output: 'dist' },
|
|
192
|
+
start: { port: 80 },
|
|
193
|
+
},
|
|
194
|
+
angular: {
|
|
195
|
+
runtime: { node: '22' },
|
|
196
|
+
build: { install: 'npm ci', command: 'npm run build' },
|
|
197
|
+
start: { port: 80 },
|
|
198
|
+
},
|
|
199
|
+
};
|
|
200
|
+
export function getStackDefaults(stack) {
|
|
201
|
+
return STACK_DEFAULTS[stack] ?? {};
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=saplo-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"saplo-config.js","sourceRoot":"","sources":["../../src/lib/saplo-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type LogHandler = (line: string, stream: 'stdout' | 'stderr') => void;
|
|
2
|
+
export declare function streamLogsWs(wsUrl: string, onLog: LogHandler, onComplete: (status: string) => void, onError: (err: Error) => void): () => void;
|
|
3
|
+
export declare function pollLogsHttp(deploymentId: number, onLog: LogHandler, intervalMs?: number): Promise<string>;
|
|
4
|
+
export declare function defaultLogHandler(line: string, stream: 'stdout' | 'stderr'): void;
|
|
5
|
+
export declare function streamDeploymentLogs(deploymentId: number, wsUrl: string | null, onLog?: LogHandler): Promise<string>;
|
|
6
|
+
//# sourceMappingURL=ws-logs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-logs.d.ts","sourceRoot":"","sources":["../../src/lib/ws-logs.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,KAAK,IAAI,CAAA;AAU5E,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,EACpC,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,GAC5B,MAAM,IAAI,CA4DZ;AAED,wBAAsB,YAAY,CAChC,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,UAAU,EACjB,UAAU,SAAO,GAChB,OAAO,CAAC,MAAM,CAAC,CA4BjB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAMjF;AAED,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,KAAK,GAAE,UAA8B,GACpC,OAAO,CAAC,MAAM,CAAC,CAmBjB"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import WebSocket from 'ws';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { api } from './api.js';
|
|
4
|
+
import { requireToken } from './config.js';
|
|
5
|
+
export function streamLogsWs(wsUrl, onLog, onComplete, onError) {
|
|
6
|
+
const token = (() => {
|
|
7
|
+
try {
|
|
8
|
+
return requireToken();
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return '';
|
|
12
|
+
}
|
|
13
|
+
})();
|
|
14
|
+
const url = token ? `${wsUrl}${wsUrl.includes('?') ? '&' : '?'}token=${token}` : wsUrl;
|
|
15
|
+
const ws = new WebSocket(url);
|
|
16
|
+
let closed = false;
|
|
17
|
+
ws.on('open', () => {
|
|
18
|
+
// connected
|
|
19
|
+
});
|
|
20
|
+
ws.on('message', (data) => {
|
|
21
|
+
try {
|
|
22
|
+
const msg = JSON.parse(data.toString());
|
|
23
|
+
// Sygnal konca: consumer wysyla {event: 'done', status}
|
|
24
|
+
if (msg.event === 'done' || msg.type === 'status') {
|
|
25
|
+
closed = true;
|
|
26
|
+
ws.close();
|
|
27
|
+
onComplete(msg.status ?? 'unknown');
|
|
28
|
+
}
|
|
29
|
+
else if (msg.line !== undefined) {
|
|
30
|
+
// Linia logu - consumer wysyla {ts, stream, line} bez pola type
|
|
31
|
+
const s = msg.stream === 'stderr' ? 'stderr' : 'stdout';
|
|
32
|
+
onLog(msg.line, s);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// not json - treat as plain line
|
|
37
|
+
onLog(data.toString(), 'stdout');
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
ws.on('error', (err) => {
|
|
41
|
+
if (!closed) {
|
|
42
|
+
closed = true;
|
|
43
|
+
onError(err);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
ws.on('close', (code) => {
|
|
47
|
+
if (!closed) {
|
|
48
|
+
closed = true;
|
|
49
|
+
if (code === 1000) {
|
|
50
|
+
onComplete('success');
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
onError(new Error(`WebSocket closed unexpectedly (code ${code})`));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
return () => {
|
|
58
|
+
closed = true;
|
|
59
|
+
ws.close();
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export async function pollLogsHttp(deploymentId, onLog, intervalMs = 2000) {
|
|
63
|
+
let lastTs;
|
|
64
|
+
let terminalStatus;
|
|
65
|
+
// Poll until terminal status
|
|
66
|
+
while (!terminalStatus) {
|
|
67
|
+
await new Promise((r) => setTimeout(r, intervalMs));
|
|
68
|
+
try {
|
|
69
|
+
const lines = await api.getLogs(deploymentId, lastTs);
|
|
70
|
+
for (const entry of lines) {
|
|
71
|
+
onLog(entry.line, entry.stream ?? 'stdout');
|
|
72
|
+
lastTs = entry.ts;
|
|
73
|
+
}
|
|
74
|
+
const deployment = await api.getDeployment(deploymentId);
|
|
75
|
+
const status = deployment.status;
|
|
76
|
+
// Statusy terminalne deploymentu (sukces = 'running' lub 'live')
|
|
77
|
+
if (['running', 'live', 'success', 'failed', 'cancelled', 'rolled_back'].includes(status)) {
|
|
78
|
+
terminalStatus = status;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
// log fetch error, keep polling
|
|
83
|
+
onLog(`[poll error] ${err.message}`, 'stderr');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return terminalStatus;
|
|
87
|
+
}
|
|
88
|
+
export function defaultLogHandler(line, stream) {
|
|
89
|
+
if (stream === 'stderr') {
|
|
90
|
+
process.stderr.write(chalk.dim(line) + '\n');
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
process.stdout.write(line + '\n');
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
export async function streamDeploymentLogs(deploymentId, wsUrl, onLog = defaultLogHandler) {
|
|
97
|
+
if (wsUrl) {
|
|
98
|
+
return new Promise((resolve, reject) => {
|
|
99
|
+
streamLogsWs(wsUrl, onLog, (status) => resolve(status), (err) => {
|
|
100
|
+
// WS failed - fallback to HTTP poll
|
|
101
|
+
console.error(chalk.dim(`[ws] Falling back to HTTP poll: ${err.message}`));
|
|
102
|
+
pollLogsHttp(deploymentId, onLog)
|
|
103
|
+
.then(resolve)
|
|
104
|
+
.catch(reject);
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
return pollLogsHttp(deploymentId, onLog);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=ws-logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-logs.js","sourceRoot":"","sources":["../../src/lib/ws-logs.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@saplo/cli",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Official CLI for Saplo hosting platform",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"saplo",
|
|
7
|
+
"hosting",
|
|
8
|
+
"cli",
|
|
9
|
+
"deploy"
|
|
10
|
+
],
|
|
11
|
+
"homepage": "https://saplo.pl/docs/cli/",
|
|
12
|
+
"repository": {
|
|
13
|
+
"type": "git",
|
|
14
|
+
"url": "git+https://github.com/TheBlackSurf/saplo-cli.git"
|
|
15
|
+
},
|
|
16
|
+
"bugs": "https://github.com/TheBlackSurf/saplo-cli/issues",
|
|
17
|
+
"license": "MIT",
|
|
18
|
+
"author": "Studio Kalmus <info@studiokalmus.com>",
|
|
19
|
+
"type": "module",
|
|
20
|
+
"publishConfig": {
|
|
21
|
+
"access": "public"
|
|
22
|
+
},
|
|
23
|
+
"bin": {
|
|
24
|
+
"saplo": "./bin/run.js"
|
|
25
|
+
},
|
|
26
|
+
"main": "./dist/index.js",
|
|
27
|
+
"exports": "./dist/index.js",
|
|
28
|
+
"files": [
|
|
29
|
+
"/bin",
|
|
30
|
+
"/dist",
|
|
31
|
+
"/oclif.manifest.json"
|
|
32
|
+
],
|
|
33
|
+
"scripts": {
|
|
34
|
+
"build": "tsc -p tsconfig.json",
|
|
35
|
+
"prepack": "npm run build",
|
|
36
|
+
"test": "vitest run",
|
|
37
|
+
"test:watch": "vitest",
|
|
38
|
+
"lint": "eslint src --ext .ts",
|
|
39
|
+
"postpack": "rm -f oclif.manifest.json",
|
|
40
|
+
"readme": "oclif readme"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@oclif/core": "^3.27.0",
|
|
44
|
+
"axios": "^1.7.9",
|
|
45
|
+
"chalk": "^5.3.0",
|
|
46
|
+
"form-data": "^4.0.5",
|
|
47
|
+
"ora": "^8.1.1",
|
|
48
|
+
"tar": "^7.4.3",
|
|
49
|
+
"ws": "^8.18.0",
|
|
50
|
+
"yaml": "^2.7.0"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@types/form-data": "^2.2.1",
|
|
54
|
+
"@types/node": "^22.10.0",
|
|
55
|
+
"@types/tar": "^6.1.13",
|
|
56
|
+
"@types/ws": "^8.5.13",
|
|
57
|
+
"msw": "^2.7.0",
|
|
58
|
+
"oclif": "^4.15.0",
|
|
59
|
+
"typescript": "^5.7.2",
|
|
60
|
+
"vitest": "^2.1.8"
|
|
61
|
+
},
|
|
62
|
+
"engines": {
|
|
63
|
+
"node": ">=20"
|
|
64
|
+
},
|
|
65
|
+
"oclif": {
|
|
66
|
+
"bin": "saplo",
|
|
67
|
+
"dirname": "saplo",
|
|
68
|
+
"commands": "./dist/commands",
|
|
69
|
+
"plugins": [],
|
|
70
|
+
"topicSeparator": " ",
|
|
71
|
+
"topics": {
|
|
72
|
+
"env": {
|
|
73
|
+
"description": "Manage environment variables for your application"
|
|
74
|
+
},
|
|
75
|
+
"domain": {
|
|
76
|
+
"description": "Manage custom domains for your application"
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|