import fs from "node:fs" import path from "node:path" import dotenv from "dotenv" import * as Minio from "minio" dotenv.config() const pasta_src = path.resolve(process.cwd(), "src") const arquivoDestino = path.resolve(pasta_src, "estaticos.ts") const endPoint = process.env.endPoint as string const port = Number(process.env.port) || 443 const useSSL = process.env.useSSL === "true" const accessKey = process.env.accessKey as string const secretKey = process.env.secretKey as string const bucket = "estaticos" if (!endPoint || !accessKey || !secretKey || !bucket) { console.error("Variáveis de ambiente do MinIO incompletas em .env") process.exit(1) } const minioClient = new Minio.Client({ endPoint, port, useSSL, accessKey, secretKey, }) export const gerar = (async () => { const objectsList: string[] = [] const stream = minioClient.listObjectsV2(bucket, "", true) stream.on("data", (obj) => { if (obj.name && !obj.name.endsWith("/")) { objectsList.push(`/${obj.name}`) // Minio doesn't return leading slashes usually } }) stream.on("end", () => { const arquivo_ts = ` /** * URLs fixas de estáticos no bucket */ export const estaticos = ()=> (${(() => { type tp = { [key: string]: string | tp } const arquivos = {} as tp objectsList.sort((a, b) => a.localeCompare(b, "pt-BR", { sensitivity: "base" }), ) // Pre-sort the array alphabetically with pt-BR case-insensitivity for (const arquivo of objectsList) { // arquivo already starts with '/' const partes = arquivo.slice(1).split("/") let pasta: any = arquivos for (const [i, parte] of partes.entries()) { if (i === partes.length - 1) { pasta[parte] = `~~~https://paiol.idz.one/estaticos${encodeURI(arquivo)}~~~` } else { pasta[parte] = pasta[parte] || {} pasta = pasta[parte] } } } return JSON.stringify(arquivos, null, 2) .replace(/"~~~/g, "'") .replace(/~~~"/g, "'") })()}) as const; ` // criar pasta de arquivo destino const pastaDestino = path.dirname(arquivoDestino) if (!fs.existsSync(pastaDestino)) { fs.mkdirSync(pastaDestino, { recursive: true }) } // escrever arquivo fs.writeFileSync(arquivoDestino, arquivo_ts) console.log("Arquivo gerado com sucesso") }) stream.on("error", (err) => console.log("Erro ao listar objetos do MinIO:", err), ) })()