@wolsok/spa-cdk-stack 1.1.0 → 1.1.1
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
CHANGED
|
@@ -26,6 +26,30 @@ new SpaStack(app, 'MyApp', {
|
|
|
26
26
|
});
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
+
Hashed bundles get a one year `max-age`. Files that keep their names across
|
|
30
|
+
releases go into `noCacheFiles`, and files that need another header or content
|
|
31
|
+
type go into `cacheOverrides`. Both take globs relative to `buildOutputPath`.
|
|
32
|
+
Those files are left out of the main upload, so each file is uploaded once with
|
|
33
|
+
one header.
|
|
34
|
+
The build output goes up first, then the overrides and extra assets, and
|
|
35
|
+
`index.html` last, so it never points at a bundle that is not there yet. No
|
|
36
|
+
upload prunes the bucket, so tabs still running an older release keep finding
|
|
37
|
+
its bundles:
|
|
38
|
+
|
|
39
|
+
```ts
|
|
40
|
+
new SpaStack(app, 'MyApp', {
|
|
41
|
+
// ...
|
|
42
|
+
noCacheFiles: ['remoteEntry.json', 'assets/federation.manifest*.json'],
|
|
43
|
+
cacheOverrides: [
|
|
44
|
+
{
|
|
45
|
+
files: ['wasm/*.wasm'],
|
|
46
|
+
cacheControl: CacheControl.maxAge(Duration.days(1)),
|
|
47
|
+
contentType: 'application/wasm',
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
});
|
|
51
|
+
```
|
|
52
|
+
|
|
29
53
|
## Building
|
|
30
54
|
|
|
31
55
|
## Running unit tests
|
package/package.json
CHANGED
|
@@ -13,6 +13,21 @@ export interface SpaProps {
|
|
|
13
13
|
* bundles get, and are uploaded after those bundles.
|
|
14
14
|
*/
|
|
15
15
|
noCacheFiles?: string[];
|
|
16
|
+
/**
|
|
17
|
+
* Files that get their own Cache-Control, and optionally Content-Type,
|
|
18
|
+
* instead of the one year max-age, as globs relative to buildOutputPath.
|
|
19
|
+
* Like noCacheFiles, they are left out of the main deployment and uploaded
|
|
20
|
+
* after it, so each file is written once with one header. Keep the globs
|
|
21
|
+
* of different entries disjoint: a file matched twice is uploaded twice and
|
|
22
|
+
* the later header wins. Wildcards may only appear in the last segment.
|
|
23
|
+
*/
|
|
24
|
+
cacheOverrides?: CacheOverride[];
|
|
25
|
+
}
|
|
26
|
+
export interface CacheOverride {
|
|
27
|
+
/** Globs relative to buildOutputPath, e.g. `assets/manifest*.json`. */
|
|
28
|
+
files: string[];
|
|
29
|
+
cacheControl: CacheControl;
|
|
30
|
+
contentType?: string;
|
|
16
31
|
}
|
|
17
32
|
/**
|
|
18
33
|
* SPA infrastructure, which deploys spa content to an S3 bucket.
|
|
@@ -24,11 +39,16 @@ export interface SpaProps {
|
|
|
24
39
|
export declare class SpaConstruct extends Construct {
|
|
25
40
|
private readonly spaName;
|
|
26
41
|
private bucketDeployments;
|
|
42
|
+
private readonly indexDeployment;
|
|
43
|
+
private lastUpload;
|
|
27
44
|
private readonly bucket;
|
|
28
45
|
private readonly distribution;
|
|
29
46
|
constructor(parent: Construct, spaName: string, props: SpaProps);
|
|
30
47
|
/**
|
|
31
|
-
* Add some additional assets to the bucket of the SPA
|
|
48
|
+
* Add some additional assets to the bucket of the SPA, uploaded after the
|
|
49
|
+
* build output and before index.html. Use it for files that are not in
|
|
50
|
+
* buildOutputPath; for those that are, use noCacheFiles or cacheOverrides,
|
|
51
|
+
* or they are uploaded twice.
|
|
32
52
|
*/
|
|
33
53
|
addExtraAssets(assets: ISource[], cacheControl?: CacheControl, contentType?: string): void;
|
|
34
54
|
private createBucket;
|
|
@@ -7,6 +7,26 @@ import { CloudFrontTarget } from 'aws-cdk-lib/aws-route53-targets';
|
|
|
7
7
|
import { BlockPublicAccess, Bucket } from 'aws-cdk-lib/aws-s3';
|
|
8
8
|
import { BucketDeployment, CacheControl, Source, } from 'aws-cdk-lib/aws-s3-deployment';
|
|
9
9
|
import { Construct } from 'constructs';
|
|
10
|
+
/**
|
|
11
|
+
* Exclude globs that keep only `files`. '**' also skips every folder as a
|
|
12
|
+
* whole, so the folders above a nested file are re-included first, and
|
|
13
|
+
* `<glob>/**` keeps the contents of a glob that names a folder.
|
|
14
|
+
*/
|
|
15
|
+
function onlyInclude(files) {
|
|
16
|
+
const included = new Set();
|
|
17
|
+
for (const file of files) {
|
|
18
|
+
const folders = file.split('/').slice(0, -1);
|
|
19
|
+
if (folders.some((folder) => /[*?[\]{}]/.test(folder))) {
|
|
20
|
+
// Re-including a folder wildcard such as `assets/*` would also bring
|
|
21
|
+
// back the files it matches, so they would be uploaded twice again.
|
|
22
|
+
throw new Error(`Wildcards are only supported in the last segment: ${file}`);
|
|
23
|
+
}
|
|
24
|
+
folders.forEach((_, i) => included.add(folders.slice(0, i + 1).join('/')));
|
|
25
|
+
included.add(file);
|
|
26
|
+
included.add(file + '/**');
|
|
27
|
+
}
|
|
28
|
+
return ['**', ...[...included].map((glob) => '!' + glob)];
|
|
29
|
+
}
|
|
10
30
|
const defaultBucketRemovalPolicy = RemovalPolicy.DESTROY;
|
|
11
31
|
/**
|
|
12
32
|
* SPA infrastructure, which deploys spa content to an S3 bucket.
|
|
@@ -21,7 +41,13 @@ export class SpaConstruct extends Construct {
|
|
|
21
41
|
this.spaName = spaName;
|
|
22
42
|
this.bucketDeployments = [];
|
|
23
43
|
const removalPolicy = props.bucketRemovalPolicy ?? defaultBucketRemovalPolicy;
|
|
24
|
-
const { buildOutputPath, extraAllowedOrigins, noCacheFiles = [] } = props;
|
|
44
|
+
const { buildOutputPath, extraAllowedOrigins, noCacheFiles = [], cacheOverrides = [], } = props;
|
|
45
|
+
const overrides = [
|
|
46
|
+
...(noCacheFiles.length > 0
|
|
47
|
+
? [{ files: noCacheFiles, cacheControl: CacheControl.noCache() }]
|
|
48
|
+
: []),
|
|
49
|
+
...cacheOverrides,
|
|
50
|
+
];
|
|
25
51
|
const { mainDomain, siteDomain } = this.extractDomains(props.domainName);
|
|
26
52
|
const zone = HostedZone.fromLookup(this, spaName, {
|
|
27
53
|
privateZone: false,
|
|
@@ -38,36 +64,37 @@ export class SpaConstruct extends Construct {
|
|
|
38
64
|
this.bucket = this.createBucket(siteDomain, removalPolicy);
|
|
39
65
|
this.distribution = this.createDistribution(siteDomain, certificate, this.bucket, extraAllowedOrigins);
|
|
40
66
|
this.createARecord(siteDomain, this.distribution, zone);
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
], CacheControl.noCache());
|
|
67
|
+
// No deployment prunes: a pruning sync of index.html alone would delete
|
|
68
|
+
// every other file, and an upload whose asset did not change is not run
|
|
69
|
+
// again to restore it. Old bundles stay for tabs still running them.
|
|
70
|
+
// The first deployment owns the handler that all of them share, so the
|
|
71
|
+
// build output comes first and index.html, which waits for the rest, second.
|
|
72
|
+
this.lastUpload = this.createBucketDeployment([
|
|
73
|
+
Source.asset(buildOutputPath, {
|
|
74
|
+
exclude: ['index.html', ...overrides.flatMap(({ files }) => files)],
|
|
75
|
+
}),
|
|
76
|
+
], CacheControl.maxAge(Duration.days(365)), false, this.bucket, this.distribution);
|
|
77
|
+
this.bucketDeployments.push(this.lastUpload);
|
|
78
|
+
// index.html goes last, once every file it points at is uploaded.
|
|
79
|
+
this.indexDeployment = this.createBucketDeployment([Source.asset(buildOutputPath, { exclude: ['**', '!index.html'] })], CacheControl.noCache(), false, this.bucket, this.distribution);
|
|
80
|
+
this.bucketDeployments.push(this.indexDeployment);
|
|
81
|
+
this.indexDeployment.node.addDependency(this.lastUpload);
|
|
82
|
+
for (const { files, cacheControl, contentType } of overrides) {
|
|
83
|
+
this.addExtraAssets([Source.asset(buildOutputPath, { exclude: onlyInclude(files) })], cacheControl, contentType);
|
|
59
84
|
}
|
|
60
85
|
}
|
|
61
86
|
/**
|
|
62
|
-
* Add some additional assets to the bucket of the SPA
|
|
87
|
+
* Add some additional assets to the bucket of the SPA, uploaded after the
|
|
88
|
+
* build output and before index.html. Use it for files that are not in
|
|
89
|
+
* buildOutputPath; for those that are, use noCacheFiles or cacheOverrides,
|
|
90
|
+
* or they are uploaded twice.
|
|
63
91
|
*/
|
|
64
92
|
addExtraAssets(assets, cacheControl = CacheControl.maxAge(Duration.days(365)), contentType) {
|
|
65
93
|
const extraAssetsDeployment = this.createBucketDeployment(assets, cacheControl, false, this.bucket, this.distribution, contentType);
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
extraAssetsDeployment.node.addDependency(latestDeployment);
|
|
69
|
-
}
|
|
94
|
+
extraAssetsDeployment.node.addDependency(this.lastUpload);
|
|
95
|
+
this.lastUpload = extraAssetsDeployment;
|
|
70
96
|
this.bucketDeployments.push(extraAssetsDeployment);
|
|
97
|
+
this.indexDeployment.node.addDependency(extraAssetsDeployment);
|
|
71
98
|
}
|
|
72
99
|
createBucket(siteDomain, removalPolicy = RemovalPolicy.DESTROY) {
|
|
73
100
|
// Content bucket
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spa.construct.js","sourceRoot":"","sources":["../../../../../../../libs/public/spa-cdk-stack/src/lib/spa/spa.construct.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EACL,WAAW,EACX,qBAAqB,GACtB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,cAAc,EACd,YAAY,EACZ,WAAW,EAEX,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EACL,OAAO,EACP,UAAU,EAEV,YAAY,GACb,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAW,MAAM,oBAAoB,CAAC;AACxE,OAAO,EACL,gBAAgB,EAChB,YAAY,EAEZ,MAAM,GACP,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"spa.construct.js","sourceRoot":"","sources":["../../../../../../../libs/public/spa-cdk-stack/src/lib/spa/spa.construct.ts"],"names":[],"mappings":"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"}
|
package/src/lib/spa/spa.stack.js
CHANGED
|
@@ -7,13 +7,8 @@ import { SpaConstruct } from './spa.construct';
|
|
|
7
7
|
export class SpaStack extends Stack {
|
|
8
8
|
constructor(parent, name, props) {
|
|
9
9
|
super(parent, name, props);
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
buildOutputPath: props.buildOutputPath,
|
|
13
|
-
bucketRemovalPolicy: props.bucketRemovalPolicy,
|
|
14
|
-
extraAllowedOrigins: props.extraAllowedOrigins,
|
|
15
|
-
noCacheFiles: props.noCacheFiles,
|
|
16
|
-
});
|
|
10
|
+
// SpaConstruct only reads its own props, so new SpaProps fields pass through.
|
|
11
|
+
this.spa = new SpaConstruct(this, name, props);
|
|
17
12
|
}
|
|
18
13
|
}
|
|
19
14
|
//# sourceMappingURL=spa.stack.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spa.stack.js","sourceRoot":"","sources":["../../../../../../../libs/public/spa-cdk-stack/src/lib/spa/spa.stack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAc,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAY,MAAM,iBAAiB,CAAC;AAIzD;;;GAGG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IAGjC,YAAY,MAAiB,EAAE,IAAY,EAAE,KAAoB;QAC/D,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAE3B,IAAI,CAAC,GAAG,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE
|
|
1
|
+
{"version":3,"file":"spa.stack.js","sourceRoot":"","sources":["../../../../../../../libs/public/spa-cdk-stack/src/lib/spa/spa.stack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAc,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAY,MAAM,iBAAiB,CAAC;AAIzD;;;GAGG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IAGjC,YAAY,MAAiB,EAAE,IAAY,EAAE,KAAoB;QAC/D,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAE3B,8EAA8E;QAC9E,IAAI,CAAC,GAAG,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;CACF"}
|