@brightchain/brightchain-api-lib 0.23.18 → 0.23.19
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/package.json
CHANGED
package/src/lib/routers/app.d.ts
CHANGED
|
@@ -22,12 +22,29 @@ export declare class AppRouter<TID extends PlatformID = DefaultBackendIdType> ex
|
|
|
22
22
|
* Useful for wiring services (e.g. setSyncEventSystem) after construction.
|
|
23
23
|
*/
|
|
24
24
|
getBrightchainApiRouter(): ApiRouter<TID>;
|
|
25
|
+
/**
|
|
26
|
+
* Parses the webpack-generated index.html to extract the hashed script
|
|
27
|
+
* and stylesheet filenames. This is the most reliable way to serve the
|
|
28
|
+
* correct bundles since webpack already resolved the content hashes.
|
|
29
|
+
*
|
|
30
|
+
* Returns { scripts, stylesheets } arrays of filenames (relative paths).
|
|
31
|
+
* Returns empty arrays if index.html is missing or unparseable.
|
|
32
|
+
*/
|
|
33
|
+
private parseWebpackIndexHtml;
|
|
34
|
+
/**
|
|
35
|
+
* Finds Nx webpack hashed filenames in reactDistDir matching a pattern
|
|
36
|
+
* like main.{hash}.js or runtime.{hash}.js.
|
|
37
|
+
*/
|
|
38
|
+
private findHashedFiles;
|
|
25
39
|
/**
|
|
26
40
|
* Override the upstream's renderIndex to inject BrightChain-specific
|
|
27
41
|
* template locals (fontAwesomeKitId, custom tagline, etc.).
|
|
28
42
|
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
43
|
+
* Supports three bundle layouts:
|
|
44
|
+
* 1. Vite: hashed assets/index-[hash].js in assets/ dir
|
|
45
|
+
* 2. Nx webpack: hashed main.[hash].js + runtime.[hash].js in reactDistDir
|
|
46
|
+
* (detected by parsing the webpack-generated index.html)
|
|
47
|
+
* 3. Dev fallback: unhashed runtime.js + main.js + vendor.js
|
|
31
48
|
*/
|
|
32
49
|
renderIndex(req: Request, res: Response, next: NextFunction): void;
|
|
33
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/routers/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EACL,YAAY,EACZ,SAAS,IAAI,iBAAiB,EAC/B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAI1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC;;;;;GAKG;AACH,qBAAa,SAAS,CACpB,GAAG,SAAS,UAAU,GAAG,oBAAoB,CAC7C,SAAQ,iBAAiB,CAAC,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;IACjD;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAiB;gBAE1C,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC;IAKrC;;;OAGG;IACI,uBAAuB,IAAI,SAAS,CAAC,GAAG,CAAC;IAIhD
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/routers/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EACL,YAAY,EACZ,SAAS,IAAI,iBAAiB,EAC/B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAI1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC;;;;;GAKG;AACH,qBAAa,SAAS,CACpB,GAAG,SAAS,UAAU,GAAG,oBAAoB,CAC7C,SAAQ,iBAAiB,CAAC,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;IACjD;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAiB;gBAE1C,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC;IAKrC;;;OAGG;IACI,uBAAuB,IAAI,SAAS,CAAC,GAAG,CAAC;IAIhD;;;;;;;OAOG;IACH,OAAO,CAAC,qBAAqB;IA6B7B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAgBvB;;;;;;;;;OASG;IACa,WAAW,CACzB,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,IAAI;CAyDR"}
|
package/src/lib/routers/app.js
CHANGED
|
@@ -22,32 +22,112 @@ class AppRouter extends node_express_suite_1.AppRouter {
|
|
|
22
22
|
getBrightchainApiRouter() {
|
|
23
23
|
return this.brightchainApiRouter;
|
|
24
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Parses the webpack-generated index.html to extract the hashed script
|
|
27
|
+
* and stylesheet filenames. This is the most reliable way to serve the
|
|
28
|
+
* correct bundles since webpack already resolved the content hashes.
|
|
29
|
+
*
|
|
30
|
+
* Returns { scripts, stylesheets } arrays of filenames (relative paths).
|
|
31
|
+
* Returns empty arrays if index.html is missing or unparseable.
|
|
32
|
+
*/
|
|
33
|
+
parseWebpackIndexHtml() {
|
|
34
|
+
const indexHtmlPath = (0, path_1.join)(this.reactDistDir, 'index.html');
|
|
35
|
+
if (!(0, fs_1.existsSync)(indexHtmlPath)) {
|
|
36
|
+
return { scripts: [], stylesheets: [] };
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
const html = (0, fs_1.readFileSync)(indexHtmlPath, 'utf8');
|
|
40
|
+
// Match <script ... src="filename.js" ...>
|
|
41
|
+
const scriptRegex = /<script[^>]+src="([^"]+\.js)"[^>]*>/g;
|
|
42
|
+
const scripts = [];
|
|
43
|
+
let match;
|
|
44
|
+
while ((match = scriptRegex.exec(html)) !== null) {
|
|
45
|
+
scripts.push(match[1]);
|
|
46
|
+
}
|
|
47
|
+
// Match <link ... href="filename.css" ...>
|
|
48
|
+
const cssRegex = /<link[^>]+href="([^"]+\.css)"[^>]*>/g;
|
|
49
|
+
const stylesheets = [];
|
|
50
|
+
while ((match = cssRegex.exec(html)) !== null) {
|
|
51
|
+
stylesheets.push(match[1]);
|
|
52
|
+
}
|
|
53
|
+
return { scripts, stylesheets };
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return { scripts: [], stylesheets: [] };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Finds Nx webpack hashed filenames in reactDistDir matching a pattern
|
|
61
|
+
* like main.{hash}.js or runtime.{hash}.js.
|
|
62
|
+
*/
|
|
63
|
+
findHashedFiles(baseName, ext) {
|
|
64
|
+
try {
|
|
65
|
+
const pattern = new RegExp(`^${baseName}\\.[a-f0-9]+\\.${ext}$`);
|
|
66
|
+
const files = (0, fs_1.readdirSync)(this.reactDistDir, 'utf8');
|
|
67
|
+
// Sort descending by name to get the latest hash if multiple exist
|
|
68
|
+
return files.filter((f) => pattern.test(f)).sort().pop();
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
25
74
|
/**
|
|
26
75
|
* Override the upstream's renderIndex to inject BrightChain-specific
|
|
27
76
|
* template locals (fontAwesomeKitId, custom tagline, etc.).
|
|
28
77
|
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
78
|
+
* Supports three bundle layouts:
|
|
79
|
+
* 1. Vite: hashed assets/index-[hash].js in assets/ dir
|
|
80
|
+
* 2. Nx webpack: hashed main.[hash].js + runtime.[hash].js in reactDistDir
|
|
81
|
+
* (detected by parsing the webpack-generated index.html)
|
|
82
|
+
* 3. Dev fallback: unhashed runtime.js + main.js + vendor.js
|
|
31
83
|
*/
|
|
32
84
|
renderIndex(req, res, next) {
|
|
33
85
|
if (req.url.endsWith('.js')) {
|
|
34
86
|
res.type('application/javascript');
|
|
35
87
|
}
|
|
36
|
-
//
|
|
88
|
+
// Strategy 1: Vite — hashed bundle in assets/
|
|
37
89
|
const jsFile = this.getAssetFilename(this.assetsDir, /^index-.*\.js$/);
|
|
38
90
|
const cssFile = this.getAssetFilename(this.assetsDir, /^index-.*\.css$/);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
:
|
|
91
|
+
let devScripts = [];
|
|
92
|
+
let webpackCss = [];
|
|
93
|
+
if (!jsFile) {
|
|
94
|
+
// Strategy 2: Nx webpack — parse the generated index.html for hashed filenames.
|
|
95
|
+
// This is the authoritative source since webpack writes the correct references.
|
|
96
|
+
const { scripts, stylesheets } = this.parseWebpackIndexHtml();
|
|
97
|
+
webpackCss = stylesheets;
|
|
98
|
+
if (scripts.length > 0) {
|
|
99
|
+
// Webpack index.html found with hashed scripts — use them.
|
|
100
|
+
// Scripts are served from reactDistDir via the /static/js/ mount
|
|
101
|
+
// or directly if they're root-relative paths.
|
|
102
|
+
devScripts = scripts;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
// Strategy 3: Dev fallback — unhashed files.
|
|
106
|
+
// Also try to find hashed files directly in case index.html is missing.
|
|
107
|
+
const hashedRuntime = this.findHashedFiles('runtime', 'js');
|
|
108
|
+
const hashedMain = this.findHashedFiles('main', 'js');
|
|
109
|
+
if (hashedMain) {
|
|
110
|
+
// Prefer hashed files over unhashed
|
|
111
|
+
if (hashedRuntime)
|
|
112
|
+
devScripts.push(hashedRuntime);
|
|
113
|
+
devScripts.push(hashedMain);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
// True dev fallback: unhashed files
|
|
117
|
+
devScripts = ['runtime.js', 'main.js', 'vendor.js'].filter((f) => (0, fs_1.existsSync)((0, path_1.join)(this.reactDistDir, f)));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
43
121
|
const environment = this.application.environment;
|
|
44
122
|
const locals = {
|
|
45
123
|
...this.getBaseViewLocals(req, res),
|
|
46
124
|
fontawesomeKitId: environment.fontAwesomeKitId,
|
|
47
125
|
jsFile: jsFile ? `assets/${jsFile}` : undefined,
|
|
48
126
|
cssFile: cssFile ? `assets/${cssFile}` : undefined,
|
|
49
|
-
//
|
|
127
|
+
// Script list for non-Vite builds (hashed or dev)
|
|
50
128
|
devScripts,
|
|
129
|
+
// Additional CSS from webpack index.html
|
|
130
|
+
webpackCss,
|
|
51
131
|
};
|
|
52
132
|
this.renderTemplate(req, res, next, 'index', locals);
|
|
53
133
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/routers/app.ts"],"names":[],"mappings":";;;AACA,4EAG6C;AAE7C,
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/routers/app.ts"],"names":[],"mappings":"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"}
|