@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.
Files changed (96) hide show
  1. package/README.md +112 -0
  2. package/bin/dev.js +5 -0
  3. package/bin/run.js +5 -0
  4. package/dist/commands/deploy.d.ts +13 -0
  5. package/dist/commands/deploy.d.ts.map +1 -0
  6. package/dist/commands/deploy.js +206 -0
  7. package/dist/commands/deploy.js.map +1 -0
  8. package/dist/commands/domain/add.d.ts +13 -0
  9. package/dist/commands/domain/add.d.ts.map +1 -0
  10. package/dist/commands/domain/add.js +44 -0
  11. package/dist/commands/domain/add.js.map +1 -0
  12. package/dist/commands/domain/ls.d.ts +10 -0
  13. package/dist/commands/domain/ls.d.ts.map +1 -0
  14. package/dist/commands/domain/ls.js +32 -0
  15. package/dist/commands/domain/ls.js.map +1 -0
  16. package/dist/commands/domain/rm.d.ts +13 -0
  17. package/dist/commands/domain/rm.d.ts.map +1 -0
  18. package/dist/commands/domain/rm.js +29 -0
  19. package/dist/commands/domain/rm.js.map +1 -0
  20. package/dist/commands/env/index.d.ts +10 -0
  21. package/dist/commands/env/index.d.ts.map +1 -0
  22. package/dist/commands/env/index.js +34 -0
  23. package/dist/commands/env/index.js.map +1 -0
  24. package/dist/commands/env/pull.d.ts +12 -0
  25. package/dist/commands/env/pull.d.ts.map +1 -0
  26. package/dist/commands/env/pull.js +62 -0
  27. package/dist/commands/env/pull.js.map +1 -0
  28. package/dist/commands/env/rm.d.ts +14 -0
  29. package/dist/commands/env/rm.d.ts.map +1 -0
  30. package/dist/commands/env/rm.js +36 -0
  31. package/dist/commands/env/rm.js.map +1 -0
  32. package/dist/commands/env/set.d.ts +14 -0
  33. package/dist/commands/env/set.d.ts.map +1 -0
  34. package/dist/commands/env/set.js +47 -0
  35. package/dist/commands/env/set.js.map +1 -0
  36. package/dist/commands/init.d.ts +13 -0
  37. package/dist/commands/init.d.ts.map +1 -0
  38. package/dist/commands/init.js +144 -0
  39. package/dist/commands/init.js.map +1 -0
  40. package/dist/commands/link.d.ts +10 -0
  41. package/dist/commands/link.d.ts.map +1 -0
  42. package/dist/commands/link.js +86 -0
  43. package/dist/commands/link.js.map +1 -0
  44. package/dist/commands/login.d.ts +12 -0
  45. package/dist/commands/login.d.ts.map +1 -0
  46. package/dist/commands/login.js +83 -0
  47. package/dist/commands/login.js.map +1 -0
  48. package/dist/commands/logs.d.ts +13 -0
  49. package/dist/commands/logs.d.ts.map +1 -0
  50. package/dist/commands/logs.js +63 -0
  51. package/dist/commands/logs.js.map +1 -0
  52. package/dist/commands/open.d.ts +10 -0
  53. package/dist/commands/open.d.ts.map +1 -0
  54. package/dist/commands/open.js +42 -0
  55. package/dist/commands/open.js.map +1 -0
  56. package/dist/commands/rollback.d.ts +16 -0
  57. package/dist/commands/rollback.d.ts.map +1 -0
  58. package/dist/commands/rollback.js +51 -0
  59. package/dist/commands/rollback.js.map +1 -0
  60. package/dist/commands/status.d.ts +10 -0
  61. package/dist/commands/status.d.ts.map +1 -0
  62. package/dist/commands/status.js +63 -0
  63. package/dist/commands/status.js.map +1 -0
  64. package/dist/commands/whoami.d.ts +7 -0
  65. package/dist/commands/whoami.d.ts.map +1 -0
  66. package/dist/commands/whoami.js +26 -0
  67. package/dist/commands/whoami.js.map +1 -0
  68. package/dist/index.d.ts +2 -0
  69. package/dist/index.d.ts.map +1 -0
  70. package/dist/index.js +2 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/lib/api.d.ts +68 -0
  73. package/dist/lib/api.d.ts.map +1 -0
  74. package/dist/lib/api.js +117 -0
  75. package/dist/lib/api.js.map +1 -0
  76. package/dist/lib/config.d.ts +16 -0
  77. package/dist/lib/config.d.ts.map +1 -0
  78. package/dist/lib/config.js +74 -0
  79. package/dist/lib/config.js.map +1 -0
  80. package/dist/lib/detect.d.ts +9 -0
  81. package/dist/lib/detect.d.ts.map +1 -0
  82. package/dist/lib/detect.js +293 -0
  83. package/dist/lib/detect.js.map +1 -0
  84. package/dist/lib/packager.d.ts +18 -0
  85. package/dist/lib/packager.d.ts.map +1 -0
  86. package/dist/lib/packager.js +139 -0
  87. package/dist/lib/packager.js.map +1 -0
  88. package/dist/lib/saplo-config.d.ts +50 -0
  89. package/dist/lib/saplo-config.d.ts.map +1 -0
  90. package/dist/lib/saplo-config.js +203 -0
  91. package/dist/lib/saplo-config.js.map +1 -0
  92. package/dist/lib/ws-logs.d.ts +6 -0
  93. package/dist/lib/ws-logs.d.ts.map +1 -0
  94. package/dist/lib/ws-logs.js +112 -0
  95. package/dist/lib/ws-logs.js.map +1 -0
  96. 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
+ }