diff --git a/bun/soupclown/.gitignore b/bun/soupclown/.gitignore new file mode 100644 index 0000000..a14702c --- /dev/null +++ b/bun/soupclown/.gitignore @@ -0,0 +1,34 @@ +# dependencies (bun install) +node_modules + +# output +out +dist +*.tgz + +# code coverage +coverage +*.lcov + +# logs +logs +_.log +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# caches +.eslintcache +.cache +*.tsbuildinfo + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/bun/soupclown/bun.lock b/bun/soupclown/bun.lock new file mode 100644 index 0000000..81689f9 --- /dev/null +++ b/bun/soupclown/bun.lock @@ -0,0 +1,31 @@ +{ + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "soupclown", + "dependencies": { + "zod": "^4.3.6", + }, + "devDependencies": { + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + }, + "packages": { + "@types/bun": ["@types/bun@1.3.13", "", { "dependencies": { "bun-types": "1.3.13" } }, "sha512-9fqXWk5YIHGGnUau9TEi+qdlTYDAnOj+xLCmSTwXfAIqXr2x4tytJb43E9uCvt09zJURKXwAtkoH4nLQfzeTXw=="], + + "@types/node": ["@types/node@25.6.0", "", { "dependencies": { "undici-types": "~7.19.0" } }, "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ=="], + + "bun-types": ["bun-types@1.3.13", "", { "dependencies": { "@types/node": "*" } }, "sha512-QXKeHLlOLqQX9LgYaHJfzdBaV21T63HhFJnvuRCcjZiaUDpbs5ED1MgxbMra71CsryN/1dAoXuJJJwIv/2drVA=="], + + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "undici-types": ["undici-types@7.19.2", "", {}, "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg=="], + + "zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="], + } +} diff --git a/bun/soupclown/index.ts b/bun/soupclown/index.ts new file mode 100644 index 0000000..866617a --- /dev/null +++ b/bun/soupclown/index.ts @@ -0,0 +1,8 @@ +import { DockerSC } from "./src/interface/docker"; + +console.log("Hello via Bun!"); + +const containers = await DockerSC.PS(); +containers.forEach(container => { + console.log(`Name: ${container.Names}`) +}); \ No newline at end of file diff --git a/bun/soupclown/package.json b/bun/soupclown/package.json new file mode 100644 index 0000000..7a0820a --- /dev/null +++ b/bun/soupclown/package.json @@ -0,0 +1,15 @@ +{ + "name": "soupclown", + "module": "index.ts", + "type": "module", + "private": true, + "devDependencies": { + "@types/bun": "latest" + }, + "peerDependencies": { + "typescript": "^5" + }, + "dependencies": { + "zod": "^4.3.6" + } +} diff --git a/bun/soupclown/src/interface/docker.ts b/bun/soupclown/src/interface/docker.ts new file mode 100644 index 0000000..392d721 --- /dev/null +++ b/bun/soupclown/src/interface/docker.ts @@ -0,0 +1,39 @@ +import { $ } from "bun"; +import z, { parse } from "zod"; + +const CLI_ContainerInfoSchema = z.object({ + ID: z.string(), + Image: z.string(), + CreatedAt: z.string(), + State: z.string(), + Names: z.string(), +}) +type CLI_ContainerInfo = z.infer; + +const SC_ContainerInfo = z.object({ + id: z.string(), + name: z.string(), + image: z.string(), + state: z.unknown(), + created: z.date(), +}) +type SC_ContainerInfoT = typeof SC_ContainerInfo; + +async function PS (){ + const result = $`docker ps -a --format json` + const containerData: CLI_ContainerInfo[] = []; + + for await (let line of result.lines()){ + // containerData.push(JSON.parse(line)); + if(line.length < "{}".length){ + continue; + } + const parsedData = CLI_ContainerInfoSchema.parse(JSON.parse(line)) + containerData.push(parsedData); + } + return containerData; +} + +export const DockerSC = { + PS, +} \ No newline at end of file diff --git a/bun/soupclown/tsconfig.json b/bun/soupclown/tsconfig.json new file mode 100644 index 0000000..bfa0fea --- /dev/null +++ b/bun/soupclown/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + // Environment setup & latest features + "lib": ["ESNext"], + "target": "ESNext", + "module": "Preserve", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + + // Bundler mode + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + + // Best practices + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + + // Some stricter flags (disabled by default) + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false + } +}