dreamland/scripts/s3.ts

84 lines
No EOL
1.9 KiB
TypeScript

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)
}