Skip to content

Commit 813aa39

Browse files
committed
Step 2 - Trigger update process for test-shared-library changes
1 parent 4cb0d4d commit 813aa39

File tree

4 files changed

+59
-4
lines changed

4 files changed

+59
-4
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
export const IMPORT_MAP = 'IMPORT_MAP';
22
export const CACHE_FILE = 'CACHE_FILE';
3+
export const CLEAR_REMOTE = 'CLEAR_REMOTE';

libs/nx-angular-mf/src/builders/custom-loader/custom-loader-serve.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,13 @@ export async function resolve(
131131

132132
const specifierUrl = new URL(specifier, fakeRootPath);
133133

134+
const cacheFiles = await getCacheFiles();
135+
const dataFromCache = cacheFiles.get(importMapName);
136+
137+
if (dataFromCache && dataFromCache.hash) {
138+
specifierUrl.searchParams.set('v', dataFromCache.hash);
139+
}
140+
134141
return {
135142
url: specifierUrl.toString(),
136143
shortCircuit: true,

libs/nx-angular-mf/src/builders/helpers/utils.ts

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
import { getSystemPath, normalize } from '@angular-devkit/core';
2-
import { workspaceRoot, readJsonFile } from '@nx/devkit';
2+
import { workspaceRoot, readJsonFile, normalizePath } from '@nx/devkit';
33
import { join, sep } from 'path';
44
import { ConfigMf, DataForImportMap } from '../types';
55
import { getMapName } from './dependencies';
66
import { existsSync } from 'fs';
77
import { pathToFileURL } from 'node:url';
88
import { PREF } from '../custom-loader/patch-vite-dev-server';
9+
// @ts-expect-error need only type
10+
import { ViteDevServer } from 'vite';
11+
// @ts-expect-error need only type
12+
import type { ɵdestroyAngularServerApp as destroyAngularServerApp } from '@angular/ssr';
913

1014
export const workspaceRootPath = getSystemPath(normalize(workspaceRoot));
1115

@@ -87,3 +91,26 @@ export function getPathForRegister(
8791
fileName: `.${sep}${fileName}`,
8892
};
8993
}
94+
95+
export async function reloadDevServer(server: ViteDevServer) {
96+
(
97+
server.moduleGraph.getModulesByFile(
98+
normalizePath(join(server.config.root, '/main.js'))
99+
) || []
100+
).forEach((m) => server.moduleGraph.invalidateModule(m));
101+
102+
const { ɵdestroyAngularServerApp } = (await server.ssrLoadModule(
103+
'/main.server.mjs'
104+
)) as {
105+
ɵdestroyAngularServerApp: typeof destroyAngularServerApp;
106+
};
107+
108+
ɵdestroyAngularServerApp();
109+
110+
(
111+
server.moduleGraph.getModulesByFile(
112+
normalizePath(join(server.config.root, '/main.server.mjs'))
113+
) || []
114+
).forEach((m) => server.moduleGraph.invalidateModule(m));
115+
await server.ssrLoadModule('/main.server.mjs');
116+
}

libs/nx-angular-mf/src/builders/serve/index.ts

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,14 @@ import {
1919
indexHtml,
2020
loadModule,
2121
patchBuilderContext,
22-
prepareConfig
22+
prepareConfig, reloadDevServer
2323
} from '../helpers';
2424
import { entryPointForExtendDependencies, importMapConfigPlugin } from '../es-plugin';
2525
import { register } from 'node:module';
26-
import { CACHE_FILE, IMPORT_MAP } from '../custom-loader/constants';
26+
import { CACHE_FILE, CLEAR_REMOTE, IMPORT_MAP } from '../custom-loader/constants';
2727
import { OutputFileRecord } from '../types';
28+
import process from 'node:process';
29+
import { loadEsmModule } from '../custom-loader/custom-loader-utils';
2830

2931
const { port1, port2 } = new MessageChannel();
3032

@@ -54,12 +56,17 @@ function getBuilderAction(
5456
yield result;
5557
continue;
5658
}
57-
59+
let needUpdate = false;
5860
for (const [key, file] of Object.entries(result.files)) {
5961
if (key.endsWith('.js.map')) continue;
6062
const name = key.split('.').at(0);
6163
const shareObject = mapShareObject.get(name);
6264
if (file.origin === 'memory' && shareObject) {
65+
const prevVersion = fileFromEsBuild.get(name);
66+
if (!needUpdate) {
67+
needUpdate = prevVersion && prevVersion.hash !== file.hash;
68+
}
69+
6370
fileFromEsBuild.set(name, {
6471
contents: file.contents,
6572
size: file.contents.byteLength,
@@ -69,12 +76,25 @@ function getBuilderAction(
6976
});
7077
}
7178
}
79+
if (needUpdate) {
80+
process.nextTick(handleUpdate);
81+
}
7282
port1.postMessage({ kind: CACHE_FILE, result: fileFromEsBuild });
7383
yield result;
7484
}
7585
};
7686
}
7787

88+
async function handleUpdate() {
89+
const server = await loadEsmModule<typeof import('vite')>('vite').then(
90+
(r) => r.default['serverFromPatch']
91+
);
92+
port1.postMessage({
93+
kind: CLEAR_REMOTE,
94+
});
95+
await reloadDevServer(server);
96+
}
97+
7898
export async function* runBuilder(
7999
options: ServeExecutorSchema,
80100
context: BuilderContext

0 commit comments

Comments
 (0)