Skip to content

Commit 894c6da

Browse files
Merge branch 'main' into feature/implement-@angular-build
2 parents 6327367 + cb32b17 commit 894c6da

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+4180
-809
lines changed
Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
{
22
"name": "@softarc/native-federation",
3-
"version": "3.0.2",
3+
"version": "3.3.0",
44
"type": "commonjs",
55
"license": "MIT",
66
"dependencies": {
77
"json5": "^2.2.0",
88
"chalk": "^4.1.2",
9-
"@softarc/native-federation-runtime": "3.0.2"
9+
"@softarc/native-federation-runtime": "3.3.0",
10+
"fast-glob": "^3.3.3"
11+
},
12+
"peerDependencies": {
13+
"@softarc/sheriff-core": "^0.18.2"
1014
}
1115
}

libs/native-federation-core/src/build.ts

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,33 @@ export {
44
NormalizedFederationConfig,
55
SharedConfig,
66
} from './lib/config/federation-config';
7-
export { FederationOptions } from './lib/core/federation-options';
8-
export { setBuildAdapter } from './lib/core/build-adapter';
9-
export { writeImportMap } from './lib/core/write-import-map';
10-
export { writeFederationInfo } from './lib/core/write-federation-info';
11-
export { getExternals } from './lib/core/get-externals';
12-
export { loadFederationConfig } from './lib/core/load-federation-config';
13-
export { MappedPath } from './lib/utils/mapped-paths';
7+
export { withNativeFederation } from './lib/config/with-native-federation';
148
export {
159
BuildAdapter,
1610
BuildAdapterOptions,
17-
BuildResult,
1811
BuildKind,
12+
BuildResult,
1913
EntryPoint,
14+
setBuildAdapter,
2015
} from './lib/core/build-adapter';
21-
export { withNativeFederation } from './lib/config/with-native-federation';
2216
export { buildForFederation } from './lib/core/build-for-federation';
2317
export { bundleExposedAndMappings } from './lib/core/bundle-exposed-and-mappings';
18+
export { FederationOptions } from './lib/core/federation-options';
19+
export { getExternals } from './lib/core/get-externals';
20+
export { loadFederationConfig } from './lib/core/load-federation-config';
21+
export { writeFederationInfo } from './lib/core/write-federation-info';
22+
export { writeImportMap } from './lib/core/write-import-map';
23+
export { MappedPath } from './lib/utils/mapped-paths';
2424

2525
export {
26+
findRootTsConfigJson,
2627
share,
2728
shareAll,
28-
findRootTsConfigJson,
2929
} from './lib/config/share-utils';
3030
export {
31-
federationBuilder,
3231
BuildHelperParams,
32+
federationBuilder,
3333
} from './lib/core/federation-builder';
34-
export { logger, setLogLevel } from './lib/utils/logger';
35-
export { hashFile } from './lib/utils/hash-file';
3634
export * from './lib/utils/build-result-map';
35+
export { hashFile } from './lib/utils/hash-file';
36+
export { logger, setLogLevel } from './lib/utils/logger';

libs/native-federation-core/src/lib/config/federation-config.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export interface FederationConfig {
2626
externals?: string[];
2727
features?: {
2828
mappingVersion?: boolean;
29+
ignoreUnusedDeps?: boolean;
2930
};
3031
}
3132

@@ -53,5 +54,6 @@ export interface NormalizedFederationConfig {
5354
externals: string[];
5455
features: {
5556
mappingVersion: boolean;
57+
ignoreUnusedDeps: boolean;
5658
};
5759
}

libs/native-federation-core/src/lib/config/share-utils.ts

Lines changed: 47 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ import { getConfigContext } from './configuration-context';
1919
import { logger } from '../utils/logger';
2020
import { resolveGlobSync } from '../utils/resolve-glob';
2121

22+
import {
23+
KeyValuePair,
24+
resolveWildcardKeys,
25+
} from '../utils/resolve-wildcard-keys';
26+
2227
let inferVersion = false;
2328

