Remove dependency

This commit is contained in:
Igor Savin
2026-03-20 23:34:21 +02:00
committed by Jay Linski
parent be945bb7bd
commit 800c3db6b2
4 changed files with 83 additions and 1373 deletions
-1369
View File
File diff suppressed because it is too large Load Diff
-1
View File
@@ -78,7 +78,6 @@
"concurrently": "^5.0.0",
"eslint": "^10.0.3",
"eslint-plugin-compat": "^7.0.1",
"fauxqs": "^2.3.1",
"fs-extra": "^8.1.0",
"husky": "^3.1.0",
"lint-staged": "^16.3.2",
+81
View File
@@ -0,0 +1,81 @@
const http = require('http');
/**
* Minimal in-memory S3-compatible server for testing.
* Supports PutObject and GetObject via path-style requests.
*/
function createFakeS3() {
const buckets = new Map();
const server = http.createServer((req, res) => {
const { bucket, key } = parsePath(req.url);
if (!bucket || !buckets.has(bucket)) {
res.writeHead(404, { 'Content-Type': 'application/xml' });
res.end('<Error><Code>NoSuchBucket</Code></Error>');
return;
}
const store = buckets.get(bucket);
if (req.method === 'PUT' && key) {
const chunks = [];
req.on('data', (chunk) => chunks.push(chunk));
req.on('end', () => {
store.set(key, Buffer.concat(chunks));
res.writeHead(200);
res.end();
});
} else if ((req.method === 'GET' || req.method === 'HEAD') && key) {
if (!store.has(key)) {
res.writeHead(404, { 'Content-Type': 'application/xml' });
res.end('<Error><Code>NoSuchKey</Code></Error>');
return;
}
const body = store.get(key);
res.writeHead(200, {
'Content-Length': body.length,
'Content-Type': 'application/octet-stream',
});
res.end(req.method === 'HEAD' ? undefined : body);
} else {
res.writeHead(405);
res.end();
}
});
return {
start() {
return new Promise((resolve) => {
server.listen(0, '127.0.0.1', () => {
const { port } = server.address();
resolve({
address: `http://127.0.0.1:${port}`,
createBucket(name) {
if (!buckets.has(name)) buckets.set(name, new Map());
},
reset() {
for (const store of buckets.values()) store.clear();
},
stop() {
return new Promise((r) => server.close(r));
},
});
});
});
},
};
}
function parsePath(url) {
// Path-style: /<bucket>/<key>
const parts = new URL(url, 'http://localhost').pathname
.replace(/^\//, '')
.split('/');
return {
bucket: parts[0] || null,
key: parts.slice(1).join('/') || null,
};
}
module.exports = { createFakeS3 };
+2 -3
View File
@@ -1,5 +1,6 @@
const fs = require('fs');
const { S3, GetObjectCommand } = require('@aws-sdk/client-s3');
const { createFakeS3 } = require('./fake-s3');
const BUCKET = 'test-bucket';
@@ -12,13 +13,11 @@ const {
getLocalFile,
} = require('../publish-to-aws');
let startFauxqs;
let server;
let s3Client;
beforeAll(async () => {
({ startFauxqs } = await import('fauxqs'));
server = await startFauxqs({ port: 0, logger: false });
server = await createFakeS3().start();
server.createBucket(BUCKET);
s3Client = new S3({