import { string } from "https://raw.githubusercontent.com/soremwar/deno_types/b5a146610e2c97c1612371fcf610b541f950ee73/prop-types/v15.7.2/prop-types.d.ts"; import { ensureFileSync, S3, S3Bucket } from "../deps.ts"; import { wait } from "../deps.ts" const S3inner = wait({ text: "Generating S3 Index...", spinner: "aesthetic" }) interface S3File { url: string key: string | undefined } const s3 = new S3({ accessKeyID: Deno.env.get("S3_ACCESS_KEY")!, secretKey: Deno.env.get("S3_SECRET_KEY")!, endpointURL: Deno.env.get("S3_ENDPOINT_URL"), region: "eu-central-1" }); let DreamlandBucket = s3.getBucket(Deno.env.get("S3_BUCKET") || "dreamland-assets.lio.systems") const bucketDomain = Deno.env.get("S3_DOMAIN") || `${Deno.env.get("S3_ENDPOINT_URL")}/${Deno.env.get("S3_BUCKET")}` const list = DreamlandBucket.listAllObjects({ batchSize: 5 }) let Files: S3File[] = [] for await (const obj of list) { if (obj.size === 0) { S3inner.text = `${bucketDomain}/${obj.key} - Is a Folder, Continue` continue } Files.push({ url: `${bucketDomain}/${obj.key}`, key: obj.key }) } function createFile(files: S3File[]) { let string = `// This File is generated by scripts/s3.ts // Do not edit this File manually // run \`vr s3\` to regenerate this File const S3Files = [ ${files.map(file => (`{ "key" : "${file.key}", "url" : "${file.url}" }`)).join(",\n ")} ] export default S3Files ` return string } async function write(files: S3File[], file: string | URL) { const content = createFile(files) await Deno.writeTextFile(`./src/${file}`, content) } if (import.meta.main) { try { ensureFileSync(`./src/generated/s3.ts`) await write(Files, `generated/s3.ts`) } catch (error) { console.error(error) S3inner.fail() Deno.exit(1) } S3inner.succeed("S3 Index generated.") Deno.exit(0) }