@bleedingdev/modern-js-create 3.4.0-ultramodern.8 → 3.5.0-ultramodern.0

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.
Files changed (135) hide show
  1. package/README.md +25 -23
  2. package/dist/cjs/index.cjs +37 -4
  3. package/dist/cjs/locale/en.cjs +12 -2
  4. package/dist/cjs/locale/zh.cjs +12 -2
  5. package/dist/cjs/ultramodern-tooling/commands.cjs +185 -0
  6. package/dist/cjs/ultramodern-tooling/config.cjs +172 -0
  7. package/dist/cjs/ultramodern-workspace/add-vertical.cjs +87 -75
  8. package/dist/cjs/ultramodern-workspace/{effect-api.cjs → api.cjs} +207 -208
  9. package/dist/cjs/ultramodern-workspace/bridge-config.cjs +327 -0
  10. package/dist/cjs/ultramodern-workspace/codesmith.cjs +1 -0
  11. package/dist/cjs/ultramodern-workspace/contracts.cjs +127 -657
  12. package/dist/cjs/ultramodern-workspace/demo-components.cjs +12 -12
  13. package/dist/cjs/ultramodern-workspace/descriptors.cjs +25 -25
  14. package/dist/cjs/ultramodern-workspace/fs-io.cjs +117 -0
  15. package/dist/cjs/ultramodern-workspace/generation-result.cjs +5 -5
  16. package/dist/cjs/ultramodern-workspace/index.cjs +4 -0
  17. package/dist/cjs/ultramodern-workspace/mf-validation.cjs +571 -0
  18. package/dist/cjs/ultramodern-workspace/module-federation.cjs +33 -18
  19. package/dist/cjs/ultramodern-workspace/overlays.cjs +2 -2
  20. package/dist/cjs/ultramodern-workspace/package-json.cjs +57 -41
  21. package/dist/cjs/ultramodern-workspace/policy.cjs +4 -4
  22. package/dist/cjs/ultramodern-workspace/public-api.cjs +4 -0
  23. package/dist/cjs/ultramodern-workspace/public-surface.cjs +2 -2
  24. package/dist/cjs/ultramodern-workspace/versions.cjs +5 -0
  25. package/dist/cjs/ultramodern-workspace/workspace-scripts.cjs +119 -50
  26. package/dist/cjs/ultramodern-workspace/write-workspace.cjs +62 -21
  27. package/dist/esm/index.js +37 -4
  28. package/dist/esm/locale/en.js +12 -2
  29. package/dist/esm/locale/zh.js +12 -2
  30. package/dist/esm/ultramodern-tooling/commands.js +132 -0
  31. package/dist/esm/ultramodern-tooling/config.js +120 -0
  32. package/dist/esm/ultramodern-workspace/add-vertical.js +88 -79
  33. package/dist/esm/ultramodern-workspace/{effect-api.js → api.js} +146 -147
  34. package/dist/esm/ultramodern-workspace/bridge-config.js +270 -0
  35. package/dist/esm/ultramodern-workspace/codesmith.js +1 -0
  36. package/dist/esm/ultramodern-workspace/contracts.js +129 -611
  37. package/dist/esm/ultramodern-workspace/demo-components.js +13 -13
  38. package/dist/esm/ultramodern-workspace/descriptors.js +11 -11
  39. package/dist/esm/ultramodern-workspace/fs-io.js +116 -2
  40. package/dist/esm/ultramodern-workspace/generation-result.js +6 -6
  41. package/dist/esm/ultramodern-workspace/index.js +1 -0
  42. package/dist/esm/ultramodern-workspace/mf-validation.js +516 -0
  43. package/dist/esm/ultramodern-workspace/module-federation.js +34 -19
  44. package/dist/esm/ultramodern-workspace/overlays.js +2 -2
  45. package/dist/esm/ultramodern-workspace/package-json.js +56 -40
  46. package/dist/esm/ultramodern-workspace/policy.js +5 -5
  47. package/dist/esm/ultramodern-workspace/public-api.js +1 -0
  48. package/dist/esm/ultramodern-workspace/public-surface.js +2 -2
  49. package/dist/esm/ultramodern-workspace/versions.js +3 -1
  50. package/dist/esm/ultramodern-workspace/workspace-scripts.js +107 -34
  51. package/dist/esm/ultramodern-workspace/write-workspace.js +64 -26
  52. package/dist/esm-node/index.js +37 -4
  53. package/dist/esm-node/locale/en.js +12 -2
  54. package/dist/esm-node/locale/zh.js +12 -2
  55. package/dist/esm-node/ultramodern-tooling/commands.js +133 -0
  56. package/dist/esm-node/ultramodern-tooling/config.js +121 -0
  57. package/dist/esm-node/ultramodern-workspace/add-vertical.js +88 -79
  58. package/dist/esm-node/ultramodern-workspace/{effect-api.js → api.js} +146 -147
  59. package/dist/esm-node/ultramodern-workspace/bridge-config.js +271 -0
  60. package/dist/esm-node/ultramodern-workspace/codesmith.js +1 -0
  61. package/dist/esm-node/ultramodern-workspace/contracts.js +129 -611
  62. package/dist/esm-node/ultramodern-workspace/demo-components.js +13 -13
  63. package/dist/esm-node/ultramodern-workspace/descriptors.js +11 -11
  64. package/dist/esm-node/ultramodern-workspace/fs-io.js +116 -2
  65. package/dist/esm-node/ultramodern-workspace/generation-result.js +6 -6
  66. package/dist/esm-node/ultramodern-workspace/index.js +1 -0
  67. package/dist/esm-node/ultramodern-workspace/mf-validation.js +517 -0
  68. package/dist/esm-node/ultramodern-workspace/module-federation.js +34 -19
  69. package/dist/esm-node/ultramodern-workspace/overlays.js +2 -2
  70. package/dist/esm-node/ultramodern-workspace/package-json.js +56 -40
  71. package/dist/esm-node/ultramodern-workspace/policy.js +5 -5
  72. package/dist/esm-node/ultramodern-workspace/public-api.js +1 -0
  73. package/dist/esm-node/ultramodern-workspace/public-surface.js +2 -2
  74. package/dist/esm-node/ultramodern-workspace/versions.js +3 -1
  75. package/dist/esm-node/ultramodern-workspace/workspace-scripts.js +107 -34
  76. package/dist/esm-node/ultramodern-workspace/write-workspace.js +64 -26
  77. package/dist/types/locale/en.d.ts +10 -0
  78. package/dist/types/locale/index.d.ts +20 -0
  79. package/dist/types/locale/zh.d.ts +10 -0
  80. package/dist/types/ultramodern-tooling/commands.d.ts +1 -0
  81. package/dist/types/ultramodern-tooling/config.d.ts +43 -0
  82. package/dist/types/ultramodern-workspace/add-vertical.d.ts +5 -2
  83. package/dist/types/ultramodern-workspace/api.d.ts +73 -0
  84. package/dist/types/ultramodern-workspace/bridge-config.d.ts +64 -0
  85. package/dist/types/ultramodern-workspace/codesmith.d.ts +1 -0
  86. package/dist/types/ultramodern-workspace/contracts.d.ts +2 -17
  87. package/dist/types/ultramodern-workspace/descriptors.d.ts +10 -10
  88. package/dist/types/ultramodern-workspace/fs-io.d.ts +1 -0
  89. package/dist/types/ultramodern-workspace/index.d.ts +2 -0
  90. package/dist/types/ultramodern-workspace/mf-validation.d.ts +27 -0
  91. package/dist/types/ultramodern-workspace/package-json.d.ts +5 -4
  92. package/dist/types/ultramodern-workspace/public-api.d.ts +2 -0
  93. package/dist/types/ultramodern-workspace/types.d.ts +9 -7
  94. package/dist/types/ultramodern-workspace/versions.d.ts +2 -0
  95. package/dist/types/ultramodern-workspace/workspace-scripts.d.ts +2 -7
  96. package/dist/types/ultramodern-workspace/write-workspace.d.ts +4 -2
  97. package/package.json +5 -3
  98. package/template-workspace/{.agents → .codex}/skills-lock.json +12 -12
  99. package/template-workspace/.github/workflows/ultramodern-workspace-gates.yml.handlebars +2 -0
  100. package/template-workspace/.gitignore.handlebars +3 -0
  101. package/template-workspace/AGENTS.md.handlebars +11 -5
  102. package/template-workspace/README.md.handlebars +15 -12
  103. package/template-workspace/oxfmt.config.ts +1 -0
  104. package/template-workspace/oxlint.config.ts +1 -0
  105. package/template-workspace/patches/@tanstack__router-core@1.171.13.patch +51 -0
  106. package/template-workspace/pnpm-workspace.yaml.handlebars +4 -0
  107. package/template-workspace/scripts/bootstrap-agent-skills.mjs +77 -67
  108. package/templates/workspace-scripts/assert-mf-types.mjs.handlebars +51 -8
  109. package/templates/workspace-scripts/check-ultramodern-api-boundaries.mts +344 -0
  110. package/templates/workspace-scripts/{check-ultramodern-i18n-boundaries.mjs → check-ultramodern-i18n-boundaries.mts} +1 -1
  111. package/templates/workspace-scripts/generate-public-surface-assets.mjs +246 -9
  112. package/templates/workspace-scripts/proof-cloudflare-version.mjs +277 -9
  113. package/templates/workspace-scripts/ultramodern-cloudflare-proof.mjs +35 -10
  114. package/templates/workspace-scripts/ultramodern-performance-readiness.mjs +165 -2
  115. package/templates/workspace-scripts/ultramodern-typecheck.mjs +4 -2
  116. package/templates/workspace-scripts/validate-ultramodern-workspace.mjs.handlebars +840 -84
  117. package/dist/types/ultramodern-workspace/effect-api.d.ts +0 -73
  118. /package/template-workspace/{.agents → .codex}/rstackjs-agent-skills-LICENSE +0 -0
  119. /package/template-workspace/{.agents → .codex}/skills/rsbuild-best-practices/SKILL.md +0 -0
  120. /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/SKILL.md +0 -0
  121. /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/command-map.md +0 -0
  122. /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/common-analysis-patterns.md +0 -0
  123. /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/install-rsdoctor-common.md +0 -0
  124. /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/install-rsdoctor-rspack.md +0 -0
  125. /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/install-rsdoctor-webpack.md +0 -0
  126. /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/install-rsdoctor.md +0 -0
  127. /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/rsdoctor-data-types.md +0 -0
  128. /package/template-workspace/{.agents → .codex}/skills/rslib-best-practices/SKILL.md +0 -0
  129. /package/template-workspace/{.agents → .codex}/skills/rslib-modern-package/SKILL.md +0 -0
  130. /package/template-workspace/{.agents → .codex}/skills/rspack-best-practices/SKILL.md +0 -0
  131. /package/template-workspace/{.agents → .codex}/skills/rspack-tracing/SKILL.md +0 -0
  132. /package/template-workspace/{.agents → .codex}/skills/rspack-tracing/references/bottlenecks.md +0 -0
  133. /package/template-workspace/{.agents → .codex}/skills/rspack-tracing/references/tracing-guide.md +0 -0
  134. /package/template-workspace/{.agents → .codex}/skills/rspack-tracing/scripts/analyze_trace.js +0 -0
  135. /package/template-workspace/{.agents → .codex}/skills/rstest-best-practices/SKILL.md +0 -0
