@ruvyxa/adapter-aws 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/dist/index.d.ts.map +1 -1
- package/dist/index.js +33 -3
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +36 -2
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAA+B,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAA+B,MAAM,cAAc,CAAA;AAaxE,KAAK,cAAc,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,CAAA;AAEhE,mDAAmD;AACnD,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,4EAA4E;AAC5E,wBAAgB,GAAG,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAoJ5D;eAec,GAAG"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { readFileSync } from 'node:fs';
|
|
2
|
-
import { CLIENT_BUNDLE_PREFIX, clientBuildOutput, IMMUTABLE_CACHE_CONTROL, PUBLIC_ASSET_CACHE_CONTROL, runtimeBuildPolicy, standaloneServerSource, validateBuildContext, } from '@ruvyxa/core';
|
|
2
|
+
import { CLIENT_BUNDLE_PREFIX, clientBuildOutput, DEFAULT_SECURITY_HEADERS, IMMUTABLE_CACHE_CONTROL, nonPublishableStrategies, PUBLIC_ASSET_CACHE_CONTROL, runtimeBuildPolicy, standaloneServerSource, validateBuildContext, } from '@ruvyxa/core';
|
|
3
3
|
/** Create an AWS Amplify Hosting static-plus-compute adapter for Ruvyxa. */
|
|
4
4
|
export function aws(options = {}) {
|
|
5
5
|
const runtime = options.runtime ?? 'nodejs24.x';
|
|
@@ -30,6 +30,21 @@ export function aws(options = {}) {
|
|
|
30
30
|
computeResources: [{ name: 'default', runtime, entrypoint: 'server.js' }],
|
|
31
31
|
framework: { name: 'ruvyxa', version: frameworkVersion },
|
|
32
32
|
}, null, 2);
|
|
33
|
+
// Amplify Hosting's custom-header file.
|
|
34
|
+
//
|
|
35
|
+
// The deploy manifest's route targets carry `cacheControl` and nothing
|
|
36
|
+
// else, so it has no place to put the security defaults — and a `Static`
|
|
37
|
+
// target is answered by the CDN, which never invokes the compute
|
|
38
|
+
// resource where the standalone server sets them. That left a deployed
|
|
39
|
+
// pre-rendered page without a single one of them while the identical page
|
|
40
|
+
// from `ruvyxa start` carried all seven. `customHttp.yml` is the
|
|
41
|
+
// mechanism Amplify documents for this, read from the app root.
|
|
42
|
+
const customHttp = 'customHeaders:\n' +
|
|
43
|
+
` - pattern: '**'\n` +
|
|
44
|
+
' headers:\n' +
|
|
45
|
+
Object.entries(DEFAULT_SECURITY_HEADERS)
|
|
46
|
+
.map(([key, value]) => ` - key: '${key}'\n value: '${value}'\n`)
|
|
47
|
+
.join('');
|
|
33
48
|
const serverSource = standaloneServerSource({
|
|
34
49
|
isrCache: 'tmp',
|
|
35
50
|
runtimePolicy: runtimeBuildPolicy(ctx),
|
|
@@ -43,7 +58,7 @@ export function aws(options = {}) {
|
|
|
43
58
|
path: '.amplify-hosting/static',
|
|
44
59
|
scope: 'project',
|
|
45
60
|
optional: true,
|
|
46
|
-
excludeStrategies:
|
|
61
|
+
excludeStrategies: nonPublishableStrategies(),
|
|
47
62
|
},
|
|
48
63
|
{
|
|
49
64
|
kind: 'function',
|
|
@@ -63,6 +78,16 @@ export function aws(options = {}) {
|
|
|
63
78
|
scope: 'project',
|
|
64
79
|
contents: manifest + '\n',
|
|
65
80
|
},
|
|
81
|
+
{
|
|
82
|
+
kind: 'file',
|
|
83
|
+
path: 'customHttp.yml',
|
|
84
|
+
scope: 'project',
|
|
85
|
+
// Amplify reads one `customHttp.yml` per app and a project may
|
|
86
|
+
// already have written its own rules into it. Overwriting that
|
|
87
|
+
// every build would trade one silent header loss for another.
|
|
88
|
+
skipIfExists: true,
|
|
89
|
+
contents: customHttp,
|
|
90
|
+
},
|
|
66
91
|
];
|
|
67
92
|
return {
|
|
68
93
|
name: 'aws',
|
|
@@ -78,7 +103,7 @@ export function aws(options = {}) {
|
|
|
78
103
|
kind: 'static-site',
|
|
79
104
|
path: `${deployRoot}/static`,
|
|
80
105
|
optional: true,
|
|
81
|
-
excludeStrategies:
|
|
106
|
+
excludeStrategies: nonPublishableStrategies(),
|
|
82
107
|
},
|
|
83
108
|
{
|
|
84
109
|
kind: 'function',
|
|
@@ -95,6 +120,11 @@ export function aws(options = {}) {
|
|
|
95
120
|
path: `${deployRoot}/deploy-manifest.json`,
|
|
96
121
|
contents: manifest + '\n',
|
|
97
122
|
},
|
|
123
|
+
{
|
|
124
|
+
kind: 'file',
|
|
125
|
+
path: 'deploy/aws/customHttp.yml',
|
|
126
|
+
contents: customHttp,
|
|
127
|
+
},
|
|
98
128
|
{
|
|
99
129
|
kind: 'file',
|
|
100
130
|
path: 'deploy/aws/README.md',
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAGtC,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,0BAA0B,EAC1B,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,cAAc,CAAA;AAerB,4EAA4E;AAC5E,MAAM,UAAU,GAAG,CAAC,OAAO,GAAsB,EAAE;IACjD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,YAAY,CAAA;IAC/C,MAAM,gBAAgB,GAAG,cAAc,EAAE,CAAA;IAEzC,OAAO;QACL,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;QACpD,KAAK,CAAC,GAAiB;YACrB,oBAAoB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAA;YAEvC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAC7B;gBACE,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE;oBACN;wBACE,IAAI,EAAE,GAAG,oBAAoB,GAAG;wBAChC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,uBAAuB,EAAE;qBAClE;oBACD;wBACE,IAAI,EAAE,MAAM;wBACZ,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,0BAA0B,EAAE;wBACpE,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE;qBAC9C;oBACD;wBACE,IAAI,EAAE,IAAI;wBACV,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE;qBAC5C;iBACF;gBACD,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;gBACzE,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE;aACzD,EACD,IAAI,EACJ,CAAC,CACF,CAAA;YACD,MAAM,YAAY,GAAG,sBAAsB,CAAC;gBAC1C,QAAQ,EAAE,KAAK;gBACf,aAAa,EAAE,kBAAkB,CAAC,GAAG,CAAC;aACvC,CAAC,CAAA;YACF,MAAM,UAAU,GAAG,6BAA6B,CAAA;YAEhD,MAAM,gBAAgB,GACpB,OAAO,CAAC,aAAa,KAAK,KAAK;gBAC7B,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC;oBACE;wBACE,IAAI,EAAE,aAAa;wBACnB,IAAI,EAAE,yBAAyB;wBAC/B,KAAK,EAAE,SAAS;wBAChB,QAAQ,EAAE,IAAI;wBACd,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ruvyxa/adapter-aws",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "Deploy full-stack Ruvyxa applications to AWS Amplify Hosting with native static and Node compute deployment output.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
}
|
|
60
60
|
},
|
|
61
61
|
"dependencies": {
|
|
62
|
-
"@ruvyxa/core": "^1.1.
|
|
62
|
+
"@ruvyxa/core": "^1.1.1"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
65
|
"@types/node": "24.13.3"
|
package/src/index.ts
CHANGED
|
@@ -4,7 +4,9 @@ import type { Adapter, AdapterOutput, BuildContext } from '@ruvyxa/core'
|
|
|
4
4
|
import {
|
|
5
5
|
CLIENT_BUNDLE_PREFIX,
|
|
6
6
|
clientBuildOutput,
|
|
7
|
+
DEFAULT_SECURITY_HEADERS,
|
|
7
8
|
IMMUTABLE_CACHE_CONTROL,
|
|
9
|
+
nonPublishableStrategies,
|
|
8
10
|
PUBLIC_ASSET_CACHE_CONTROL,
|
|
9
11
|
runtimeBuildPolicy,
|
|
10
12
|
standaloneServerSource,
|
|
@@ -60,6 +62,23 @@ export function aws(options: AwsAdapterOptions = {}): Adapter {
|
|
|
60
62
|
null,
|
|
61
63
|
2,
|
|
62
64
|
)
|
|
65
|
+
// Amplify Hosting's custom-header file.
|
|
66
|
+
//
|
|
67
|
+
// The deploy manifest's route targets carry `cacheControl` and nothing
|
|
68
|
+
// else, so it has no place to put the security defaults — and a `Static`
|
|
69
|
+
// target is answered by the CDN, which never invokes the compute
|
|
70
|
+
// resource where the standalone server sets them. That left a deployed
|
|
71
|
+
// pre-rendered page without a single one of them while the identical page
|
|
72
|
+
// from `ruvyxa start` carried all seven. `customHttp.yml` is the
|
|
73
|
+
// mechanism Amplify documents for this, read from the app root.
|
|
74
|
+
const customHttp =
|
|
75
|
+
'customHeaders:\n' +
|
|
76
|
+
` - pattern: '**'\n` +
|
|
77
|
+
' headers:\n' +
|
|
78
|
+
Object.entries(DEFAULT_SECURITY_HEADERS)
|
|
79
|
+
.map(([key, value]) => ` - key: '${key}'\n value: '${value}'\n`)
|
|
80
|
+
.join('')
|
|
81
|
+
|
|
63
82
|
const serverSource = standaloneServerSource({
|
|
64
83
|
isrCache: 'tmp',
|
|
65
84
|
runtimePolicy: runtimeBuildPolicy(ctx),
|
|
@@ -75,7 +94,7 @@ export function aws(options: AwsAdapterOptions = {}): Adapter {
|
|
|
75
94
|
path: '.amplify-hosting/static',
|
|
76
95
|
scope: 'project',
|
|
77
96
|
optional: true,
|
|
78
|
-
excludeStrategies:
|
|
97
|
+
excludeStrategies: nonPublishableStrategies(),
|
|
79
98
|
},
|
|
80
99
|
{
|
|
81
100
|
kind: 'function',
|
|
@@ -95,6 +114,16 @@ export function aws(options: AwsAdapterOptions = {}): Adapter {
|
|
|
95
114
|
scope: 'project',
|
|
96
115
|
contents: manifest + '\n',
|
|
97
116
|
},
|
|
117
|
+
{
|
|
118
|
+
kind: 'file',
|
|
119
|
+
path: 'customHttp.yml',
|
|
120
|
+
scope: 'project',
|
|
121
|
+
// Amplify reads one `customHttp.yml` per app and a project may
|
|
122
|
+
// already have written its own rules into it. Overwriting that
|
|
123
|
+
// every build would trade one silent header loss for another.
|
|
124
|
+
skipIfExists: true,
|
|
125
|
+
contents: customHttp,
|
|
126
|
+
},
|
|
98
127
|
]
|
|
99
128
|
|
|
100
129
|
return {
|
|
@@ -111,7 +140,7 @@ export function aws(options: AwsAdapterOptions = {}): Adapter {
|
|
|
111
140
|
kind: 'static-site',
|
|
112
141
|
path: `${deployRoot}/static`,
|
|
113
142
|
optional: true,
|
|
114
|
-
excludeStrategies:
|
|
143
|
+
excludeStrategies: nonPublishableStrategies(),
|
|
115
144
|
},
|
|
116
145
|
{
|
|
117
146
|
kind: 'function',
|
|
@@ -128,6 +157,11 @@ export function aws(options: AwsAdapterOptions = {}): Adapter {
|
|
|
128
157
|
path: `${deployRoot}/deploy-manifest.json`,
|
|
129
158
|
contents: manifest + '\n',
|
|
130
159
|
},
|
|
160
|
+
{
|
|
161
|
+
kind: 'file',
|
|
162
|
+
path: 'deploy/aws/customHttp.yml',
|
|
163
|
+
contents: customHttp,
|
|
164
|
+
},
|
|
131
165
|
{
|
|
132
166
|
kind: 'file',
|
|
133
167
|
path: 'deploy/aws/README.md',
|