@bleedingdev/modern-js-create 3.4.0-ultramodern.2 → 3.4.0-ultramodern.20
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 +13 -11
- package/dist/cjs/index.cjs +37 -4
- package/dist/cjs/locale/en.cjs +12 -2
- package/dist/cjs/locale/zh.cjs +12 -2
- package/dist/cjs/ultramodern-tooling/commands.cjs +185 -0
- package/dist/cjs/ultramodern-tooling/config.cjs +172 -0
- package/dist/cjs/ultramodern-workspace/add-vertical.cjs +79 -61
- package/dist/cjs/ultramodern-workspace/bridge-config.cjs +327 -0
- package/dist/cjs/ultramodern-workspace/codesmith.cjs +1 -0
- package/dist/cjs/ultramodern-workspace/contracts.cjs +121 -648
- package/dist/cjs/ultramodern-workspace/demo-components.cjs +26 -33
- package/dist/cjs/ultramodern-workspace/descriptors.cjs +4 -4
- package/dist/cjs/ultramodern-workspace/effect-api.cjs +230 -100
- package/dist/cjs/ultramodern-workspace/fs-io.cjs +117 -0
- package/dist/cjs/ultramodern-workspace/generation-result.cjs +1 -1
- package/dist/cjs/ultramodern-workspace/index.cjs +4 -0
- package/dist/cjs/ultramodern-workspace/mf-validation.cjs +571 -0
- package/dist/cjs/ultramodern-workspace/module-federation.cjs +51 -20
- package/dist/cjs/ultramodern-workspace/package-json.cjs +62 -19
- package/dist/cjs/ultramodern-workspace/policy.cjs +2 -2
- package/dist/cjs/ultramodern-workspace/public-api.cjs +4 -0
- package/dist/cjs/ultramodern-workspace/versions.cjs +5 -0
- package/dist/cjs/ultramodern-workspace/workspace-scripts.cjs +80 -43
- package/dist/cjs/ultramodern-workspace/write-workspace.cjs +63 -20
- package/dist/esm/index.js +37 -4
- package/dist/esm/locale/en.js +12 -2
- package/dist/esm/locale/zh.js +12 -2
- package/dist/esm/ultramodern-tooling/commands.js +132 -0
- package/dist/esm/ultramodern-tooling/config.js +120 -0
- package/dist/esm/ultramodern-workspace/add-vertical.js +81 -66
- package/dist/esm/ultramodern-workspace/bridge-config.js +270 -0
- package/dist/esm/ultramodern-workspace/codesmith.js +1 -0
- package/dist/esm/ultramodern-workspace/contracts.js +124 -603
- package/dist/esm/ultramodern-workspace/demo-components.js +26 -33
- package/dist/esm/ultramodern-workspace/descriptors.js +2 -2
- package/dist/esm/ultramodern-workspace/effect-api.js +230 -100
- package/dist/esm/ultramodern-workspace/fs-io.js +116 -2
- package/dist/esm/ultramodern-workspace/generation-result.js +2 -2
- package/dist/esm/ultramodern-workspace/index.js +1 -0
- package/dist/esm/ultramodern-workspace/mf-validation.js +516 -0
- package/dist/esm/ultramodern-workspace/module-federation.js +49 -21
- package/dist/esm/ultramodern-workspace/package-json.js +60 -20
- package/dist/esm/ultramodern-workspace/policy.js +2 -2
- package/dist/esm/ultramodern-workspace/public-api.js +1 -0
- package/dist/esm/ultramodern-workspace/versions.js +3 -1
- package/dist/esm/ultramodern-workspace/workspace-scripts.js +78 -26
- package/dist/esm/ultramodern-workspace/write-workspace.js +67 -27
- package/dist/esm-node/index.js +37 -4
- package/dist/esm-node/locale/en.js +12 -2
- package/dist/esm-node/locale/zh.js +12 -2
- package/dist/esm-node/ultramodern-tooling/commands.js +133 -0
- package/dist/esm-node/ultramodern-tooling/config.js +121 -0
- package/dist/esm-node/ultramodern-workspace/add-vertical.js +81 -66
- package/dist/esm-node/ultramodern-workspace/bridge-config.js +271 -0
- package/dist/esm-node/ultramodern-workspace/codesmith.js +1 -0
- package/dist/esm-node/ultramodern-workspace/contracts.js +124 -603
- package/dist/esm-node/ultramodern-workspace/demo-components.js +26 -33
- package/dist/esm-node/ultramodern-workspace/descriptors.js +2 -2
- package/dist/esm-node/ultramodern-workspace/effect-api.js +230 -100
- package/dist/esm-node/ultramodern-workspace/fs-io.js +116 -2
- package/dist/esm-node/ultramodern-workspace/generation-result.js +2 -2
- package/dist/esm-node/ultramodern-workspace/index.js +1 -0
- package/dist/esm-node/ultramodern-workspace/mf-validation.js +517 -0
- package/dist/esm-node/ultramodern-workspace/module-federation.js +49 -21
- package/dist/esm-node/ultramodern-workspace/package-json.js +60 -20
- package/dist/esm-node/ultramodern-workspace/policy.js +2 -2
- package/dist/esm-node/ultramodern-workspace/public-api.js +1 -0
- package/dist/esm-node/ultramodern-workspace/versions.js +3 -1
- package/dist/esm-node/ultramodern-workspace/workspace-scripts.js +78 -26
- package/dist/esm-node/ultramodern-workspace/write-workspace.js +67 -27
- package/dist/types/locale/en.d.ts +10 -0
- package/dist/types/locale/index.d.ts +20 -0
- package/dist/types/locale/zh.d.ts +10 -0
- package/dist/types/ultramodern-tooling/commands.d.ts +1 -0
- package/dist/types/ultramodern-tooling/config.d.ts +43 -0
- package/dist/types/ultramodern-workspace/add-vertical.d.ts +5 -2
- package/dist/types/ultramodern-workspace/bridge-config.d.ts +64 -0
- package/dist/types/ultramodern-workspace/codesmith.d.ts +1 -0
- package/dist/types/ultramodern-workspace/contracts.d.ts +2 -17
- package/dist/types/ultramodern-workspace/descriptors.d.ts +1 -1
- package/dist/types/ultramodern-workspace/fs-io.d.ts +1 -0
- package/dist/types/ultramodern-workspace/index.d.ts +2 -0
- package/dist/types/ultramodern-workspace/mf-validation.d.ts +27 -0
- package/dist/types/ultramodern-workspace/module-federation.d.ts +1 -0
- package/dist/types/ultramodern-workspace/package-json.d.ts +5 -3
- package/dist/types/ultramodern-workspace/public-api.d.ts +2 -0
- package/dist/types/ultramodern-workspace/types.d.ts +2 -0
- package/dist/types/ultramodern-workspace/versions.d.ts +2 -0
- package/dist/types/ultramodern-workspace/workspace-scripts.d.ts +2 -7
- package/dist/types/ultramodern-workspace/write-workspace.d.ts +4 -2
- package/package.json +5 -3
- package/template-workspace/{.agents → .codex}/skills-lock.json +12 -12
- package/template-workspace/.gitignore.handlebars +3 -0
- package/template-workspace/AGENTS.md.handlebars +11 -5
- package/template-workspace/README.md.handlebars +15 -12
- package/template-workspace/oxfmt.config.ts +1 -0
- package/template-workspace/oxlint.config.ts +1 -0
- package/template-workspace/patches/@tanstack__router-core@1.171.13.patch +51 -0
- package/template-workspace/pnpm-workspace.yaml.handlebars +12 -0
- package/template-workspace/scripts/bootstrap-agent-skills.mjs +96 -69
- package/templates/app/shell-frame.tsx +1 -2
- package/templates/app/ultramodern-route-head.tsx.handlebars +5 -6
- package/templates/workspace-scripts/assert-mf-types.mjs.handlebars +59 -7
- package/templates/workspace-scripts/check-ultramodern-api-boundaries.mjs +339 -0
- package/templates/workspace-scripts/generate-public-surface-assets.mjs +245 -8
- package/templates/workspace-scripts/proof-cloudflare-version.mjs +276 -8
- package/templates/workspace-scripts/ultramodern-cloudflare-proof.mjs +35 -10
- package/templates/workspace-scripts/ultramodern-performance-readiness.mjs +164 -1
- package/templates/workspace-scripts/ultramodern-typecheck.mjs +4 -2
- package/templates/workspace-scripts/validate-ultramodern-workspace.mjs.handlebars +949 -63
- /package/template-workspace/{.agents → .codex}/rstackjs-agent-skills-LICENSE +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rsbuild-best-practices/SKILL.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/SKILL.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/command-map.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/common-analysis-patterns.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/install-rsdoctor-common.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/install-rsdoctor-rspack.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/install-rsdoctor-webpack.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/install-rsdoctor.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/rsdoctor-data-types.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rslib-best-practices/SKILL.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rslib-modern-package/SKILL.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rspack-best-practices/SKILL.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rspack-tracing/SKILL.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rspack-tracing/references/bottlenecks.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rspack-tracing/references/tracing-guide.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rspack-tracing/scripts/analyze_trace.js +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rstest-best-practices/SKILL.md +0 -0
|
@@ -49,8 +49,7 @@ import { VerticalShowcase } from '../vertical-components';
|
|
|
49
49
|
import { ultramodernUiMarker } from '../../ultramodern-build';
|
|
50
50
|
|
|
51
51
|
export default function ShellHome() {
|
|
52
|
-
const {
|
|
53
|
-
const t = i18nInstance['t'].bind(i18nInstance);
|
|
52
|
+
const { t } = useModernI18n();
|
|
54
53
|
|
|
55
54
|
return (
|
|
56
55
|
<ShellFrame>
|
|
@@ -123,13 +122,14 @@ const loadRemoteComponent = (specifier: string) =>
|
|
|
123
122
|
|
|
124
123
|
const createRemoteFallback = (specifier: string) =>
|
|
125
124
|
({ error }: { error: Error }) => {
|
|
126
|
-
const {
|
|
127
|
-
const t = i18nInstance['t'].bind(i18nInstance);
|
|
125
|
+
const { t } = useModernI18n();
|
|
128
126
|
const classification = classifyModuleFederationFallback(error);
|
|
127
|
+
const telemetryEntry =
|
|
128
|
+
typeof window === 'undefined' ? undefined : window.location.href;
|
|
129
129
|
const telemetry = createModuleFederationFallbackTelemetry({
|
|
130
130
|
appName: '${external_descriptors_cjs_namespaceObject.shellApp.id}',
|
|
131
131
|
classification,
|
|
132
|
-
|
|
132
|
+
...(telemetryEntry === undefined ? {} : { entry: telemetryEntry }),
|
|
133
133
|
error,
|
|
134
134
|
eventName: 'mf.client.remote.fallback',
|
|
135
135
|
exportName: 'default',
|
|
@@ -142,7 +142,7 @@ const createRemoteFallback = (specifier: string) =>
|
|
|
142
142
|
void emitModuleFederationFallbackTelemetry({
|
|
143
143
|
appName: telemetry.appName,
|
|
144
144
|
classification,
|
|
145
|
-
entry: telemetry.entry,
|
|
145
|
+
...(telemetry.entry === undefined ? {} : { entry: telemetry.entry }),
|
|
146
146
|
error,
|
|
147
147
|
eventName: telemetry.eventName,
|
|
148
148
|
exportName: 'default',
|
|
@@ -151,7 +151,7 @@ const createRemoteFallback = (specifier: string) =>
|
|
|
151
151
|
remote: specifier,
|
|
152
152
|
status: 'degraded',
|
|
153
153
|
});
|
|
154
|
-
}, [classification, error,
|
|
154
|
+
}, [classification, error, telemetry]);
|
|
155
155
|
|
|
156
156
|
return <div className="${tw('rounded-xl border border-red-900/20 bg-red-50 px-4 py-3 text-sm font-semibold text-red-900')}" data-remote-error={error.name} {...toModuleFederationFallbackAttributes(telemetry)}>{t('shell.remoteUnavailable')}</div>;
|
|
157
157
|
};
|
|
@@ -206,8 +206,7 @@ const createHydratedRemote =
|
|
|
206
206
|
${hydratedExports}
|
|
207
207
|
|
|
208
208
|
export const Header = () => {
|
|
209
|
-
const {
|
|
210
|
-
const t = i18nInstance['t'].bind(i18nInstance);
|
|
209
|
+
const { t } = useModernI18n();
|
|
211
210
|
|
|
212
211
|
return (
|
|
213
212
|
<header className="${tw('flex min-w-0 flex-wrap items-center gap-x-8 gap-y-2 md:flex-1')}" data-modern-boundary-id="${external_descriptors_cjs_namespaceObject.shellApp.mfName}" data-modern-mf-expose="shell/Header">
|
|
@@ -217,8 +216,7 @@ const createHydratedRemote =
|
|
|
217
216
|
};
|
|
218
217
|
|
|
219
218
|
export const StatusBadge = () => {
|
|
220
|
-
const {
|
|
221
|
-
const t = i18nInstance['t'].bind(i18nInstance);
|
|
219
|
+
const { t } = useModernI18n();
|
|
222
220
|
|
|
223
221
|
return (
|
|
224
222
|
<span className="${tw('inline-flex h-10 shrink-0 items-center justify-center rounded-full border border-stone-900/15 bg-white px-4 text-sm font-extrabold text-stone-950 shadow-lg shadow-stone-900/5')}">
|
|
@@ -228,8 +226,7 @@ export const StatusBadge = () => {
|
|
|
228
226
|
};
|
|
229
227
|
|
|
230
228
|
export const VerticalShowcase = () => {
|
|
231
|
-
const {
|
|
232
|
-
const t = i18nInstance['t'].bind(i18nInstance);
|
|
229
|
+
const { t } = useModernI18n();
|
|
233
230
|
|
|
234
231
|
if (widgetCount === 0) {
|
|
235
232
|
return (
|
|
@@ -251,36 +248,36 @@ ${showcaseItems}
|
|
|
251
248
|
}
|
|
252
249
|
function createRemotePage(app) {
|
|
253
250
|
const tw = (0, external_naming_cjs_namespaceObject.createTw)((0, external_naming_cjs_namespaceObject.tailwindPrefixForApp)(app));
|
|
254
|
-
const
|
|
255
|
-
const
|
|
251
|
+
const listApiItems = `list${(0, external_naming_cjs_namespaceObject.toPascalCase)((0, external_descriptors_cjs_namespaceObject.effectApiStem)(app))}`;
|
|
252
|
+
const apiImport = (0, external_descriptors_cjs_namespaceObject.appHasEffectApi)(app) ? `import { useModernI18n } from '@modern-js/plugin-i18n/runtime';
|
|
256
253
|
import { Link } from '@modern-js/plugin-tanstack/runtime';
|
|
257
254
|
import { useEffect, useState } from 'react';
|
|
258
255
|
import {
|
|
259
256
|
Effect,
|
|
260
|
-
${
|
|
257
|
+
${listApiItems},
|
|
261
258
|
runEffectRequest,
|
|
262
|
-
} from '../../
|
|
259
|
+
} from '../../api/${(0, external_descriptors_cjs_namespaceObject.effectApiStem)(app)}-client';
|
|
263
260
|
import { UltramodernRouteHead } from '../ultramodern-route-head';
|
|
264
261
|
import { ultramodernUiMarker } from '../../ultramodern-build';
|
|
265
262
|
` : "import { useModernI18n } from '@modern-js/plugin-i18n/runtime';\nimport { Link } from '@modern-js/plugin-tanstack/runtime';\nimport { UltramodernRouteHead } from '../ultramodern-route-head';\nimport { ultramodernUiMarker } from '../../ultramodern-build';\n";
|
|
266
|
-
const
|
|
263
|
+
const apiState = (0, external_descriptors_cjs_namespaceObject.appHasEffectApi)(app) ? ` const [apiStatus, setApiStatus] = useState('pending');
|
|
267
264
|
|
|
268
265
|
useEffect(() => {
|
|
269
266
|
let cancelled = false;
|
|
270
267
|
void runEffectRequest(
|
|
271
|
-
${
|
|
268
|
+
${listApiItems}({ limit: 1 }).pipe(
|
|
272
269
|
Effect.match({
|
|
273
270
|
onFailure: () => {
|
|
274
271
|
if (cancelled) {
|
|
275
272
|
return;
|
|
276
273
|
}
|
|
277
|
-
|
|
274
|
+
setApiStatus('unavailable');
|
|
278
275
|
},
|
|
279
276
|
onSuccess: data => {
|
|
280
277
|
if (cancelled) {
|
|
281
278
|
return;
|
|
282
279
|
}
|
|
283
|
-
|
|
280
|
+
setApiStatus(data.items.at(0)?.title ?? 'empty');
|
|
284
281
|
},
|
|
285
282
|
}),
|
|
286
283
|
),
|
|
@@ -292,13 +289,12 @@ import { ultramodernUiMarker } from '../../ultramodern-build';
|
|
|
292
289
|
}, []);
|
|
293
290
|
|
|
294
291
|
` : '';
|
|
295
|
-
const
|
|
292
|
+
const apiMarkup = (0, external_descriptors_cjs_namespaceObject.appHasEffectApi)(app) ? ` <p data-testid="api-status">{apiStatus}</p>
|
|
296
293
|
` : '';
|
|
297
|
-
return `${
|
|
294
|
+
return `${apiImport}
|
|
298
295
|
export default function ${(0, external_naming_cjs_namespaceObject.toPascalCase)(app.id)}Home() {
|
|
299
|
-
const {
|
|
300
|
-
|
|
301
|
-
${effectBffState} return (
|
|
296
|
+
const { language, supportedLanguages, t } = useModernI18n();
|
|
297
|
+
${apiState} return (
|
|
302
298
|
<main className="${tw('min-h-screen bg-um-canvas px-4 py-6 text-um-foreground sm:px-8')}">
|
|
303
299
|
<UltramodernRouteHead />
|
|
304
300
|
<nav aria-label={t('${app.domain}.language.switcher')} className="${tw('flex gap-3')}">
|
|
@@ -319,7 +315,7 @@ ${effectBffState} return (
|
|
|
319
315
|
<p className="${tw('sr-only')}" data-build-marker={ultramodernUiMarker.build} data-testid="ultramodern-ui-marker">
|
|
320
316
|
{ultramodernUiMarker.appId}:{ultramodernUiMarker.version}
|
|
321
317
|
</p>
|
|
322
|
-
${
|
|
318
|
+
${apiMarkup} </main>
|
|
323
319
|
);
|
|
324
320
|
}
|
|
325
321
|
`;
|
|
@@ -343,8 +339,7 @@ function createRemoteEntry(app) {
|
|
|
343
339
|
return `import { useModernI18n } from '@modern-js/plugin-i18n/runtime';
|
|
344
340
|
|
|
345
341
|
export default function ${(0, external_naming_cjs_namespaceObject.toPascalCase)(domain)}Route() {
|
|
346
|
-
const {
|
|
347
|
-
const t = i18nInstance['t'].bind(i18nInstance);
|
|
342
|
+
const { t } = useModernI18n();
|
|
348
343
|
|
|
349
344
|
return (
|
|
350
345
|
<section className="${tw('rounded-2xl bg-white/90 p-5 shadow-xl shadow-stone-900/10')}" data-modern-boundary-id="${app.mfName}" data-modern-mf-expose="./Route">
|
|
@@ -362,8 +357,7 @@ function createRemoteWidget(app) {
|
|
|
362
357
|
return `import { useModernI18n } from '@modern-js/plugin-i18n/runtime';
|
|
363
358
|
|
|
364
359
|
export default function ${componentName}() {
|
|
365
|
-
const {
|
|
366
|
-
const t = i18nInstance['t'].bind(i18nInstance);
|
|
360
|
+
const { t } = useModernI18n();
|
|
367
361
|
|
|
368
362
|
return (
|
|
369
363
|
<section className="${tw('rounded-2xl bg-white/90 p-5 shadow-xl shadow-stone-900/10')}" data-modern-boundary-id="${app.mfName}" data-modern-mf-expose="./Widget">
|
|
@@ -382,8 +376,7 @@ function createRemoteExposeComponent(app, expose) {
|
|
|
382
376
|
return `import { useModernI18n } from '@modern-js/plugin-i18n/runtime';
|
|
383
377
|
|
|
384
378
|
export default function ${componentName}() {
|
|
385
|
-
const {
|
|
386
|
-
const t = i18nInstance['t'].bind(i18nInstance);
|
|
379
|
+
const { t } = useModernI18n();
|
|
387
380
|
|
|
388
381
|
return (
|
|
389
382
|
<section className="${tw('rounded-2xl bg-white/90 p-5 shadow-xl shadow-stone-900/10')}" data-modern-boundary-id="${app.mfName}" data-modern-mf-expose="${expose}">
|
|
@@ -28,7 +28,7 @@ var __webpack_require__ = {};
|
|
|
28
28
|
var __webpack_exports__ = {};
|
|
29
29
|
__webpack_require__.r(__webpack_exports__);
|
|
30
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
31
|
-
|
|
31
|
+
ULTRAMODERN_CONFIG_PATH: ()=>ULTRAMODERN_CONFIG_PATH,
|
|
32
32
|
appHasEffectApi: ()=>appHasEffectApi,
|
|
33
33
|
appI18nNamespace: ()=>appI18nNamespace,
|
|
34
34
|
createCloudflarePublicUrlEnv: ()=>createCloudflarePublicUrlEnv,
|
|
@@ -48,7 +48,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
48
48
|
zephyrRemoteDependency: ()=>zephyrRemoteDependency
|
|
49
49
|
});
|
|
50
50
|
const external_naming_cjs_namespaceObject = require("./naming.cjs");
|
|
51
|
-
const
|
|
51
|
+
const ULTRAMODERN_CONFIG_PATH = '.modernjs/ultramodern.json';
|
|
52
52
|
const shellApp = {
|
|
53
53
|
id: 'shell-super-app',
|
|
54
54
|
directory: 'apps/shell-super-app',
|
|
@@ -179,7 +179,7 @@ function createCloudflarePublicUrlEnv(app) {
|
|
|
179
179
|
function appI18nNamespace(app) {
|
|
180
180
|
return 'shell' === app.kind ? 'shell' : app.domain ?? app.id;
|
|
181
181
|
}
|
|
182
|
-
exports.
|
|
182
|
+
exports.ULTRAMODERN_CONFIG_PATH = __webpack_exports__.ULTRAMODERN_CONFIG_PATH;
|
|
183
183
|
exports.appHasEffectApi = __webpack_exports__.appHasEffectApi;
|
|
184
184
|
exports.appI18nNamespace = __webpack_exports__.appI18nNamespace;
|
|
185
185
|
exports.createCloudflarePublicUrlEnv = __webpack_exports__.createCloudflarePublicUrlEnv;
|
|
@@ -198,7 +198,7 @@ exports.shellApp = __webpack_exports__.shellApp;
|
|
|
198
198
|
exports.verticalEffectApps = __webpack_exports__.verticalEffectApps;
|
|
199
199
|
exports.zephyrRemoteDependency = __webpack_exports__.zephyrRemoteDependency;
|
|
200
200
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
201
|
-
"
|
|
201
|
+
"ULTRAMODERN_CONFIG_PATH",
|
|
202
202
|
"appHasEffectApi",
|
|
203
203
|
"appI18nNamespace",
|
|
204
204
|
"createCloudflarePublicUrlEnv",
|