@@ -0,0 +1,327 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
13
+ };
14
+ })();
15
+ (()=>{
16
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
17
+ })();
18
+ (()=>{
19
+ __webpack_require__.r = (exports1)=>{
20
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
21
+ value: 'Module'
22
+ });
23
+ Object.defineProperty(exports1, '__esModule', {
24
+ value: true
25
+ });
26
+ };
27
+ })();
28
+ var __webpack_exports__ = {};
29
+ __webpack_require__.r(__webpack_exports__);
30
+ const ultramodernBridgeCliFlags = {
31
+ enabled: '--bridge',
32
+ parentRoot: '--bridge-parent-root',
33
+ workspacePackage: '--bridge-workspace-package',
34
+ workspacePackageName: '--bridge-workspace-package-name',
35
+ testAlias: '--bridge-test-alias',
36
+ dependency: '--bridge-dependency',
37
+ lockfilePolicy: '--bridge-lockfile-policy',
38
+ gate: '--bridge-gate',
39
+ gateCwd: '--bridge-gate-cwd',
40
+ reactSingleton: '--bridge-react-singleton'
41
+ };
42
+ const ultramodernBridgeCliValueFlags = [
43
+ ultramodernBridgeCliFlags.parentRoot,
44
+ ultramodernBridgeCliFlags.workspacePackage,
45
+ ultramodernBridgeCliFlags.workspacePackageName,
46
+ ultramodernBridgeCliFlags.testAlias,
47
+ ultramodernBridgeCliFlags.dependency,
48
+ ultramodernBridgeCliFlags.lockfilePolicy,
49
+ ultramodernBridgeCliFlags.gate,
50
+ ultramodernBridgeCliFlags.gateCwd,
51
+ ultramodernBridgeCliFlags.reactSingleton
52
+ ];
53
+ const ultramodernBridgeCliBooleanFlags = [
54
+ ultramodernBridgeCliFlags.enabled
55
+ ];
56
+ const ultramodernBridgeLockfilePolicies = [
57
+ 'nested',
58
+ 'parent'
59
+ ];
60
+ const defaultReactSingletons = [
61
+ 'react',
62
+ 'react-dom'
63
+ ];
64
+ function hasUltramodernBridgeCliOptions(args) {
65
+ return args.some((arg)=>[
66
+ ...ultramodernBridgeCliBooleanFlags,
67
+ ...ultramodernBridgeCliValueFlags
68
+ ].some((flag)=>arg === flag || arg.startsWith(`${flag}=`)));
69
+ }
70
+ function parseUltramodernBridgeCliOptions(args) {
71
+ rejectBooleanFlagValues(args);
72
+ if (!hasUltramodernBridgeCliOptions(args)) return;
73
+ const parentRoot = readSingleValue(args, ultramodernBridgeCliFlags.parentRoot);
74
+ const lockfilePolicy = readSingleValue(args, ultramodernBridgeCliFlags.lockfilePolicy) ?? 'nested';
75
+ const workspacePackages = readWorkspacePackages(args);
76
+ const gates = readBridgeGates(args);
77
+ const reactSingletons = readCsvOptionValues(args, ultramodernBridgeCliFlags.reactSingleton);
78
+ return normalizeUltramodernBridgeConfig({
79
+ enabled: true,
80
+ parentRoot: requireNonEmptyValue(parentRoot, ultramodernBridgeCliFlags.parentRoot),
81
+ workspacePackages,
82
+ dependencies: readCsvOptionValues(args, ultramodernBridgeCliFlags.dependency),
83
+ lockfilePolicy: parseLockfilePolicy(lockfilePolicy),
84
+ gates,
85
+ reactSingletons: reactSingletons.length > 0 ? reactSingletons : void 0
86
+ });
87
+ }
88
+ function normalizeUltramodernBridgeConfig(bridge) {
89
+ if (!bridge || false === bridge.enabled) return;
90
+ const parentRoot = requireNonEmptyValue(bridge.parentRoot, 'bridge.parentRoot');
91
+ const workspacePackages = normalizeWorkspacePackages(bridge.workspacePackages);
92
+ const dependencies = uniqueNonEmptyValues(bridge.dependencies, 'bridge.dependencies');
93
+ const gates = normalizeBridgeGates(bridge.gates);
94
+ const reactSingletons = bridge.reactSingletons && bridge.reactSingletons.length > 0 ? uniqueNonEmptyValues(bridge.reactSingletons, 'bridge.reactSingletons') : [
95
+ ...defaultReactSingletons
96
+ ];
97
+ if (0 === workspacePackages.length) throw new Error('Bridge mode requires at least one bridge.workspacePackages entry.');
98
+ if (0 === dependencies.length) throw new Error('Bridge mode requires at least one explicit bridge.dependencies package name.');
99
+ if (0 === gates.length) throw new Error('Bridge mode requires at least one bridge.gates delegated parent command.');
100
+ validateParentPackageCoverage(workspacePackages, dependencies);
101
+ validateReactSingletons(reactSingletons);
102
+ return {
103
+ enabled: true,
104
+ parentRoot,
105
+ workspacePackages,
106
+ dependencies,
107
+ lockfilePolicy: parseLockfilePolicy(bridge.lockfilePolicy ?? 'nested'),
108
+ gates,
109
+ reactSingletons
110
+ };
111
+ }
112
+ function rejectBooleanFlagValues(args) {
113
+ for (const flag of ultramodernBridgeCliBooleanFlags)if (args.some((arg)=>arg.startsWith(`${flag}=`))) throw new Error(`${flag} does not accept a value.`);
114
+ }
115
+ function readRepeatedOptionValues(args, flag) {
116
+ const values = [];
117
+ for(let index = 0; index < args.length; index++){
118
+ const arg = args[index];
119
+ if (arg === flag) {
120
+ const value = args[index + 1];
121
+ if (!value || value.startsWith('-')) throw new Error(`${flag} requires a value.`);
122
+ values.push(value);
123
+ index += 1;
124
+ continue;
125
+ }
126
+ if (arg.startsWith(`${flag}=`)) values.push(arg.slice(flag.length + 1));
127
+ }
128
+ return values;
129
+ }
130
+ function readSingleValue(args, flag) {
131
+ const values = readRepeatedOptionValues(args, flag);
132
+ if (values.length > 1) throw new Error(`${flag} can be provided only once.`);
133
+ return values[0];
134
+ }
135
+ function readCsvOptionValues(args, flag) {
136
+ return readRepeatedOptionValues(args, flag).flatMap((value)=>value.split(',').map((entry)=>entry.trim()).filter(Boolean));
137
+ }
138
+ function requireNonEmptyValue(value, label) {
139
+ if ('string' != typeof value || 0 === value.trim().length) throw new Error(`${label} must be a non-empty string.`);
140
+ return value.trim();
141
+ }
142
+ function parseLockfilePolicy(value) {
143
+ if (!ultramodernBridgeLockfilePolicies.includes(value)) throw new Error(`${ultramodernBridgeCliFlags.lockfilePolicy} must be "nested" or "parent".`);
144
+ return value;
145
+ }
146
+ function readWorkspacePackages(args) {
147
+ const drafts = new Map();
148
+ const getDraft = (pattern)=>{
149
+ const normalizedPattern = requireNonEmptyValue(pattern, ultramodernBridgeCliFlags.workspacePackage);
150
+ const existing = drafts.get(normalizedPattern);
151
+ if (existing) return existing;
152
+ const draft = {
153
+ pattern: normalizedPattern,
154
+ packageNames: [],
155
+ testAliases: []
156
+ };
157
+ drafts.set(normalizedPattern, draft);
158
+ return draft;
159
+ };
160
+ for (const pattern of readRepeatedOptionValues(args, ultramodernBridgeCliFlags.workspacePackage))getDraft(pattern);
161
+ for (const value of readRepeatedOptionValues(args, ultramodernBridgeCliFlags.workspacePackageName)){
162
+ const { left: pattern, right: packageNames } = splitAssignment(value, ultramodernBridgeCliFlags.workspacePackageName, '<pattern>=<package-name>[,<package-name>]');
163
+ getDraft(pattern).packageNames.push(...packageNames.split(',').map((packageName)=>packageName.trim()).filter(Boolean));
164
+ }
165
+ for (const value of readRepeatedOptionValues(args, ultramodernBridgeCliFlags.testAlias)){
166
+ const separator = value.indexOf(':');
167
+ if (-1 === separator) throw new Error(`${ultramodernBridgeCliFlags.testAlias} must use <pattern>:<alias>=<target>.`);
168
+ const pattern = value.slice(0, separator);
169
+ const aliasDefinition = value.slice(separator + 1);
170
+ const { left: alias, right: target } = splitAssignment(aliasDefinition, ultramodernBridgeCliFlags.testAlias, '<pattern>:<alias>=<target>');
171
+ getDraft(pattern).testAliases.push({
172
+ alias: requireNonEmptyValue(alias, `${ultramodernBridgeCliFlags.testAlias} alias`),
173
+ target: requireNonEmptyValue(target, `${ultramodernBridgeCliFlags.testAlias} target`)
174
+ });
175
+ }
176
+ return normalizeWorkspacePackages([
177
+ ...drafts.values()
178
+ ]);
179
+ }
180
+ function readBridgeGates(args) {
181
+ const gates = new Map();
182
+ const getGate = (name)=>{
183
+ const normalizedName = requireNonEmptyValue(name, `${ultramodernBridgeCliFlags.gate} name`);
184
+ const existing = gates.get(normalizedName);
185
+ if (existing) return existing;
186
+ const draft = {
187
+ name: normalizedName
188
+ };
189
+ gates.set(normalizedName, draft);
190
+ return draft;
191
+ };
192
+ for (const value of readRepeatedOptionValues(args, ultramodernBridgeCliFlags.gate)){
193
+ const { left: name, right: command } = splitAssignment(value, ultramodernBridgeCliFlags.gate, '<name>=<command>');
194
+ getGate(name).command = requireNonEmptyValue(command, `${ultramodernBridgeCliFlags.gate} command`);
195
+ }
196
+ for (const value of readRepeatedOptionValues(args, ultramodernBridgeCliFlags.gateCwd)){
197
+ const { left: name, right: cwd } = splitAssignment(value, ultramodernBridgeCliFlags.gateCwd, '<name>=<cwd>');
198
+ getGate(name).cwd = requireNonEmptyValue(cwd, `${ultramodernBridgeCliFlags.gateCwd} cwd`);
199
+ }
200
+ const missingCommand = [
201
+ ...gates.values()
202
+ ].find((gate)=>!gate.command);
203
+ if (missingCommand) throw new Error(`${ultramodernBridgeCliFlags.gateCwd} references "${missingCommand.name}" without a matching ${ultramodernBridgeCliFlags.gate}.`);
204
+ return normalizeBridgeGates([
205
+ ...gates.values()
206
+ ].map((gate)=>({
207
+ name: gate.name,
208
+ command: gate.command,
209
+ cwd: gate.cwd
210
+ })));
211
+ }
212
+ function splitAssignment(value, flag, usage) {
213
+ const separator = value.indexOf('=');
214
+ if (-1 === separator) throw new Error(`${flag} must use ${usage}.`);
215
+ return {
216
+ left: value.slice(0, separator),
217
+ right: value.slice(separator + 1)
218
+ };
219
+ }
220
+ function normalizeWorkspacePackages(workspacePackages) {
221
+ return workspacePackages.map((entry, index)=>{
222
+ const label = `bridge.workspacePackages[${index}]`;
223
+ const packageNames = entry.packageNames && entry.packageNames.length > 0 ? uniqueNonEmptyValues(entry.packageNames, `${label}.packageNames`) : void 0;
224
+ const testAliases = entry.testAliases && entry.testAliases.length > 0 ? normalizeTestAliases(entry.testAliases, label) : void 0;
225
+ return {
226
+ pattern: requireNonEmptyValue(entry.pattern, `${label}.pattern`),
227
+ ...packageNames ? {
228
+ packageNames
229
+ } : {},
230
+ ...testAliases ? {
231
+ testAliases
232
+ } : {}
233
+ };
234
+ });
235
+ }
236
+ function validateParentPackageCoverage(workspacePackages, dependencies) {
237
+ const declaredPackages = new Set();
238
+ for (const [index, entry] of workspacePackages.entries()){
239
+ const label = `bridge.workspacePackages[${index}]`;
240
+ const packageNames = entry.packageNames ?? [];
241
+ if (0 === packageNames.length && (entry.testAliases ?? []).length > 0) throw new Error(`${label}.packageNames must declare the parent package names covered by "${entry.pattern}" before testAliases can be checked.`);
242
+ for (const packageName of packageNames)declaredPackages.add(packageName);
243
+ for (const alias of entry.testAliases ?? []){
244
+ if (!packageNames.some((packageName)=>aliasMatchesPackage(alias.alias, packageName))) throw new Error(`${label}.testAliases entry "${alias.alias}" must match one of ${label}.packageNames.`);
245
+ if (pointsAtBuildOutput(alias.target)) throw new Error(`${label}.testAliases target "${alias.target}" must point at source files, not dist output.`);
246
+ }
247
+ }
248
+ const missingDependencies = dependencies.filter((dependency)=>!declaredPackages.has(dependency));
249
+ if (declaredPackages.size > 0 && missingDependencies.length > 0) throw new Error(`Bridge mode dependencies must be declared by bridge.workspacePackages[].packageNames: ${missingDependencies.join(', ')}.`);
250
+ }
251
+ function aliasMatchesPackage(alias, packageName) {
252
+ return alias === packageName || alias.startsWith(`${packageName}/`);
253
+ }
254
+ function pointsAtBuildOutput(target) {
255
+ return target.split(/[\\/]/u).includes('dist');
256
+ }
257
+ function validateReactSingletons(reactSingletons) {
258
+ const missing = defaultReactSingletons.filter((packageName)=>!reactSingletons.includes(packageName));
259
+ if (missing.length > 0) throw new Error(`Bridge mode React singleton/dedupe declarations must include ${defaultReactSingletons.join(' and ')}. Missing: ${missing.join(', ')}.`);
260
+ }
261
+ function normalizeTestAliases(testAliases, parentLabel) {
262
+ const aliases = new Map();
263
+ for (const [index, alias] of testAliases.entries()){
264
+ const label = `${parentLabel}.testAliases[${index}]`;
265
+ const normalizedAlias = requireNonEmptyValue(alias.alias, `${label}.alias`);
266
+ aliases.set(normalizedAlias, {
267
+ alias: normalizedAlias,
268
+ target: requireNonEmptyValue(alias.target, `${label}.target`)
269
+ });
270
+ }
271
+ return [
272
+ ...aliases.values()
273
+ ];
274
+ }
275
+ function normalizeBridgeGates(gates) {
276
+ const normalized = new Map();
277
+ for (const [index, gate] of gates.entries()){
278
+ const label = `bridge.gates[${index}]`;
279
+ const name = requireNonEmptyValue(gate.name, `${label}.name`);
280
+ normalized.set(name, {
281
+ name,
282
+ command: requireNonEmptyValue(gate.command, `${label}.command`),
283
+ ...gate.cwd ? {
284
+ cwd: requireNonEmptyValue(gate.cwd, `${label}.cwd`)
285
+ } : {}
286
+ });
287
+ }
288
+ return [
289
+ ...normalized.values()
290
+ ];
291
+ }
292
+ function uniqueNonEmptyValues(values, label) {
293
+ const unique = new Set();
294
+ for (const [index, value] of values.entries())unique.add(requireNonEmptyValue(value, `${label}[${index}]`));
295
+ return [
296
+ ...unique
297
+ ];
298
+ }
299
+ __webpack_require__.d(__webpack_exports__, {
300
+ hasUltramodernBridgeCliOptions: ()=>hasUltramodernBridgeCliOptions,
301
+ normalizeUltramodernBridgeConfig: ()=>normalizeUltramodernBridgeConfig,
302
+ parseUltramodernBridgeCliOptions: ()=>parseUltramodernBridgeCliOptions
303
+ }, {
304
+ ultramodernBridgeCliBooleanFlags: ultramodernBridgeCliBooleanFlags,
305
+ ultramodernBridgeCliFlags: ultramodernBridgeCliFlags,
306
+ ultramodernBridgeCliValueFlags: ultramodernBridgeCliValueFlags,
307
+ ultramodernBridgeLockfilePolicies: ultramodernBridgeLockfilePolicies
308
+ });
309
+ exports.hasUltramodernBridgeCliOptions = __webpack_exports__.hasUltramodernBridgeCliOptions;
310
+ exports.normalizeUltramodernBridgeConfig = __webpack_exports__.normalizeUltramodernBridgeConfig;
311
+ exports.parseUltramodernBridgeCliOptions = __webpack_exports__.parseUltramodernBridgeCliOptions;
312
+ exports.ultramodernBridgeCliBooleanFlags = __webpack_exports__.ultramodernBridgeCliBooleanFlags;
313
+ exports.ultramodernBridgeCliFlags = __webpack_exports__.ultramodernBridgeCliFlags;
314
+ exports.ultramodernBridgeCliValueFlags = __webpack_exports__.ultramodernBridgeCliValueFlags;
315
+ exports.ultramodernBridgeLockfilePolicies = __webpack_exports__.ultramodernBridgeLockfilePolicies;
316
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
317
+ "hasUltramodernBridgeCliOptions",
318
+ "normalizeUltramodernBridgeConfig",
319
+ "parseUltramodernBridgeCliOptions",
320
+ "ultramodernBridgeCliBooleanFlags",
321
+ "ultramodernBridgeCliFlags",
322
+ "ultramodernBridgeCliValueFlags",
323
+ "ultramodernBridgeLockfilePolicies"
324
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
325
+ Object.defineProperty(exports, '__esModule', {
326
+ value: true
327
+ });
@@ -56,6 +56,7 @@ async function ultramodernCodeSmithAdapter(context, runtime) {
56
56
  packageName: name,
57
57
  modernVersion,
58
58
  enableTailwind,
59
+ bridge: config.bridge,
59
60
  overlays: config.overlays,
60
61
  packageSource
61
62
  }) : runVerticalMode({