@bleedingdev/modern-js-app-tools-extensions 3.8.3-ultramodern.2
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/LICENSE +21 -0
- package/README.md +5 -0
- package/dist/cjs/cloudflare/artifacts.js +127 -0
- package/dist/cjs/cloudflare/constants.js +141 -0
- package/dist/cjs/cloudflare/delivery-unit.js +161 -0
- package/dist/cjs/cloudflare/i18n-worker.js +135 -0
- package/dist/cjs/cloudflare/index.js +156 -0
- package/dist/cjs/cloudflare/security-policies.js +205 -0
- package/dist/cjs/cloudflare/types.js +18 -0
- package/dist/cjs/cloudflare/utils.js +66 -0
- package/dist/cjs/cloudflare/worker-manifest.js +239 -0
- package/dist/cjs/cloudflare/wrangler-config.js +205 -0
- package/dist/cjs/cloudflare-builder.js +394 -0
- package/dist/cjs/cloudflare-output-contract.js +108 -0
- package/dist/cjs/cloudflare-output-plan.js +93 -0
- package/dist/cjs/cloudflare-output-verifier/identity.js +92 -0
- package/dist/cjs/cloudflare-output-verifier/index.js +188 -0
- package/dist/cjs/cloudflare-output-verifier/issues.js +54 -0
- package/dist/cjs/cloudflare-output-verifier/manifest.js +89 -0
- package/dist/cjs/cloudflare-output-verifier/mutation-policy.js +151 -0
- package/dist/cjs/cloudflare-output-verifier/worker-bundles.js +378 -0
- package/dist/cjs/config.js +18 -0
- package/dist/cjs/css-extract-runtime-plugin.js +74 -0
- package/dist/cjs/index.js +125 -0
- package/dist/cjs/read-template.js +56 -0
- package/dist/cjs/release-envelope/canonical.js +68 -0
- package/dist/cjs/release-envelope/framework-output.js +649 -0
- package/dist/cjs/release-envelope/index.js +399 -0
- package/dist/cjs/release-envelope/plugin.js +102 -0
- package/dist/cjs/release-envelope/types.js +51 -0
- package/dist/cjs/release-identity.js +110 -0
- package/dist/cjs/templates/cloudflare-entry.001-bootstrap-security.mjs +251 -0
- package/dist/cjs/templates/cloudflare-entry.002-assets-routes.mjs +191 -0
- package/dist/cjs/templates/cloudflare-entry.003-i18n-locales.mjs +514 -0
- package/dist/cjs/templates/cloudflare-entry.004-rendering-css.mjs +1194 -0
- package/dist/cjs/templates/cloudflare-entry.005-worker-dispatch.mjs +421 -0
- package/dist/cjs/templates/cloudflare-entry.006-fetch-handler.mjs +93 -0
- package/dist/cjs/templates/cloudflare-worker-fs-promises.mjs +11 -0
- package/dist/cjs/templates/cloudflare-worker-loadable-server.mjs +281 -0
- package/dist/cjs/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs +14 -0
- package/dist/cjs/templates/cloudflare-worker-path.mjs +98 -0
- package/dist/esm/cloudflare/artifacts.mjs +64 -0
- package/dist/esm/cloudflare/constants.mjs +34 -0
- package/dist/esm/cloudflare/delivery-unit.mjs +110 -0
- package/dist/esm/cloudflare/i18n-worker.mjs +97 -0
- package/dist/esm/cloudflare/index.mjs +108 -0
- package/dist/esm/cloudflare/security-policies.mjs +167 -0
- package/dist/esm/cloudflare/types.mjs +0 -0
- package/dist/esm/cloudflare/utils.mjs +12 -0
- package/dist/esm/cloudflare/worker-manifest.mjs +179 -0
- package/dist/esm/cloudflare/wrangler-config.mjs +151 -0
- package/dist/esm/cloudflare-builder.mjs +327 -0
- package/dist/esm/cloudflare-output-contract.mjs +31 -0
- package/dist/esm/cloudflare-output-plan.mjs +45 -0
- package/dist/esm/cloudflare-output-verifier/identity.mjs +54 -0
- package/dist/esm/cloudflare-output-verifier/index.mjs +133 -0
- package/dist/esm/cloudflare-output-verifier/issues.mjs +10 -0
- package/dist/esm/cloudflare-output-verifier/manifest.mjs +51 -0
- package/dist/esm/cloudflare-output-verifier/mutation-policy.mjs +99 -0
- package/dist/esm/cloudflare-output-verifier/worker-bundles.mjs +313 -0
- package/dist/esm/config.mjs +0 -0
- package/dist/esm/css-extract-runtime-plugin.mjs +32 -0
- package/dist/esm/index.mjs +10 -0
- package/dist/esm/read-template.mjs +5 -0
- package/dist/esm/release-envelope/canonical.mjs +21 -0
- package/dist/esm/release-envelope/framework-output.mjs +573 -0
- package/dist/esm/release-envelope/index.mjs +335 -0
- package/dist/esm/release-envelope/plugin.mjs +54 -0
- package/dist/esm/release-envelope/types.mjs +7 -0
- package/dist/esm/release-identity.mjs +66 -0
- package/dist/esm/templates/cloudflare-entry.001-bootstrap-security.mjs +251 -0
- package/dist/esm/templates/cloudflare-entry.002-assets-routes.mjs +191 -0
- package/dist/esm/templates/cloudflare-entry.003-i18n-locales.mjs +514 -0
- package/dist/esm/templates/cloudflare-entry.004-rendering-css.mjs +1194 -0
- package/dist/esm/templates/cloudflare-entry.005-worker-dispatch.mjs +421 -0
- package/dist/esm/templates/cloudflare-entry.006-fetch-handler.mjs +93 -0
- package/dist/esm/templates/cloudflare-worker-fs-promises.mjs +11 -0
- package/dist/esm/templates/cloudflare-worker-loadable-server.mjs +281 -0
- package/dist/esm/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs +14 -0
- package/dist/esm/templates/cloudflare-worker-path.mjs +98 -0
- package/dist/esm-node/cloudflare/artifacts.mjs +65 -0
- package/dist/esm-node/cloudflare/constants.mjs +35 -0
- package/dist/esm-node/cloudflare/delivery-unit.mjs +111 -0
- package/dist/esm-node/cloudflare/i18n-worker.mjs +98 -0
- package/dist/esm-node/cloudflare/index.mjs +109 -0
- package/dist/esm-node/cloudflare/security-policies.mjs +168 -0
- package/dist/esm-node/cloudflare/types.mjs +1 -0
- package/dist/esm-node/cloudflare/utils.mjs +13 -0
- package/dist/esm-node/cloudflare/worker-manifest.mjs +180 -0
- package/dist/esm-node/cloudflare/wrangler-config.mjs +152 -0
- package/dist/esm-node/cloudflare-builder.mjs +328 -0
- package/dist/esm-node/cloudflare-output-contract.mjs +32 -0
- package/dist/esm-node/cloudflare-output-plan.mjs +46 -0
- package/dist/esm-node/cloudflare-output-verifier/identity.mjs +55 -0
- package/dist/esm-node/cloudflare-output-verifier/index.mjs +134 -0
- package/dist/esm-node/cloudflare-output-verifier/issues.mjs +11 -0
- package/dist/esm-node/cloudflare-output-verifier/manifest.mjs +52 -0
- package/dist/esm-node/cloudflare-output-verifier/mutation-policy.mjs +100 -0
- package/dist/esm-node/cloudflare-output-verifier/worker-bundles.mjs +314 -0
- package/dist/esm-node/config.mjs +1 -0
- package/dist/esm-node/css-extract-runtime-plugin.mjs +33 -0
- package/dist/esm-node/index.mjs +11 -0
- package/dist/esm-node/read-template.mjs +9 -0
- package/dist/esm-node/release-envelope/canonical.mjs +22 -0
- package/dist/esm-node/release-envelope/framework-output.mjs +574 -0
- package/dist/esm-node/release-envelope/index.mjs +336 -0
- package/dist/esm-node/release-envelope/plugin.mjs +55 -0
- package/dist/esm-node/release-envelope/types.mjs +8 -0
- package/dist/esm-node/release-identity.mjs +67 -0
- package/dist/esm-node/templates/cloudflare-entry.001-bootstrap-security.mjs +251 -0
- package/dist/esm-node/templates/cloudflare-entry.002-assets-routes.mjs +191 -0
- package/dist/esm-node/templates/cloudflare-entry.003-i18n-locales.mjs +514 -0
- package/dist/esm-node/templates/cloudflare-entry.004-rendering-css.mjs +1194 -0
- package/dist/esm-node/templates/cloudflare-entry.005-worker-dispatch.mjs +421 -0
- package/dist/esm-node/templates/cloudflare-entry.006-fetch-handler.mjs +93 -0
- package/dist/esm-node/templates/cloudflare-worker-fs-promises.mjs +11 -0
- package/dist/esm-node/templates/cloudflare-worker-loadable-server.mjs +281 -0
- package/dist/esm-node/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs +14 -0
- package/dist/esm-node/templates/cloudflare-worker-path.mjs +98 -0
- package/dist/types/cloudflare/artifacts.d.ts +15 -0
- package/dist/types/cloudflare/constants.d.ts +24 -0
- package/dist/types/cloudflare/delivery-unit.d.ts +23 -0
- package/dist/types/cloudflare/i18n-worker.d.ts +22 -0
- package/dist/types/cloudflare/index.d.ts +2 -0
- package/dist/types/cloudflare/security-policies.d.ts +52 -0
- package/dist/types/cloudflare/types.d.ts +28 -0
- package/dist/types/cloudflare/utils.d.ts +6 -0
- package/dist/types/cloudflare/worker-manifest.d.ts +149 -0
- package/dist/types/cloudflare/wrangler-config.d.ts +51 -0
- package/dist/types/cloudflare-builder.d.ts +59 -0
- package/dist/types/cloudflare-output-contract.d.ts +14 -0
- package/dist/types/cloudflare-output-plan.d.ts +34 -0
- package/dist/types/cloudflare-output-verifier/identity.d.ts +8 -0
- package/dist/types/cloudflare-output-verifier/index.d.ts +18 -0
- package/dist/types/cloudflare-output-verifier/issues.d.ts +14 -0
- package/dist/types/cloudflare-output-verifier/manifest.d.ts +2 -0
- package/dist/types/cloudflare-output-verifier/mutation-policy.d.ts +14 -0
- package/dist/types/cloudflare-output-verifier/worker-bundles.d.ts +20 -0
- package/dist/types/config.d.ts +175 -0
- package/dist/types/css-extract-runtime-plugin.d.ts +6 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/read-template.d.ts +2 -0
- package/dist/types/release-envelope/canonical.d.ts +5 -0
- package/dist/types/release-envelope/framework-output.d.ts +32 -0
- package/dist/types/release-envelope/index.d.ts +6 -0
- package/dist/types/release-envelope/plugin.d.ts +30 -0
- package/dist/types/release-envelope/types.d.ts +62 -0
- package/dist/types/release-identity.d.ts +16 -0
- package/dist/types/templates/cloudflare-entry.001-bootstrap-security.d.mts +1 -0
- package/dist/types/templates/cloudflare-entry.002-assets-routes.d.mts +1 -0
- package/dist/types/templates/cloudflare-entry.003-i18n-locales.d.mts +1 -0
- package/dist/types/templates/cloudflare-entry.004-rendering-css.d.mts +1 -0
- package/dist/types/templates/cloudflare-entry.005-worker-dispatch.d.mts +1 -0
- package/dist/types/templates/cloudflare-entry.006-fetch-handler.d.mts +4 -0
- package/dist/types/templates/cloudflare-worker-fs-promises.d.mts +5 -0
- package/dist/types/templates/cloudflare-worker-loadable-server.d.mts +48 -0
- package/dist/types/templates/cloudflare-worker-mf-ssr-runtime-plugin.d.mts +13 -0
- package/dist/types/templates/cloudflare-worker-path.d.mts +21 -0
- package/package.json +131 -0
- package/src/cloudflare/artifacts.ts +165 -0
- package/src/cloudflare/constants.ts +50 -0
- package/src/cloudflare/delivery-unit.ts +195 -0
- package/src/cloudflare/i18n-worker.ts +197 -0
- package/src/cloudflare/index.ts +259 -0
- package/src/cloudflare/security-policies.ts +194 -0
- package/src/cloudflare/types.ts +33 -0
- package/src/cloudflare/utils.ts +40 -0
- package/src/cloudflare/worker-manifest.ts +313 -0
- package/src/cloudflare/wrangler-config.ts +338 -0
- package/src/cloudflare-builder.ts +653 -0
- package/src/cloudflare-output-contract.ts +30 -0
- package/src/cloudflare-output-plan.ts +108 -0
- package/src/cloudflare-output-verifier/identity.ts +87 -0
- package/src/cloudflare-output-verifier/index.ts +277 -0
- package/src/cloudflare-output-verifier/issues.ts +54 -0
- package/src/cloudflare-output-verifier/manifest.ts +76 -0
- package/src/cloudflare-output-verifier/mutation-policy.ts +159 -0
- package/src/cloudflare-output-verifier/worker-bundles.ts +664 -0
- package/src/config.ts +196 -0
- package/src/css-extract-runtime-plugin.ts +70 -0
- package/src/index.ts +10 -0
- package/src/read-template.ts +8 -0
- package/src/release-envelope/canonical.ts +58 -0
- package/src/release-envelope/framework-output.ts +1121 -0
- package/src/release-envelope/index.ts +656 -0
- package/src/release-envelope/plugin.ts +125 -0
- package/src/release-envelope/types.ts +83 -0
- package/src/release-identity.ts +134 -0
- package/src/templates/cloudflare-entry.001-bootstrap-security.mjs +251 -0
- package/src/templates/cloudflare-entry.002-assets-routes.mjs +191 -0
- package/src/templates/cloudflare-entry.003-i18n-locales.mjs +514 -0
- package/src/templates/cloudflare-entry.004-rendering-css.mjs +1194 -0
- package/src/templates/cloudflare-entry.005-worker-dispatch.mjs +421 -0
- package/src/templates/cloudflare-entry.006-fetch-handler.mjs +93 -0
- package/src/templates/cloudflare-worker-fs-promises.mjs +11 -0
- package/src/templates/cloudflare-worker-loadable-server.mjs +281 -0
- package/src/templates/cloudflare-worker-mf-ssr-runtime-plugin.mjs +14 -0
- package/src/templates/cloudflare-worker-path.mjs +98 -0
package/src/config.ts
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
export type DeployTarget =
|
|
2
|
+
| 'node'
|
|
3
|
+
| 'vercel'
|
|
4
|
+
| 'netlify'
|
|
5
|
+
| 'ghPages'
|
|
6
|
+
| 'cloudflare';
|
|
7
|
+
|
|
8
|
+
export type CloudflareWorkerSecurityCspMode = 'enforce' | 'report-only' | 'off';
|
|
9
|
+
|
|
10
|
+
export type JsonValue =
|
|
11
|
+
| string
|
|
12
|
+
| number
|
|
13
|
+
| boolean
|
|
14
|
+
| null
|
|
15
|
+
| JsonValue[]
|
|
16
|
+
| { [key: string]: JsonValue };
|
|
17
|
+
|
|
18
|
+
export interface CloudflareWorkerArtifactConfig {
|
|
19
|
+
/**
|
|
20
|
+
* Source file or directory, relative to the app root, to copy into
|
|
21
|
+
* `.output` after framework output has been staged.
|
|
22
|
+
*/
|
|
23
|
+
from: string;
|
|
24
|
+
/**
|
|
25
|
+
* Destination path relative to `.output`.
|
|
26
|
+
*/
|
|
27
|
+
to: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface CloudflareWorkerPublicAssetConfig {
|
|
31
|
+
/**
|
|
32
|
+
* Source file or directory, relative to the app root, to copy into
|
|
33
|
+
* Cloudflare Worker Static Assets.
|
|
34
|
+
*/
|
|
35
|
+
from: string;
|
|
36
|
+
/**
|
|
37
|
+
* Destination path relative to `.output/public`.
|
|
38
|
+
*/
|
|
39
|
+
to: string;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface CloudflareWorkerD1DatabaseConfig {
|
|
43
|
+
/**
|
|
44
|
+
* Worker binding name, for example `DB`.
|
|
45
|
+
*/
|
|
46
|
+
binding: string;
|
|
47
|
+
/**
|
|
48
|
+
* Cloudflare D1 database name.
|
|
49
|
+
*/
|
|
50
|
+
databaseName: string;
|
|
51
|
+
/**
|
|
52
|
+
* Cloudflare D1 database id.
|
|
53
|
+
*/
|
|
54
|
+
databaseId: string;
|
|
55
|
+
/**
|
|
56
|
+
* Optional local migrations directory, relative to the app root. When set,
|
|
57
|
+
* Modern.js stages it into `.output` and points Wrangler at the staged copy.
|
|
58
|
+
*/
|
|
59
|
+
migrationsDir?: string;
|
|
60
|
+
/**
|
|
61
|
+
* Optional preview database id used by Wrangler preview/local flows.
|
|
62
|
+
*/
|
|
63
|
+
previewDatabaseId?: string;
|
|
64
|
+
/**
|
|
65
|
+
* Wrangler remote flag for D1 commands.
|
|
66
|
+
*/
|
|
67
|
+
remote?: boolean;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export interface CloudflareWorkerServiceBindingConfig {
|
|
71
|
+
/** Worker binding name exposed on the module worker `env` object. */
|
|
72
|
+
binding: string;
|
|
73
|
+
/** Target Cloudflare Worker service name. */
|
|
74
|
+
service: string;
|
|
75
|
+
/**
|
|
76
|
+
* Optional application path prefix that Modern.js should dispatch to this
|
|
77
|
+
* service binding with `env[binding].fetch(request)`.
|
|
78
|
+
*/
|
|
79
|
+
prefix?: string;
|
|
80
|
+
/**
|
|
81
|
+
* Server-rendered Module Federation fragments exposed by this Worker.
|
|
82
|
+
* These fields are written to the Modern.js worker manifest, but stripped
|
|
83
|
+
* from Wrangler's `services` entries.
|
|
84
|
+
*/
|
|
85
|
+
fragments?: CloudflareWorkerServiceBindingFragmentConfig[];
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export interface CloudflareWorkerServiceBindingFragmentConfig {
|
|
89
|
+
/** Stable remote id used by the shell's composition contract. */
|
|
90
|
+
remote: string;
|
|
91
|
+
/** Module Federation expose rendered by the fragment route. */
|
|
92
|
+
expose: string;
|
|
93
|
+
/** Expected boundary marker in the rendered fragment HTML. */
|
|
94
|
+
boundaryId: string;
|
|
95
|
+
/**
|
|
96
|
+
* Route path on the bound Worker. `{locale}` is replaced with the first
|
|
97
|
+
* locale segment from the incoming shell request.
|
|
98
|
+
*/
|
|
99
|
+
path: string;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export interface CloudflareWorkerSecurityCspConfig {
|
|
103
|
+
mode?: CloudflareWorkerSecurityCspMode;
|
|
104
|
+
directives?: Record<string, string[] | string | false>;
|
|
105
|
+
additionalScriptSrc?: string[];
|
|
106
|
+
additionalStyleSrc?: string[];
|
|
107
|
+
additionalConnectSrc?: string[];
|
|
108
|
+
additionalImgSrc?: string[];
|
|
109
|
+
frameAncestors?: string[] | false;
|
|
110
|
+
reportUri?: string;
|
|
111
|
+
reason?: string;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export interface CloudflareWorkerSecurityNoindexConfig {
|
|
115
|
+
workersDev?: boolean;
|
|
116
|
+
localhost?: boolean;
|
|
117
|
+
previewHostnames?: string[];
|
|
118
|
+
reason?: string;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export interface CloudflareWorkerSecurityCorsConfig {
|
|
122
|
+
/**
|
|
123
|
+
* Origins allowed to read application responses (BFF APIs, SSR HTML,
|
|
124
|
+
* route fallbacks) cross-origin. Accepts exact origins
|
|
125
|
+
* (e.g. `https://shell.example.com`) or `'*'`.
|
|
126
|
+
* When empty, application responses carry no CORS headers (same-origin).
|
|
127
|
+
* @default []
|
|
128
|
+
*/
|
|
129
|
+
allowedOrigins?: string[];
|
|
130
|
+
/**
|
|
131
|
+
* Methods advertised on CORS preflight responses for application routes.
|
|
132
|
+
* @default ['GET', 'HEAD', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS']
|
|
133
|
+
*/
|
|
134
|
+
allowedMethods?: string[];
|
|
135
|
+
/**
|
|
136
|
+
* Headers advertised on CORS preflight responses for application routes.
|
|
137
|
+
* @default ['*']
|
|
138
|
+
*/
|
|
139
|
+
allowedHeaders?: string[];
|
|
140
|
+
/**
|
|
141
|
+
* Apply wildcard CORS to static asset responses so federated remotes
|
|
142
|
+
* (remote entries, manifests, CSS) can be loaded cross-origin.
|
|
143
|
+
* @default true
|
|
144
|
+
*/
|
|
145
|
+
assets?: boolean;
|
|
146
|
+
reason?: string;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export interface CloudflareWorkerSecurityConfig {
|
|
150
|
+
/**
|
|
151
|
+
* Disable all Cloudflare worker security defaults for this app.
|
|
152
|
+
* Prefer narrower escape hatches when possible.
|
|
153
|
+
*/
|
|
154
|
+
enabled?: boolean;
|
|
155
|
+
headers?: {
|
|
156
|
+
referrerPolicy?: string | false;
|
|
157
|
+
contentTypeOptions?: 'nosniff' | false;
|
|
158
|
+
permissionsPolicy?: string | false;
|
|
159
|
+
};
|
|
160
|
+
contentSecurityPolicy?: CloudflareWorkerSecurityCspConfig;
|
|
161
|
+
noindex?: boolean | CloudflareWorkerSecurityNoindexConfig;
|
|
162
|
+
/**
|
|
163
|
+
* Cross-origin resource sharing policy applied by the generated worker.
|
|
164
|
+
* Asset responses default to wildcard CORS for federated loading;
|
|
165
|
+
* application responses (BFF, SSR) default to no CORS headers.
|
|
166
|
+
*/
|
|
167
|
+
cors?: CloudflareWorkerSecurityCorsConfig;
|
|
168
|
+
/**
|
|
169
|
+
* @deprecated Write-only: this option never had any runtime effect — the
|
|
170
|
+
* generated worker never mutates application `Set-Cookie` headers.
|
|
171
|
+
* Kept temporarily so configs emitted by existing `modern create`
|
|
172
|
+
* templates keep typechecking; will be removed once the generator stops
|
|
173
|
+
* emitting it. Use {@link CloudflareWorkerSecurityConfig.cors} for the
|
|
174
|
+
* worker's cross-origin policy.
|
|
175
|
+
*/
|
|
176
|
+
cookies?: {
|
|
177
|
+
mutateSetCookie?: false;
|
|
178
|
+
reason?: string;
|
|
179
|
+
};
|
|
180
|
+
reason?: string;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export interface CloudflareDeployConfig {
|
|
184
|
+
worker?: {
|
|
185
|
+
name?: string;
|
|
186
|
+
compatibilityDate?: string;
|
|
187
|
+
ssr?: boolean;
|
|
188
|
+
security?: CloudflareWorkerSecurityConfig;
|
|
189
|
+
wrangler?: Record<string, JsonValue>;
|
|
190
|
+
artifacts?: CloudflareWorkerArtifactConfig[];
|
|
191
|
+
publicAssets?: CloudflareWorkerPublicAssetConfig[];
|
|
192
|
+
d1Databases?: CloudflareWorkerD1DatabaseConfig[];
|
|
193
|
+
services?: CloudflareWorkerServiceBindingConfig[];
|
|
194
|
+
publicAssetExcludes?: string[];
|
|
195
|
+
};
|
|
196
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { Rspack } from '@rsbuild/core';
|
|
2
|
+
|
|
3
|
+
const PLUGIN_NAME = 'ModernjsCssExtractRuntimePlugin';
|
|
4
|
+
const CSS_LOADING_RUNTIME_MODULE = 'webpack/runtime/css loading';
|
|
5
|
+
const CSS_EXTRACT_STYLESHEET_MATCH =
|
|
6
|
+
'\t\tif (tag.rel === "stylesheet" && (dataHref === href || dataHref === fullhref)) return tag;';
|
|
7
|
+
const CSS_EXTRACT_STYLESHEET_MATCH_WITH_NORMALIZED_URL = `\t\tvar absoluteHref = tag.href;
|
|
8
|
+
\t\tvar absoluteFullHref = new URL(fullhref, document.baseURI).href;
|
|
9
|
+
\t\tif (tag.rel === "stylesheet" && (dataHref === href || dataHref === fullhref || absoluteHref === absoluteFullHref)) return tag;`;
|
|
10
|
+
|
|
11
|
+
const isAutomaticPublicPath = (publicPath: unknown) =>
|
|
12
|
+
publicPath === 'auto' || publicPath === 'auto/';
|
|
13
|
+
|
|
14
|
+
export const normalizeCssExtractRuntimeStylesheetLookup = (
|
|
15
|
+
source: string,
|
|
16
|
+
): string => {
|
|
17
|
+
// CssExtractRspackPlugin concatenates automatic public paths and CSS asset
|
|
18
|
+
// names as strings. A path such as `/static/js/../../static/css/lazy.css`
|
|
19
|
+
// is browser-equivalent to the SSR link `/static/css/lazy.css`, but its
|
|
20
|
+
// runtime lookup compares the two raw strings and inserts a duplicate link.
|
|
21
|
+
// Compare the complete resolved URLs as well, while preserving the upstream
|
|
22
|
+
// raw `data-href` and `href` matching behaviour. Query strings remain part
|
|
23
|
+
// of canonical identity so a newly versioned stylesheet is never suppressed.
|
|
24
|
+
if (!source.includes('__webpack_require__.miniCssF')) {
|
|
25
|
+
return source;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const occurrences = source.split(CSS_EXTRACT_STYLESHEET_MATCH).length - 1;
|
|
29
|
+
if (occurrences !== 1) {
|
|
30
|
+
throw new Error(
|
|
31
|
+
`Unsupported CssExtractRspackPlugin runtime shape: expected one stylesheet lookup, found ${occurrences}.`,
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return source.replace(
|
|
36
|
+
CSS_EXTRACT_STYLESHEET_MATCH,
|
|
37
|
+
CSS_EXTRACT_STYLESHEET_MATCH_WITH_NORMALIZED_URL,
|
|
38
|
+
);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export class CssExtractRuntimePlugin {
|
|
42
|
+
readonly name = PLUGIN_NAME;
|
|
43
|
+
|
|
44
|
+
apply(compiler: Rspack.Compiler) {
|
|
45
|
+
if (!isAutomaticPublicPath(compiler.options.output.publicPath)) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
compiler.hooks.thisCompilation.tap(PLUGIN_NAME, compilation => {
|
|
50
|
+
compilation.hooks.runtimeModule.tap(PLUGIN_NAME, runtimeModule => {
|
|
51
|
+
if (runtimeModule.identifier() !== CSS_LOADING_RUNTIME_MODULE) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const source = runtimeModule.source;
|
|
56
|
+
if (!source) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const runtimeSource = source.source;
|
|
61
|
+
if (typeof runtimeSource !== 'string') {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
source.source =
|
|
66
|
+
normalizeCssExtractRuntimeStylesheetLookup(runtimeSource);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './cloudflare';
|
|
2
|
+
export * from './cloudflare-builder';
|
|
3
|
+
export * from './cloudflare-output-contract';
|
|
4
|
+
export * from './cloudflare-output-plan';
|
|
5
|
+
export * from './cloudflare-output-verifier';
|
|
6
|
+
export * from './config';
|
|
7
|
+
export * from './css-extract-runtime-plugin';
|
|
8
|
+
export * from './release-envelope';
|
|
9
|
+
export * from './release-envelope/plugin';
|
|
10
|
+
export * from './release-identity';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { fs as fse } from '@modern-js/utils';
|
|
3
|
+
|
|
4
|
+
export const getTemplatePath = (file: string) =>
|
|
5
|
+
path.join(__dirname, 'templates', file);
|
|
6
|
+
|
|
7
|
+
export const readTemplate = async (file: string) =>
|
|
8
|
+
(await fse.readFile(getTemplatePath(file))).toString();
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import type {
|
|
3
|
+
MicroVerticalReleaseEnvelope,
|
|
4
|
+
MicroVerticalReleaseEnvelopePayload,
|
|
5
|
+
} from './types';
|
|
6
|
+
|
|
7
|
+
type CanonicalValue =
|
|
8
|
+
| null
|
|
9
|
+
| boolean
|
|
10
|
+
| number
|
|
11
|
+
| string
|
|
12
|
+
| CanonicalValue[]
|
|
13
|
+
| { [key: string]: CanonicalValue };
|
|
14
|
+
|
|
15
|
+
const serializeCanonicalValue = (value: CanonicalValue): string => {
|
|
16
|
+
if (value === null || typeof value !== 'object') {
|
|
17
|
+
if (typeof value === 'number' && !Number.isFinite(value)) {
|
|
18
|
+
throw new Error('Canonical release-envelope values must be finite.');
|
|
19
|
+
}
|
|
20
|
+
return JSON.stringify(value);
|
|
21
|
+
}
|
|
22
|
+
if (Array.isArray(value)) {
|
|
23
|
+
return `[${value.map(serializeCanonicalValue).join(',')}]`;
|
|
24
|
+
}
|
|
25
|
+
return `{${Object.keys(value)
|
|
26
|
+
.sort()
|
|
27
|
+
.map(
|
|
28
|
+
key =>
|
|
29
|
+
`${JSON.stringify(key)}:${serializeCanonicalValue(value[key] as CanonicalValue)}`,
|
|
30
|
+
)
|
|
31
|
+
.join(',')}}`;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export const releaseEnvelopePayload = (
|
|
35
|
+
envelope: MicroVerticalReleaseEnvelope,
|
|
36
|
+
): MicroVerticalReleaseEnvelopePayload => ({
|
|
37
|
+
schemaVersion: envelope.schemaVersion,
|
|
38
|
+
kind: envelope.kind,
|
|
39
|
+
target: envelope.target,
|
|
40
|
+
identity: envelope.identity,
|
|
41
|
+
artifacts: envelope.artifacts,
|
|
42
|
+
surfaces: envelope.surfaces,
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
export const canonicalSerializeMicroVerticalReleaseEnvelopePayload = (
|
|
46
|
+
payload: MicroVerticalReleaseEnvelopePayload,
|
|
47
|
+
) => serializeCanonicalValue(payload as unknown as CanonicalValue);
|
|
48
|
+
|
|
49
|
+
export const canonicalSerializeMicroVerticalReleaseEnvelope = (
|
|
50
|
+
envelope: MicroVerticalReleaseEnvelope,
|
|
51
|
+
) => serializeCanonicalValue(envelope as unknown as CanonicalValue);
|
|
52
|
+
|
|
53
|
+
export const digestMicroVerticalReleaseEnvelopePayload = (
|
|
54
|
+
payload: MicroVerticalReleaseEnvelopePayload,
|
|
55
|
+
) =>
|
|
56
|
+
createHash('sha256')
|
|
57
|
+
.update(canonicalSerializeMicroVerticalReleaseEnvelopePayload(payload))
|
|
58
|
+
.digest('hex');
|