ziex 0.1.0-dev.864 → 0.1.0-dev.866
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/bin/ziex +61 -0
- package/install.cjs +218 -0
- package/package.json +16 -1
package/bin/ziex
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// Stub that delegates to the native zx binary.
|
|
4
|
+
// The postinstall script copies it to bin/zx, but if that hasn't run
|
|
5
|
+
// (e.g. bunx), we resolve the platform package's binary directly.
|
|
6
|
+
|
|
7
|
+
import { execFileSync } from "child_process";
|
|
8
|
+
import { existsSync } from "fs";
|
|
9
|
+
import { createRequire } from "module";
|
|
10
|
+
import { dirname, join } from "path";
|
|
11
|
+
import { fileURLToPath } from "url";
|
|
12
|
+
|
|
13
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
14
|
+
const require = createRequire(import.meta.url);
|
|
15
|
+
const isWindows = process.platform === "win32";
|
|
16
|
+
const ext = isWindows ? ".exe" : "";
|
|
17
|
+
|
|
18
|
+
function findBinary() {
|
|
19
|
+
// 1. Check if postinstall already placed the binary
|
|
20
|
+
const localBin = join(__dirname, `zx${ext}`);
|
|
21
|
+
if (existsSync(localBin)) return localBin;
|
|
22
|
+
|
|
23
|
+
// 2. Resolve from the platform-specific optional dependency
|
|
24
|
+
const platformPkgs = {
|
|
25
|
+
"darwin-arm64": "@ziex/cli-darwin-arm64",
|
|
26
|
+
"darwin-x64": "@ziex/cli-darwin-x64",
|
|
27
|
+
"linux-x64": "@ziex/cli-linux-x64",
|
|
28
|
+
"linux-arm64": "@ziex/cli-linux-arm64",
|
|
29
|
+
"win32-x64": "@ziex/cli-win32-x64",
|
|
30
|
+
"win32-arm64": "@ziex/cli-win32-arm64",
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const pkg = platformPkgs[`${process.platform}-${process.arch}`];
|
|
34
|
+
if (pkg) {
|
|
35
|
+
try {
|
|
36
|
+
const pkgDir = dirname(require.resolve(`${pkg}/package.json`));
|
|
37
|
+
const bin = join(pkgDir, "bin", `zx${ext}`);
|
|
38
|
+
if (existsSync(bin)) return bin;
|
|
39
|
+
} catch {}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const bin = findBinary();
|
|
46
|
+
if (!bin) {
|
|
47
|
+
console.error(
|
|
48
|
+
"Error: ziex native binary not found. The postinstall script may not have run.",
|
|
49
|
+
);
|
|
50
|
+
console.error("Try reinstalling: npm install -g ziex");
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
try {
|
|
55
|
+
execFileSync(bin, process.argv.slice(2), { stdio: "inherit" });
|
|
56
|
+
} catch (e) {
|
|
57
|
+
if (e.status !== undefined) {
|
|
58
|
+
process.exit(e.status);
|
|
59
|
+
}
|
|
60
|
+
throw e;
|
|
61
|
+
}
|
package/install.cjs
ADDED
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
// Postinstall script for ziex npm package
|
|
2
|
+
// Resolves the native binary from platform-specific optionalDependencies
|
|
3
|
+
// or falls back to downloading from GitHub releases.
|
|
4
|
+
|
|
5
|
+
const { existsSync, mkdirSync, copyFileSync, chmodSync, createWriteStream, unlinkSync } = require("fs");
|
|
6
|
+
const { execSync } = require("child_process");
|
|
7
|
+
const path = require("path");
|
|
8
|
+
const https = require("https");
|
|
9
|
+
const { createGunzip } = require("zlib");
|
|
10
|
+
|
|
11
|
+
const PLATFORM_MAP = {
|
|
12
|
+
darwin: {
|
|
13
|
+
arm64: { pkg: "@ziex/cli-darwin-arm64", target: "macos-aarch64" },
|
|
14
|
+
x64: { pkg: "@ziex/cli-darwin-x64", target: "macos-x64" },
|
|
15
|
+
},
|
|
16
|
+
linux: {
|
|
17
|
+
x64: { pkg: "@ziex/cli-linux-x64", target: "linux-x64" },
|
|
18
|
+
arm64: { pkg: "@ziex/cli-linux-arm64", target: "linux-aarch64" },
|
|
19
|
+
},
|
|
20
|
+
win32: {
|
|
21
|
+
x64: { pkg: "@ziex/cli-win32-x64", target: "windows-x64" },
|
|
22
|
+
arm64: { pkg: "@ziex/cli-win32-arm64", target: "windows-aarch64" },
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const GITHUB_REPO = "ziex-dev/ziex";
|
|
27
|
+
|
|
28
|
+
function getPlatformInfo() {
|
|
29
|
+
const os = process.platform;
|
|
30
|
+
const arch = process.arch;
|
|
31
|
+
const info = PLATFORM_MAP[os]?.[arch];
|
|
32
|
+
if (!info) {
|
|
33
|
+
throw new Error(`Unsupported platform: ${os}-${arch}`);
|
|
34
|
+
}
|
|
35
|
+
return info;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function getVersion() {
|
|
39
|
+
const pkg = require("./package.json");
|
|
40
|
+
return pkg.version;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function getBinaryName(target) {
|
|
44
|
+
const isWindows = process.platform === "win32";
|
|
45
|
+
return `zx-${target}${isWindows ? ".exe" : ""}`;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function getOutputPath() {
|
|
49
|
+
const binDir = path.join(__dirname, "bin");
|
|
50
|
+
const isWindows = process.platform === "win32";
|
|
51
|
+
return path.join(binDir, isWindows ? "zx.exe" : "zx");
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Try to resolve binary from optionalDependencies
|
|
55
|
+
function tryResolveFromOptionalDep(pkgName) {
|
|
56
|
+
try {
|
|
57
|
+
const pkgPath = require.resolve(`${pkgName}/package.json`);
|
|
58
|
+
const pkgDir = path.dirname(pkgPath);
|
|
59
|
+
const pkgJson = require(pkgPath);
|
|
60
|
+
const binName = pkgJson.bin?.zx || pkgJson.bin?.ziex;
|
|
61
|
+
if (binName) {
|
|
62
|
+
const binPath = path.join(pkgDir, binName);
|
|
63
|
+
if (existsSync(binPath)) {
|
|
64
|
+
return binPath;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Fallback: look for the binary directly
|
|
68
|
+
const isWindows = process.platform === "win32";
|
|
69
|
+
const possibleNames = isWindows ? ["zx.exe"] : ["zx"];
|
|
70
|
+
for (const name of possibleNames) {
|
|
71
|
+
const candidate = path.join(pkgDir, "bin", name);
|
|
72
|
+
if (existsSync(candidate)) return candidate;
|
|
73
|
+
}
|
|
74
|
+
} catch {
|
|
75
|
+
// Package not installed
|
|
76
|
+
}
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Download from GitHub releases
|
|
81
|
+
function downloadFromGitHub(target, version) {
|
|
82
|
+
return new Promise((resolve, reject) => {
|
|
83
|
+
const isWindows = process.platform === "win32";
|
|
84
|
+
const ext = isWindows ? "zip" : "tar.gz";
|
|
85
|
+
const tag = version.startsWith("0.") ? `zx-v${version}` : `zx-v${version}`;
|
|
86
|
+
const url = `https://github.com/${GITHUB_REPO}/releases/download/${tag}/zx-${target}.${ext}`;
|
|
87
|
+
const latestUrl = `https://github.com/${GITHUB_REPO}/releases/latest/download/zx-${target}.${ext}`;
|
|
88
|
+
|
|
89
|
+
const binDir = path.join(__dirname, "bin");
|
|
90
|
+
mkdirSync(binDir, { recursive: true });
|
|
91
|
+
const archivePath = path.join(binDir, `zx-${target}.${ext}`);
|
|
92
|
+
|
|
93
|
+
console.log(`Downloading ziex binary for ${target}...`);
|
|
94
|
+
|
|
95
|
+
function download(downloadUrl, isRetry) {
|
|
96
|
+
const followRedirect = (url) => {
|
|
97
|
+
const proto = url.startsWith("https") ? https : require("http");
|
|
98
|
+
proto
|
|
99
|
+
.get(url, { headers: { "User-Agent": "ziex-npm" } }, (res) => {
|
|
100
|
+
if (res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {
|
|
101
|
+
followRedirect(res.headers.location);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (res.statusCode !== 200) {
|
|
105
|
+
if (!isRetry) {
|
|
106
|
+
// Retry with latest
|
|
107
|
+
download(latestUrl, true);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
reject(new Error(`Download failed with status ${res.statusCode}: ${downloadUrl}`));
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const file = createWriteStream(archivePath);
|
|
115
|
+
res.pipe(file);
|
|
116
|
+
file.on("finish", () => {
|
|
117
|
+
file.close(() => resolve(archivePath));
|
|
118
|
+
});
|
|
119
|
+
})
|
|
120
|
+
.on("error", reject);
|
|
121
|
+
};
|
|
122
|
+
followRedirect(downloadUrl);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
download(url, false);
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function extractTarGz(archivePath, targetBinaryName, outputPath) {
|
|
130
|
+
const binDir = path.dirname(outputPath);
|
|
131
|
+
// Use tar command (available on macOS and Linux)
|
|
132
|
+
execSync(`tar -xzf "${archivePath}" -C "${binDir}"`, { stdio: "pipe" });
|
|
133
|
+
const extractedPath = path.join(binDir, targetBinaryName);
|
|
134
|
+
if (existsSync(extractedPath)) {
|
|
135
|
+
copyFileSync(extractedPath, outputPath);
|
|
136
|
+
unlinkSync(extractedPath);
|
|
137
|
+
}
|
|
138
|
+
unlinkSync(archivePath);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function extractZip(archivePath, targetBinaryName, outputPath) {
|
|
142
|
+
const binDir = path.dirname(outputPath);
|
|
143
|
+
execSync(`unzip -o "${archivePath}" -d "${binDir}"`, { stdio: "pipe" });
|
|
144
|
+
const extractedPath = path.join(binDir, targetBinaryName);
|
|
145
|
+
if (existsSync(extractedPath)) {
|
|
146
|
+
copyFileSync(extractedPath, outputPath);
|
|
147
|
+
unlinkSync(extractedPath);
|
|
148
|
+
}
|
|
149
|
+
unlinkSync(archivePath);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
async function main() {
|
|
153
|
+
const { pkg: pkgName, target } = getPlatformInfo();
|
|
154
|
+
const outputPath = getOutputPath();
|
|
155
|
+
const binDir = path.dirname(outputPath);
|
|
156
|
+
mkdirSync(binDir, { recursive: true });
|
|
157
|
+
|
|
158
|
+
// Step 1: Try to resolve from optional dependency
|
|
159
|
+
const resolvedPath = tryResolveFromOptionalDep(pkgName);
|
|
160
|
+
if (resolvedPath) {
|
|
161
|
+
console.log(`Found ziex binary from ${pkgName}`);
|
|
162
|
+
copyFileSync(resolvedPath, outputPath);
|
|
163
|
+
chmodSync(outputPath, 0o755);
|
|
164
|
+
|
|
165
|
+
// Create ziex alias (symlink or copy)
|
|
166
|
+
createAliases(outputPath);
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Step 2: Download from GitHub releases
|
|
171
|
+
console.log(`Platform package ${pkgName} not found, downloading from GitHub...`);
|
|
172
|
+
try {
|
|
173
|
+
const version = getVersion();
|
|
174
|
+
const archivePath = await downloadFromGitHub(target, version);
|
|
175
|
+
const binaryName = getBinaryName(target);
|
|
176
|
+
const isWindows = process.platform === "win32";
|
|
177
|
+
|
|
178
|
+
if (isWindows) {
|
|
179
|
+
extractZip(archivePath, binaryName, outputPath);
|
|
180
|
+
} else {
|
|
181
|
+
extractTarGz(archivePath, binaryName, outputPath);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
chmodSync(outputPath, 0o755);
|
|
185
|
+
createAliases(outputPath);
|
|
186
|
+
console.log("ziex binary installed successfully!");
|
|
187
|
+
} catch (err) {
|
|
188
|
+
console.error(`Failed to install ziex binary: ${err.message}`);
|
|
189
|
+
console.error("You can install it manually from: https://ziex.dev/install");
|
|
190
|
+
process.exit(1);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
function createAliases(zxPath) {
|
|
195
|
+
const binDir = path.dirname(zxPath);
|
|
196
|
+
const isWindows = process.platform === "win32";
|
|
197
|
+
const ziexPath = path.join(binDir, isWindows ? "ziex.exe" : "ziex");
|
|
198
|
+
|
|
199
|
+
// The main binary is `zx`, create `ziex` as a copy/symlink
|
|
200
|
+
try {
|
|
201
|
+
if (existsSync(ziexPath) && ziexPath !== zxPath) unlinkSync(ziexPath);
|
|
202
|
+
if (ziexPath !== zxPath) {
|
|
203
|
+
try {
|
|
204
|
+
const fs = require("fs");
|
|
205
|
+
fs.symlinkSync(path.basename(zxPath), ziexPath);
|
|
206
|
+
} catch {
|
|
207
|
+
copyFileSync(zxPath, ziexPath);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
} catch {
|
|
211
|
+
// Non-critical
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
main().catch((err) => {
|
|
216
|
+
console.error(err.message);
|
|
217
|
+
process.exit(1);
|
|
218
|
+
});
|
package/package.json
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ziex",
|
|
3
|
-
"version": "0.1.0-dev.
|
|
3
|
+
"version": "0.1.0-dev.866",
|
|
4
4
|
"description": "ZX is a framework for building web applications with Zig.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"type": "module",
|
|
7
|
+
"bin": {
|
|
8
|
+
"ziex": "bin/ziex",
|
|
9
|
+
"zx": "bin/ziex"
|
|
10
|
+
},
|
|
7
11
|
"exports": {
|
|
8
12
|
".": "./index.js",
|
|
9
13
|
"./react": "./react/index.js",
|
|
@@ -32,6 +36,9 @@
|
|
|
32
36
|
],
|
|
33
37
|
"author": "Nurul Huda (Apon) <me@nurulhudaapon.com>",
|
|
34
38
|
"license": "MIT",
|
|
39
|
+
"scripts": {
|
|
40
|
+
"postinstall": "node install.cjs"
|
|
41
|
+
},
|
|
35
42
|
"peerDependenciesMeta": {
|
|
36
43
|
"react": {
|
|
37
44
|
"optional": true
|
|
@@ -40,6 +47,14 @@
|
|
|
40
47
|
"optional": true
|
|
41
48
|
}
|
|
42
49
|
},
|
|
50
|
+
"optionalDependencies": {
|
|
51
|
+
"@ziex/cli-darwin-arm64": "0.1.0-dev.805",
|
|
52
|
+
"@ziex/cli-darwin-x64": "0.1.0-dev.805",
|
|
53
|
+
"@ziex/cli-linux-x64": "0.1.0-dev.805",
|
|
54
|
+
"@ziex/cli-linux-arm64": "0.1.0-dev.805",
|
|
55
|
+
"@ziex/cli-win32-x64": "0.1.0-dev.805",
|
|
56
|
+
"@ziex/cli-win32-arm64": "0.1.0-dev.805"
|
|
57
|
+
},
|
|
43
58
|
"module": "index.js",
|
|
44
59
|
"types": "index.d.ts"
|
|
45
60
|
}
|