turborepo-remote-cache 2.3.4 → 2.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -1
- package/dist/env.js +1 -4
- package/dist/plugins/remote-cache/storage/index.js +12 -3
- package/dist/plugins/remote-cache/storage/s3.js +58 -19
- package/package.json +12 -6
package/README.md
CHANGED
|
@@ -5,17 +5,26 @@
|
|
|
5
5
|
|
|
6
6
|

|
|
7
7
|
|
|
8
|
-
[](https://github.com/ducktors/turborepo-remote-cache/releases)   [](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/ci.yml) [](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/test.yaml) [](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/release.yml) [](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/docker.yml) [](https://codeclimate.com/github/ducktors/turborepo-remote-cache/maintainability) [](https://coveralls.io/github/ducktors/turborepo-remote-cache?branch=main) [](https://hub.docker.com/r/ducktors/turborepo-remote-cache) [](https://www.npmjs.com/package/turborepo-remote-cache) [](https://github.com/semantic-release/semantic-release) [](https://securityscorecards.dev/viewer/?uri=github.com/ducktors/turborepo-remote-cache) <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
|
8
|
+
[](https://github.com/ducktors/turborepo-remote-cache/releases)   [](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/ci.yml) [](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/test.yaml) [](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/release.yml) [](https://github.com/ducktors/turborepo-remote-cache/actions/workflows/docker.yml) [](https://codeclimate.com/github/ducktors/turborepo-remote-cache/maintainability) [](https://coveralls.io/github/ducktors/turborepo-remote-cache?branch=main) [](https://hub.docker.com/r/ducktors/turborepo-remote-cache) [](https://www.npmjs.com/package/turborepo-remote-cache) [](https://github.com/semantic-release/semantic-release) [](https://securityscorecards.dev/viewer/?uri=github.com/ducktors/turborepo-remote-cache) [](https://www.bestpractices.dev/projects/10164) <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
|
9
9
|
[](#contributors-)
|
|
10
10
|
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
|
11
11
|
|
|
12
12
|
This project is an open-source implementation of the [Turborepo custom remote cache server](https://turbo.build/repo/docs/core-concepts/remote-caching#self-hosting). If Vercel's official cache server isn't a viable option, this server is an alternative for self-hosted deployments.
|
|
13
13
|
It supports several storage providers and deploys environments. Moreover, the project provides **"deploy to "** buttons for one-click deployments whenever possible.
|
|
14
14
|
|
|
15
|
+
<p>This project is proudly supported by:</p>
|
|
16
|
+
<p>
|
|
17
|
+
<a href="https://www.digitalocean.com/">
|
|
18
|
+
<img src="https://opensource.nyc3.cdn.digitaloceanspaces.com/attribution/assets/SVG/DO_Logo_horizontal_blue.svg" width="201px">
|
|
19
|
+
</a>
|
|
20
|
+
</p>
|
|
21
|
+
|
|
22
|
+
|
|
15
23
|
## Notable projects that use TRRC
|
|
16
24
|
|
|
17
25
|
- [GitHub Actions](https://github.com/trappar/turborepo-remote-cache-gh-action)
|
|
18
26
|
- [AWS CDK Construct](https://github.com/NimmLor/cdk-turborepo-remote-cache)
|
|
27
|
+
- [Turbo Daemon](https://github.com/NullVoxPopuli/turbo-daemon)
|
|
19
28
|
|
|
20
29
|
## Documentation
|
|
21
30
|
|
package/dist/env.js
CHANGED
|
@@ -32,9 +32,6 @@ const schema = Type.Object({
|
|
|
32
32
|
BODY_LIMIT: Type.Optional(Type.Number({ default: 104857600 })),
|
|
33
33
|
STORAGE_PATH: Type.Optional(Type.String()),
|
|
34
34
|
STORAGE_PATH_USE_TMP_FOLDER: Type.Optional(Type.Boolean({ default: true })),
|
|
35
|
-
AWS_ACCESS_KEY_ID: Type.Optional(Type.String()),
|
|
36
|
-
AWS_SECRET_ACCESS_KEY: Type.Optional(Type.String()),
|
|
37
|
-
AWS_REGION: Type.Optional(Type.String()),
|
|
38
35
|
S3_ACCESS_KEY: Type.Optional(Type.String()),
|
|
39
36
|
S3_SECRET_KEY: Type.Optional(Type.String()),
|
|
40
37
|
S3_REGION: Type.Optional(Type.String()),
|
|
@@ -67,4 +64,4 @@ export const env = {
|
|
|
67
64
|
return _env;
|
|
68
65
|
},
|
|
69
66
|
};
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Vudi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVUsSUFBSSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDaEQsT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFBO0FBQ3JCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFdEMsTUFBTSxTQUFTLEdBQUc7SUFDaEIsVUFBVSxFQUFFLFlBQVk7SUFDeEIsV0FBVyxFQUFFLGFBQWE7SUFDMUIsSUFBSSxFQUFFLE1BQU07Q0FDSixDQUFBO0FBR1YsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUc7SUFDL0IsS0FBSyxFQUFFLE9BQU87SUFDZCxFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1Isb0JBQW9CLEVBQUUsc0JBQXNCO0lBQzVDLGtCQUFrQixFQUFFLG9CQUFvQjtJQUN4QyxLQUFLLEVBQUUsT0FBTztDQUNOLENBQUE7QUFJVixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUN4QjtJQUNFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FDeEQ7SUFDRCxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNyRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDNUQsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3hDLFFB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
|
|
@@ -18,7 +18,16 @@ function createStorageLocation(provider, providerOptions) {
|
|
|
18
18
|
case STORAGE_PROVIDERS.S3:
|
|
19
19
|
case STORAGE_PROVIDERS.s3: {
|
|
20
20
|
const { accessKey, secretKey, region, endpoint } = providerOptions;
|
|
21
|
-
return createS3({
|
|
21
|
+
return createS3({
|
|
22
|
+
accessKey,
|
|
23
|
+
secretKey,
|
|
24
|
+
bucket: path,
|
|
25
|
+
region,
|
|
26
|
+
endpoint,
|
|
27
|
+
s3OptionsPassthrough: {
|
|
28
|
+
forcePathStyle: true,
|
|
29
|
+
},
|
|
30
|
+
});
|
|
22
31
|
}
|
|
23
32
|
case STORAGE_PROVIDERS.MINIO: {
|
|
24
33
|
const { accessKey, secretKey, region, endpoint } = providerOptions;
|
|
@@ -29,7 +38,7 @@ function createStorageLocation(provider, providerOptions) {
|
|
|
29
38
|
region,
|
|
30
39
|
endpoint,
|
|
31
40
|
s3OptionsPassthrough: {
|
|
32
|
-
|
|
41
|
+
forcePathStyle: true,
|
|
33
42
|
},
|
|
34
43
|
});
|
|
35
44
|
}
|
|
@@ -89,4 +98,4 @@ export function createLocation(provider, providerOptions) {
|
|
|
89
98
|
existsCachedArtifact,
|
|
90
99
|
};
|
|
91
100
|
}
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGx1Z2lucy9yZW1vdGUtY2FjaGUvc3RvcmFnZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzNCLE9BQU8sRUFBWSxRQUFRLElBQUksZ0JBQWdCLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDL0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNoQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUNuRCxPQUFPLEVBRUwsc0JBQXNCLEdBQ3ZCLE1BQU0seUJBQXlCLENBQUE7QUFDaEMsT0FBTyxFQUVMLHdCQUF3QixHQUN6QixNQUFNLDJCQUEyQixDQUFBO0FBQ2xDLE9BQU8sRUFBa0MsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3hFLE9BQU8sRUFBNEIsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBRTVELE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0FBQzVDLE1BQU0sdUJBQXVCLEdBQUcsZ0JBQXlCLENBQUE7QUFDekQsTUFBTSwwQkFBMEIsR0FBRyxJQUFhLENBQUE7QUE2QmhELFNBQVMscUJBQXFCLENBQzVCLFFBQWtCLEVBQ2xCLGVBQTBDO0lBRTFDLE1BQU0sRUFDSixJQUFJLEdBQUcsdUJBQXVCLEVBQzlCLE1BQU0sR0FBRywwQkFBMEIsR0FDcEMsR0FBRyxlQUFlLENBQUE7SUFFbkIsUUFBUSxRQUFRLEVBQUU7UUFDaEIsS0FBSyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixPQUFPLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO1NBQ3JDO1FBQ0QsS0FBSyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7UUFDMUIsS0FBSyxpQkFBaUIs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
|
|
@@ -1,27 +1,66 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { PassThrough, Writable } from 'node:stream';
|
|
2
|
+
import { GetObjectCommand, HeadObjectCommand, S3Client, } from '@aws-sdk/client-s3';
|
|
3
|
+
import { Upload } from '@aws-sdk/lib-storage';
|
|
4
|
+
export function createS3({ accessKey = process.env.S3_ACCESS_KEY, secretKey = process.env.S3_SECRET_KEY, bucket, region = process.env.S3_REGION, endpoint, s3OptionsPassthrough = {}, }) {
|
|
5
|
+
if (!bucket) {
|
|
6
|
+
throw new Error('S3 bucket is required; please set the STORAGE_PATH environment variable to the bucket name');
|
|
7
|
+
}
|
|
8
|
+
const client = new S3Client({
|
|
9
|
+
credentials: accessKey && secretKey
|
|
6
10
|
? {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
secretAccessKey: secretKey,
|
|
10
|
-
sessionToken: process.env.AWS_SESSION_TOKEN,
|
|
11
|
-
},
|
|
11
|
+
accessKeyId: accessKey,
|
|
12
|
+
secretAccessKey: secretKey,
|
|
12
13
|
}
|
|
13
|
-
:
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
: undefined,
|
|
15
|
+
region,
|
|
16
|
+
endpoint,
|
|
16
17
|
...(process.env.NODE_ENV === 'test'
|
|
17
18
|
? { sslEnabled: false, s3ForcePathStyle: true }
|
|
18
19
|
: {}),
|
|
19
20
|
...s3OptionsPassthrough,
|
|
20
21
|
});
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
return {
|
|
23
|
+
exists: async (key, cb) => {
|
|
24
|
+
try {
|
|
25
|
+
await client.send(new HeadObjectCommand({ Bucket: bucket, Key: key }));
|
|
26
|
+
return cb(null, true);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
return cb(null, false);
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
createReadStream: (key) => {
|
|
33
|
+
const passThrough = new PassThrough();
|
|
34
|
+
client
|
|
35
|
+
.send(new GetObjectCommand({ Bucket: bucket, Key: key }))
|
|
36
|
+
.then((data) => {
|
|
37
|
+
if (data.Body) {
|
|
38
|
+
data.Body.pipe(passThrough);
|
|
39
|
+
}
|
|
40
|
+
})
|
|
41
|
+
.catch((err) => passThrough.destroy(err));
|
|
42
|
+
return passThrough;
|
|
43
|
+
},
|
|
44
|
+
createWriteStream: (key) => {
|
|
45
|
+
const passThrough = new PassThrough();
|
|
46
|
+
const writeStream = new Writable({
|
|
47
|
+
write(chunk, encoding, callback) {
|
|
48
|
+
passThrough.write(chunk, encoding, callback);
|
|
49
|
+
},
|
|
50
|
+
final(callback) {
|
|
51
|
+
passThrough.end();
|
|
52
|
+
upload
|
|
53
|
+
.done()
|
|
54
|
+
.then(() => callback())
|
|
55
|
+
.catch(callback);
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
const upload = new Upload({
|
|
59
|
+
client,
|
|
60
|
+
params: { Bucket: bucket, Key: key, Body: passThrough },
|
|
61
|
+
});
|
|
62
|
+
return writeStream;
|
|
63
|
+
},
|
|
64
|
+
};
|
|
26
65
|
}
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGx1Z2lucy9yZW1vdGUtY2FjaGUvc3RvcmFnZS9zMy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNuRCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixRQUFRLEdBRVQsTUFBTSxvQkFBb0IsQ0FBQTtBQUMzQixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFjN0MsTUFBTSxVQUFVLFFBQVEsQ0FBQyxFQUN2QixTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQ3JDLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFDckMsTUFBTSxFQUNOLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFDOUIsUUFBUSxFQUNSLG9CQUFvQixHQUFHLEVBQUUsR0FDZjtJQUNWLElBQUksQ0FBQyxNQUFNLEVBQUU7UUFDWCxNQUFNLElBQUksS0FBSyxDQUNiLDRGQUE0RixDQUM3RixDQUFBO0tBQ0Y7SUFFRCxNQUFNLE1BQU0sR0FBMkIsSUFBSSxRQUFRLENBQUM7UUFDbEQsV0FBVyxFQUNULFNBQVMsSUFBSSxTQUFTO1lBQ3BCLENBQUMsQ0FBQztnQkFDRSxXQUFXLEVBQUUsU0FBUztnQkFDdEIsZUFBZSxFQUFFLFNBQVM7YUFDM0I7WUFDSCxDQUFDLENBQUMsU0FBUztRQUNmLE1BQU07UUFDTixRQUFRO1FBQ1IsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLE1BQU07WUFDakMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUU7WUFDL0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNQLEdBQUcsb0JBQW9CO0tBQ3hCLENBQUMsQ0FBQTtJQUVGLE9BQU87UUFDTCxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUN4QixJQUFJO2dCQUNGLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLGlCQUFpQixDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFBO2dCQUN0RSxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7YUFDdEI7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDZCxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUE7YUFDdkI7UUFDSCxDQUFDO1FBQ0QsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFXLEVBQUUsRUFBRTtZQUNoQyxNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFBO1lBQ3JDLE1BQU07aUJBQ0gsSUFBSSxDQUFDLElBQUksZ0JBQWdCLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2lCQUN4RCxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDYixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7aUJBQzVCO1lBQ0gsQ0FBQyxDQUFDO2lCQUNELEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1lBQzNDLE9BQU8sV0FBVyxDQUFBO1FBQ3BCLENBQUM7UUFDRCxpQkFBaUIsRUFBRSxDQUFDLEdBQVcsRUFBRSxFQUFFO1lBQ2pDLE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUE7WUFDckMsTUFBTSxXQUFXLEdBQUcsSUFBSSxRQUFRLENBQUM7Z0JBQy9CLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVE7b0JBQzdCLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtnQkFDOUMsQ0FBQztnQkFDRCxLQUFLLENBQUMsUUFBUTtvQkFDWixXQUFXLENBQUMsR0FBRyxFQUFFLENBQUE7b0JBQ2pCLE1BQU07eUJBQ0gsSUFBSSxFQUFFO3lCQUNOLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt5QkFDdEIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO2dCQUNwQixDQUFDO2FBQ0YsQ0FBQyxDQUFBO1lBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUM7Z0JBQ3hCLE1BQU07Z0JBQ04sTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7YUFDeEQsQ0FBQyxDQUFBO1lBRUYsT0FBTyxXQUFXLENBQUE7UUFDcEIsQ0FBQztLQUNGLENBQUE7QUFDSCxDQUFDIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "turborepo-remote-cache",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.6",
|
|
4
4
|
"description": "Turborepo remote cache server",
|
|
5
5
|
"main": "./dist/app.js",
|
|
6
6
|
"type": "module",
|
|
@@ -36,13 +36,16 @@
|
|
|
36
36
|
"semantic-release": "semantic-release",
|
|
37
37
|
"commit": "npx git-cz",
|
|
38
38
|
"prepare": "husky install",
|
|
39
|
-
"check-updates": "pnpm outdated --recursive --long"
|
|
39
|
+
"check-updates": "pnpm outdated --recursive --long",
|
|
40
|
+
"deps:inspector": "pnpx node-modules-inspector"
|
|
40
41
|
},
|
|
41
42
|
"repository": {
|
|
42
43
|
"type": "git",
|
|
43
44
|
"url": "git+https://github.com/ducktors/turborepo-remote-cache.git"
|
|
44
45
|
},
|
|
45
46
|
"dependencies": {
|
|
47
|
+
"@aws-sdk/client-s3": "^3.750.0",
|
|
48
|
+
"@aws-sdk/lib-storage": "^3.750.0",
|
|
46
49
|
"@azure/storage-blob": "^12.23.0",
|
|
47
50
|
"@fastify/aws-lambda": "^5.0.0",
|
|
48
51
|
"@fastify/jwt": "9.0.1",
|
|
@@ -50,7 +53,6 @@
|
|
|
50
53
|
"@hapi/boom": "10.0.0",
|
|
51
54
|
"@sinclair/typebox": "0.25.21",
|
|
52
55
|
"ajv": "8.12.0",
|
|
53
|
-
"aws-sdk": "2.1692.0",
|
|
54
56
|
"close-with-grace": "1.1.0",
|
|
55
57
|
"env-schema": "5.2.0",
|
|
56
58
|
"fastify": "5.1.0",
|
|
@@ -59,8 +61,7 @@
|
|
|
59
61
|
"fs-blob-store": "6.0.0",
|
|
60
62
|
"hyperid": "3.1.1",
|
|
61
63
|
"pino": "^9.5.0",
|
|
62
|
-
"pino-pretty": "^13.0.0"
|
|
63
|
-
"s3-blob-store": "4.1.1"
|
|
64
|
+
"pino-pretty": "^13.0.0"
|
|
64
65
|
},
|
|
65
66
|
"devDependencies": {
|
|
66
67
|
"@biomejs/biome": "1.2.2",
|
|
@@ -74,6 +75,7 @@
|
|
|
74
75
|
"@semantic-release/github": "^11.0.1",
|
|
75
76
|
"@semantic-release/npm": "^12.0.1",
|
|
76
77
|
"@semantic-release/release-notes-generator": "^14.0.3",
|
|
78
|
+
"@smithy/types": "^4.1.0",
|
|
77
79
|
"@types/node": "^20.6.3",
|
|
78
80
|
"@types/s3rver": "^3.7.4",
|
|
79
81
|
"c8": "^9.0.0",
|
|
@@ -118,6 +120,10 @@
|
|
|
118
120
|
"@octokit/plugin-paginate-rest@>=1.0.0 <11.4.1": ">=11.4.1",
|
|
119
121
|
"koa@>=2.0.0 <2.15.4": ">=2.15.4",
|
|
120
122
|
"esbuild@<=0.24.2": ">=0.25.0"
|
|
121
|
-
}
|
|
123
|
+
},
|
|
124
|
+
"onlyBuiltDependencies": [
|
|
125
|
+
"@biomejs/biome",
|
|
126
|
+
"msw"
|
|
127
|
+
]
|
|
122
128
|
}
|
|
123
129
|
}
|