@somewhere-tech/cli 0.2.3 → 0.2.4
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/deploy.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { readdirSync, readFileSync, statSync } from 'node:fs';
|
|
2
|
-
import { join, relative } from 'node:path';
|
|
2
|
+
import { extname, join, relative } from 'node:path';
|
|
3
3
|
import ora from 'ora';
|
|
4
4
|
import { ApiClient } from '../lib/client.js';
|
|
5
5
|
import { getToken, loadProjectConfig } from '../lib/config.js';
|
|
@@ -16,6 +16,13 @@ const IGNORE = new Set([
|
|
|
16
16
|
'.vercel',
|
|
17
17
|
]);
|
|
18
18
|
const MAX_FILE_SIZE = 5 * 1024 * 1024; // 5MB per file
|
|
19
|
+
const BINARY_EXTS = new Set([
|
|
20
|
+
'.png', '.jpg', '.jpeg', '.gif', '.webp', '.ico', '.bmp', '.avif',
|
|
21
|
+
'.woff', '.woff2', '.ttf', '.otf', '.eot',
|
|
22
|
+
'.pdf', '.zip', '.gz', '.tar', '.br',
|
|
23
|
+
'.mp3', '.mp4', '.wav', '.ogg', '.webm', '.mov', '.m4a',
|
|
24
|
+
'.wasm',
|
|
25
|
+
]);
|
|
19
26
|
export function registerDeploy(program) {
|
|
20
27
|
program
|
|
21
28
|
.command('deploy [dir]')
|
|
@@ -36,18 +43,27 @@ export function registerDeploy(program) {
|
|
|
36
43
|
}
|
|
37
44
|
const spinner = ora('Collecting files...').start();
|
|
38
45
|
const files = {};
|
|
46
|
+
const binaryFiles = {};
|
|
39
47
|
const functions = {};
|
|
40
|
-
collectFiles(targetDir, targetDir, files, functions);
|
|
41
|
-
const totalFiles = Object.keys(files).length +
|
|
42
|
-
|
|
48
|
+
collectFiles(targetDir, targetDir, files, binaryFiles, functions);
|
|
49
|
+
const totalFiles = Object.keys(files).length +
|
|
50
|
+
Object.keys(binaryFiles).length +
|
|
51
|
+
Object.keys(functions).length;
|
|
52
|
+
const textBytes = Object.values(files)
|
|
43
53
|
.concat(Object.values(functions))
|
|
44
54
|
.reduce((sum, c) => sum + c.length, 0);
|
|
55
|
+
const binaryBytes = Object.values(binaryFiles)
|
|
56
|
+
.reduce((sum, b64) => sum + Math.floor((b64.length * 3) / 4), 0);
|
|
57
|
+
const totalBytes = textBytes + binaryBytes;
|
|
45
58
|
spinner.text = `Deploying ${totalFiles} files (${formatBytes(totalBytes)})...`;
|
|
46
59
|
try {
|
|
47
60
|
const body = {
|
|
48
61
|
project_id: projectId,
|
|
49
62
|
files,
|
|
50
63
|
};
|
|
64
|
+
if (Object.keys(binaryFiles).length > 0) {
|
|
65
|
+
body.binary_files = binaryFiles;
|
|
66
|
+
}
|
|
51
67
|
if (Object.keys(functions).length > 0) {
|
|
52
68
|
body.functions = functions;
|
|
53
69
|
}
|
|
@@ -69,14 +85,14 @@ export function registerDeploy(program) {
|
|
|
69
85
|
}
|
|
70
86
|
});
|
|
71
87
|
}
|
|
72
|
-
function collectFiles(baseDir, currentDir, files, functions) {
|
|
88
|
+
function collectFiles(baseDir, currentDir, files, binaryFiles, functions) {
|
|
73
89
|
for (const entry of readdirSync(currentDir, { withFileTypes: true })) {
|
|
74
90
|
if (IGNORE.has(entry.name) || entry.name.startsWith('.'))
|
|
75
91
|
continue;
|
|
76
92
|
const fullPath = join(currentDir, entry.name);
|
|
77
93
|
const relPath = relative(baseDir, fullPath);
|
|
78
94
|
if (entry.isDirectory()) {
|
|
79
|
-
collectFiles(baseDir, fullPath, files, functions);
|
|
95
|
+
collectFiles(baseDir, fullPath, files, binaryFiles, functions);
|
|
80
96
|
continue;
|
|
81
97
|
}
|
|
82
98
|
if (!entry.isFile())
|
|
@@ -84,13 +100,16 @@ function collectFiles(baseDir, currentDir, files, functions) {
|
|
|
84
100
|
const stat = statSync(fullPath);
|
|
85
101
|
if (stat.size > MAX_FILE_SIZE)
|
|
86
102
|
continue;
|
|
87
|
-
const
|
|
103
|
+
const isBinary = BINARY_EXTS.has(extname(entry.name).toLowerCase());
|
|
88
104
|
if (relPath.startsWith('functions/')) {
|
|
89
|
-
|
|
90
|
-
functions[
|
|
105
|
+
const key = relPath.slice('functions/'.length);
|
|
106
|
+
functions[key] = readFileSync(fullPath, 'utf-8');
|
|
107
|
+
}
|
|
108
|
+
else if (isBinary) {
|
|
109
|
+
binaryFiles[relPath] = readFileSync(fullPath).toString('base64');
|
|
91
110
|
}
|
|
92
111
|
else {
|
|
93
|
-
files[relPath] =
|
|
112
|
+
files[relPath] = readFileSync(fullPath, 'utf-8');
|
|
94
113
|
}
|
|
95
114
|
}
|
|
96
115
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/device-login.js
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
import { randomInt } from 'node:crypto';
|
|
15
15
|
import { getDeviceKeyName } from './device.js';
|
|
16
16
|
const API_BASE = 'https://api.somewhere.tech';
|
|
17
|
-
const POLL_INTERVAL_MS =
|
|
17
|
+
const POLL_INTERVAL_MS = 1000;
|
|
18
18
|
const TIMEOUT_MS = 5 * 60 * 1000;
|
|
19
19
|
// Skip ambiguous chars (no I, O, 0, 1) — same alphabet the worker validates.
|
|
20
20
|
const ALPHABET = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';
|