2429
export const DEFAULT_SECONARIES_SKIP_LIST = [
@@ -195,6 +200,10 @@ function readConfiguredSecondaries(
195200
}
196201

197202
const packageJson = JSON.parse(fs.readFileSync(libPackageJson, 'utf-8'));
203+
204+
const version = packageJson['version'] as string;
205+
const esm = packageJson['type'] === 'module';
206+
198207
const exports = packageJson['exports'] as Record<
199208
string,
200209
Record<string, string>
@@ -242,12 +251,29 @@ function readConfiguredSecondaries(
242251
continue;
243252
}
244253

245-
const items = resolveSecondaries(key, libPath, parent, secondaryName);
254+
const items = resolveSecondaries(
255+
key,
256+
libPath,
257+
parent,
258+
secondaryName,
259+
entry
260+
);
246261

247262
for (const item of items) {
248-
result[item] = {
249-
...shareObject,
250-
};
263+
if (typeof item === 'object') {
264+
result[item.key] = {
265+
...shareObject,
266+
packageInfo: {
267+
entryPoint: item.value,
268+
version: shareObject.version ?? version,
269+
esm,
270+
},
271+
};
272+
} else {
273+
result[item] = {
274+
...shareObject,
275+
};
276+
}
251277
}
252278
}
253279

