From fc8a675e05076de5fdb5710cdfd26fdbaa45aa73 Mon Sep 17 00:00:00 2001 From: bipproduction Date: Sun, 16 Feb 2025 16:01:12 +0800 Subject: [PATCH] tabahan --- bun.lockb | Bin 168223 -> 166985 bytes find-port.ts | 68 ++++++++++++ package.json | 4 +- src/com/main-page/content-5/index.tsx | 7 +- src/lib/EnvStringParse.ts | 53 +++++++++ .../Preferences/nextjs-nodejs/config.json | 7 ++ xcoba.ts | 75 +++++++++++-- xcoba2.ts | 104 ++++++++++++++++++ 8 files changed, 304 insertions(+), 14 deletions(-) create mode 100644 find-port.ts create mode 100644 src/lib/EnvStringParse.ts create mode 100644 unknown/Library/Preferences/nextjs-nodejs/config.json create mode 100644 xcoba2.ts diff --git a/bun.lockb b/bun.lockb index c555ee57090d0596423cf2117918d96be8a704c5..8971ddf4549c3fb3ef62c222da2d5a20e93e199e 100755 GIT binary patch delta 31916 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 delta 32570 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 diff --git a/find-port.ts b/find-port.ts new file mode 100644 index 00000000..887273b3 --- /dev/null +++ b/find-port.ts @@ -0,0 +1,68 @@ +import getPort, { portNumbers } from 'get-port'; + +/** + * Mencari port yang tersedia dalam rentang tertentu. + * @param params - Parameter opsional untuk mencari port. + * @param params.count - Jumlah port yang dibutuhkan (default: 1). + * @param params.portStart - Awal rentang port (default: 3000). + * @param params.portEnd - Akhir rentang port (default: 6000). + * @param params.exclude - Daftar port yang harus dikecualikan. + * @returns Array port yang tersedia atau null jika tidak ada port yang cukup. + */ +async function findPort(params?: { count?: number, portStart?: number, portEnd?: number, exclude?: number[] }) { + const { count = 1, portStart = 3000, portEnd = 6000, exclude = [] } = params || {}; + + // Gabungkan port yang dikecualikan + const listPort = [...exclude]; // Hapus .flat() karena tidak diperlukan + const usedPorts = Array.from(new Set(listPort)) as number[]; + + // Validasi input + if (count <= 0) { + throw new Error('Count harus lebih besar dari 0'); + } + if (count > (portEnd - portStart + 1)) { + throw new Error(`Count tidak boleh lebih besar dari range port (${portEnd - portStart + 1})`); + } + if (portStart >= portEnd) { + throw new Error('portStart harus lebih kecil dari portEnd'); + } + if (portStart < 0 || portEnd > 65535) { + throw new Error('Port harus berada dalam rentang 0-65535'); + } + + // Optimasi pencarian port + const availablePorts = new Set(); + const portRange = portNumbers(portStart, portEnd); + const usedPortsSet = new Set(usedPorts); + + for (const port of portRange) { + if (availablePorts.size >= count) break; + + // Skip jika port sudah digunakan + if (usedPortsSet.has(port)) continue; + + try { + const availablePort = await getPort({ + port, + exclude: [...usedPorts, ...Array.from(availablePorts)], + }); + + // Pastikan port yang diperiksa berada dalam rentang yang ditentukan + if (availablePort === port && availablePort >= portStart && availablePort <= portEnd) { + availablePorts.add(port); + } + } catch (error) { + console.warn(`Gagal memeriksa port ${port}:`, error); + continue; // Lanjutkan ke port berikutnya + } + } + + // Jika tidak cukup port yang tersedia, lempar error + if (availablePorts.size < count) { + throw new Error('Tidak cukup port yang tersedia dalam rentang yang diberikan'); + } + + return Array.from(availablePorts); +} + +export default findPort; diff --git a/package.json b/package.json index f2c08e20..e65cce6e 100644 --- a/package.json +++ b/package.json @@ -21,11 +21,11 @@ "@types/lodash": "^4.17.15", "add": "^2.0.6", "animate.css": "^4.1.1", - "compress-pdf": "^0.5.2", "elysia": "^1.2.12", "embla-carousel-autoplay": "^8.5.2", "embla-carousel-react": "^7.1.0", "framer-motion": "^12.4.1", + "get-port": "^7.1.0", "lodash": "^4.17.21", "motion": "^12.4.1", "next": "15.1.6", @@ -33,8 +33,6 @@ "prisma": "^6.3.1", "react": "^19.0.0", "react-dom": "^19.0.0", - "react-multi-carousel": "^2.8.5", - "react-scroll-motion": "^0.3.5", "readdirp": "^4.1.1", "swr": "^2.3.2", "valtio": "^2.1.3" diff --git a/src/com/main-page/content-5/index.tsx b/src/com/main-page/content-5/index.tsx index 3d166384..5587052b 100644 --- a/src/com/main-page/content-5/index.tsx +++ b/src/com/main-page/content-5/index.tsx @@ -1,18 +1,21 @@ "use client"; import { Center, Container, Stack, Text } from "@mantine/core"; import { useRef } from "react"; -import FlipOnScroll from "./FlipScroll"; + +const name = process.env.NEXT_PUBLIC_NAME; function Content5() { const ref = useRef(null); return ( + ini name + {name && {name}}
CONTENT 5
- +
); diff --git a/src/lib/EnvStringParse.ts b/src/lib/EnvStringParse.ts new file mode 100644 index 00000000..f7bec7fc --- /dev/null +++ b/src/lib/EnvStringParse.ts @@ -0,0 +1,53 @@ +type EnvVariable = { key: string; value: string }; + +class EnvStringParser { + /** + * Parses an environment string into a key-value object. + * @param envString - The environment string to parse. + * @param env - Optional custom environment variables (defaults to `process.env` in Node.js). + * @returns A Record containing parsed environment variables. + */ + static parse(envString: string, env: Record = process.env): Record { + const envVars: EnvVariable[] = []; + // Split the string into lines + const lines = envString.split(/\r?\n/); // Handle both \n and \r\n line endings + + for (const line of lines) { + const trimmedLine = line.trim(); + // Skip comments and empty lines + if (!trimmedLine || trimmedLine.startsWith("#")) continue; + + // Match key-value pairs with support for quoted values + const match = trimmedLine.match(/^([\w.-]+)=(?:"([^"]*)"|'([^']*)'|([^#\s]*))/); + if (!match) { + console.warn(`Skipping invalid line: ${trimmedLine}`); + continue; + } + + const key = match[1]; + let value = match[2] || match[3] || match[4] || ""; // Handle double quotes, single quotes, or unquoted values + + // Resolve environment variable placeholders like ${VAR_NAME} + value = value.replace(/\$\{(\w+)\}/g, (_, varName) => { + if (env[varName]) { + return env[varName]!; + } else { + console.warn(`Environment variable ${varName} is not defined`); + return ""; + } + }); + + envVars.push({ key, value }); + } + + // Convert array of EnvVariable objects into a Record + const envObj: Record = {}; + for (const { key, value } of envVars) { + envObj[key] = value; + } + + return envObj; + } +} + +export default EnvStringParser; \ No newline at end of file diff --git a/unknown/Library/Preferences/nextjs-nodejs/config.json b/unknown/Library/Preferences/nextjs-nodejs/config.json new file mode 100644 index 00000000..1b0837d0 --- /dev/null +++ b/unknown/Library/Preferences/nextjs-nodejs/config.json @@ -0,0 +1,7 @@ +{ + "telemetry": { + "notifiedAt": "1739668984025", + "anonymousId": "da4db3546c4d6315299db5f269034c4669decd44840966bd3dc435bc184f5d61", + "salt": "f26f15c27a3239f30152845755757b47" + } +} \ No newline at end of file diff --git a/xcoba.ts b/xcoba.ts index ccb480e0..3e52e3e3 100644 --- a/xcoba.ts +++ b/xcoba.ts @@ -1,11 +1,68 @@ -import path from 'path'; -import fs from 'fs'; -import { compress } from 'compress-pdf'; +import { spawn } from 'bun' -(async () => { - const pdf = path.resolve("/Users/bip/Downloads", 'komoditas.pdf'); - const buffer = await compress(pdf); +async function proc(params?: { + env?: Record + cmd?: string + cwd?: string + timeout?: number + onStdOut?: (chunk: string) => void + onStdErr?: (chunk: string) => void +}) { + const { env = {}, cmd, cwd = "./", timeout = 30000 } = params || {} + return new Promise(async (resolve, reject) => { + const std = { + stdout: "", + stderr: "", + } - const compressedPdf = path.resolve(__dirname, 'compressed_pdf.pdf'); - await fs.promises.writeFile(compressedPdf, buffer); -})(); \ No newline at end of file + if (!cmd) { + reject(new Error("cmd is required")) + return + } + + const decoder = new TextDecoder() + const child = spawn(["/bin/bash", "-c", cmd], { + cwd, + env: { + PATH: process.env.PATH, + ...env + }, + }) + + const timeOut = setTimeout(() => { + child.kill() + clearTimeout(timeOut) + reject("timeout") + }, timeout) + + const resOut = new Response(child.stdout) + const resErr = new Response(child.stderr) + + if (resOut && resOut.body) { + for await (const chunk of resOut.body as unknown as AsyncIterable) { + const text = decoder.decode(chunk) + std.stdout += text + if (params?.onStdOut) { + params.onStdOut(text) + } + } + } + + if (resErr && resErr.body) { + for await (const chunk of resErr.body as unknown as AsyncIterable) { + const text = decoder.decode(chunk) + std.stderr += text + params?.onStdErr?.(text) + } + } + + clearTimeout(timeOut) + if (!child.killed) { + child.kill() + } + + resolve(std) + }) +} + +export default proc \ No newline at end of file diff --git a/xcoba2.ts b/xcoba2.ts new file mode 100644 index 00000000..526397ef --- /dev/null +++ b/xcoba2.ts @@ -0,0 +1,104 @@ +import { spawn } from 'bun'; + +async function proc(params?: { + env?: Record; + cmd?: string; + cwd?: string; + timeout?: number; + exitCode?: number; + onStdOut?: (chunk: string) => void; + onStdErr?: (chunk: string) => void; + onStdio?: (chunk: string) => void; +}) { + const { env = {}, cmd, cwd = "./", timeout = 600000 } = params || {}; + return new Promise(async (resolve, reject) => { + if (!cmd || typeof cmd !== "string") { + return reject(new Error("Invalid or missing command")); + } + + const std = { + stdout: "", + stderr: "", + stdio: "", + }; + + try { + // Spawn the child process + const child = spawn(cmd.split(" "), { + cwd, + env: { + PATH: process.env.PATH, + ...env, + }, + }); + + // Set a timeout to kill the process if it takes too long + const timeOut = setTimeout(() => { + try { + child.kill(); + } catch (err) { + console.warn("Failed to kill child process:", err); + } + reject(new Error("Process timed out")); + }, timeout); + + // Read stdout and stderr as text + const [stdout, stderr] = await Promise.all([ + readStream(child.stdout), + child.stderr ? readStream(child.stderr) : undefined, + ]); + + // Handle stdout + std.stdout = stdout; + std.stdio += stdout; + if (params?.onStdOut) { + params.onStdOut(stdout.trim()); + } + if (params?.onStdio) { + params.onStdio(stdout.trim()); + } + + // Handle stderr + std.stderr = stderr ?? ""; + std.stdio += stderr; + if (params?.onStdErr) { + params.onStdErr((stderr ?? "").trim()); + } + if (params?.onStdio) { + params.onStdio((stderr ?? "").trim()); + } + + clearTimeout(timeOut); + resolve(std); + } catch (err) { + reject(err); + } + }); +} + +async function readStream(stream: ReadableStream): Promise { + const reader = stream.getReader(); + const decoder = new TextDecoder(); + let result = ''; + let done = false; + + while (!done) { + const { value, done: streamDone } = await reader.read(); + done = streamDone; + if (value) { + result += decoder.decode(value, { stream: true }); + } + } + result += decoder.decode(); // flush any remaining data + return result.trim(); +} + +export default proc; + +proc({ + cmd: "bun run build", + cwd: "./", + onStdio: (text) => { + console.log(text.trim()); + } +}) \ No newline at end of file