@@ -258,13 +284,16 @@ function resolveSecondaries(
258284
key: string,
259285
libPath: string,
260286
parent: string,
261-
secondaryName: string
262-
) {
263-
let items = [];
287+
secondaryName: string,
288+
entry: string
289+
): Array<string | KeyValuePair> {
290+
let items: Array<string | KeyValuePair> = [];
264291
if (key.includes('*')) {
265-
items = resolveGlobSync(key, libPath).map((e) =>
266-
path.join(parent, e.substring(libPath.length))
267-
);
292+
const expanded = resolveWildcardKeys(key, entry, libPath);
293+
items = expanded.map((e) => ({
294+
key: path.join(parent, e.key),
295+
value: path.join(libPath, e.value),
296+
}));
268297
} else {
269298
items = [secondaryName];
270299
}
@@ -290,7 +319,14 @@ function getDefaultEntry(
290319
if (!entry) {
291320
entry = exports[key]?.['import'];
292321
if (typeof entry === 'object') {
293-
entry = entry['import'];
322+
entry = entry['import'] ?? entry['default'];
323+
}
324+
}
325+
326+
if (!entry) {
327+
entry = exports[key]?.['require'];
328+
if (typeof entry === 'object') {
329+
entry = entry['require'] ?? entry['default'];
294330
}
295331
}
296332

libs/native-federation-core/src/lib/config/with-native-federation.ts

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export function withNativeFederation(
1818
): NormalizedFederationConfig {
1919
const skip = prepareSkipList(config.skip ?? []);
2020

21-
return {
21+
const normalized = {
2222
name: config.name ?? '',
2323
exposes: config.exposes ?? {},
2424
shared: normalizeShared(config, skip),
@@ -27,8 +27,34 @@ export function withNativeFederation(
2727
externals: config.externals ?? [],
2828
features: {
2929
mappingVersion: config.features?.mappingVersion ?? false,
30+
ignoreUnusedDeps: config.features?.ignoreUnusedDeps ?? false,
3031
},
3132
};
33+
34+
// This is for being backwards compatible
35+
if (!normalized.features.ignoreUnusedDeps) {
36+
normalized.shared = filterShared(normalized.shared);
37+
}
38+
39+
return normalized;
40+
}
41+
42+
function filterShared(
43+
shared: Record<string, NormalizedSharedConfig>
44+
): Record<string, NormalizedSharedConfig> {
45+
const keys = Object.keys(shared).filter(
46+
(k) => !k.startsWith('@angular/common/locales')
47+
);
48+
49+
const filtered = keys.reduce(
50+
(acc, curr) => ({
51+
...acc,
52+
[curr]: shared[curr],
53+
}),
54+
{}
55+
);
56+
57+
return filtered;
3258
}
3359

3460
function normalizeShared(

libs/native-federation-core/src/lib/core/build-adapter.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export interface BuildAdapterOptions {
3131
kind: BuildKind;
3232
hash: boolean;
3333
platform?: 'browser' | 'node';
34+
optimizedMappings?: boolean;
3435
}
3536

3637
export interface BuildResult {

libs/native-federation-core/src/lib/core/build-for-federation.ts

Lines changed: 54 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,31 @@
1+
import { FederationInfo, SharedInfo } from '@softarc/native-federation-runtime';
12
import {
23
NormalizedFederationConfig,
34
NormalizedSharedConfig,
45
} from '../config/federation-config';
5-
import { FederationInfo, SharedInfo } from '@softarc/native-federation-runtime';
6-
import { FederationOptions } from './federation-options';
7-
import { writeImportMap } from './write-import-map';
8-
import { writeFederationInfo } from './write-federation-info';
9-
import { bundleShared } from './bundle-shared';
106
import {
117
ArtefactInfo,
128
bundleExposedAndMappings,
139
describeExposed,
1410
describeSharedMappings,
1511
} from './bundle-exposed-and-mappings';
12+
import { bundleShared } from './bundle-shared';
13+
import { FederationOptions } from './federation-options';
14+
import { writeFederationInfo } from './write-federation-info';
15+
import { writeImportMap } from './write-import-map';
1616

1717
export interface BuildParams {
1818
skipMappingsAndExposed: boolean;
19+
skipShared: boolean;
1920
}
2021

2122
export const defaultBuildParams: BuildParams = {
2223
skipMappingsAndExposed: false,
24+
skipShared: false,
2325
};
2426

27+
let sharedPackageInfoCache: SharedInfo[] = [];
28+
2529
export async function buildForFederation(
2630
config: NormalizedFederationConfig,
2731
fedOptions: FederationOptions,
@@ -42,58 +46,64 @@ export async function buildForFederation(
4246
? describeExposed(config, fedOptions)
4347
: artefactInfo.exposes;
4448

45-
const { sharedBrowser, sharedServer, separateBrowser, separateServer } =
46-
splitShared(config.shared);
49+
if (!buildParams.skipShared) {
50+
const { sharedBrowser, sharedServer, separateBrowser, separateServer } =
51+
splitShared(config.shared);
4752

48-
const sharedPackageInfoBrowser = await bundleShared(
49-
sharedBrowser,
50-
config,
51-
fedOptions,
52-
externals,
53-
'browser'
54-
);
53+
const sharedPackageInfoBrowser = await bundleShared(
54+
sharedBrowser,
55+
config,
56+
fedOptions,
57+
externals,
58+
'browser'
59+
);
5560

56-
const sharedPackageInfoServer = await bundleShared(
57-
sharedServer,
58-
config,
59-
fedOptions,
60-
externals,
61-
'node'
62-
);
61+
const sharedPackageInfoServer = await bundleShared(
62+
sharedServer,
63+
config,
64+
fedOptions,
65+
externals,
66+
'node'
67+
);
6368

64-
const separatePackageInfoBrowser = await bundleSeparate(
65-
separateBrowser,
66-
externals,
67-
config,
68-
fedOptions,
69-
'browser'
70-
);
69+
const separatePackageInfoBrowser = await bundleSeparate(
70+
separateBrowser,
71+
externals,
72+
config,
73+
fedOptions,
74+
'browser'
75+
);
7176

72-
const separatePackageInfoServer = await bundleSeparate(
73-
separateServer,
74-
externals,
75-
config,
76-
fedOptions,
77-
'node'
78-
);
79-
80-
const sharedPackageInfo = [
81-
...sharedPackageInfoBrowser,
82-
...sharedPackageInfoServer,
83-
...separatePackageInfoBrowser,
84-
...separatePackageInfoServer,
85-
];
77+
const separatePackageInfoServer = await bundleSeparate(
78+
separateServer,
79+
externals,
80+
config,
81+
fedOptions,
82+
'node'
83+
);
84+
85+
sharedPackageInfoCache = [
86+
...sharedPackageInfoBrowser,
87+
...sharedPackageInfoServer,
88+
...separatePackageInfoBrowser,
89+
...separatePackageInfoServer,
90+
];
91+
}
8692

8793
const sharedMappingInfo = !artefactInfo
8894
? describeSharedMappings(config, fedOptions)
8995
: artefactInfo.mappings;
9096

91-
const sharedInfo = [...sharedPackageInfo, ...sharedMappingInfo];
92-
97+
const sharedInfo = [...sharedPackageInfoCache, ...sharedMappingInfo];
98+
const buildNotificationsEndpoint =
99+
fedOptions.buildNotifications?.enable && fedOptions.dev
100+
? fedOptions.buildNotifications?.endpoint
101+
: undefined;
93102
const federationInfo: FederationInfo = {
94103
name: config.name,
95104
shared: sharedInfo,
96105
exposes: exposedInfo,
106+
buildNotificationsEndpoint,
97107
};
98108

99109
writeFederationInfo(federationInfo, fedOptions);

libs/native-federation-core/src/lib/core/bundle-exposed-and-mappings.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export async function bundleExposedAndMappings(
5050
mappedPaths: config.sharedMappings,
5151
kind: 'mapping-or-exposed',
5252
hash,
53+
optimizedMappings: config.features.ignoreUnusedDeps,
5354
});
5455

5556
const resultMap = createBuildResultMap(result, hash);

0 commit comments

Comments
 (0)