piral-cli 0.15.0-beta.4512 → 0.15.0-beta.4544
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.
|
@@ -6,7 +6,7 @@ import { Bundler } from '../types';
|
|
|
6
6
|
interface Pilet {
|
|
7
7
|
bundler: Bundler;
|
|
8
8
|
root: string;
|
|
9
|
-
|
|
9
|
+
getMeta(basePath: string): PiletMetadata;
|
|
10
10
|
}
|
|
11
11
|
export interface PiletInjectorConfig extends KrasInjectorConfig {
|
|
12
12
|
pilets: Array<Pilet>;
|
|
@@ -23,21 +23,22 @@ interface PiletMetadata {
|
|
|
23
23
|
}
|
|
24
24
|
export default class PiletInjector implements KrasInjector {
|
|
25
25
|
config: PiletInjectorConfig;
|
|
26
|
-
private
|
|
26
|
+
private serverConfig;
|
|
27
27
|
private indexPath;
|
|
28
|
-
constructor(
|
|
28
|
+
constructor(config: PiletInjectorConfig, serverConfig: KrasConfiguration, core: EventEmitter);
|
|
29
29
|
get active(): boolean;
|
|
30
30
|
set active(value: boolean);
|
|
31
31
|
get name(): string;
|
|
32
32
|
getOptions(): {};
|
|
33
33
|
setOptions(): void;
|
|
34
|
-
|
|
34
|
+
getPiletApi(baseUrl: string): string;
|
|
35
|
+
getMeta(baseUrl: string): Promise<string>;
|
|
35
36
|
loadRemoteFeed(feed?: string | Array<string>): Promise<Array<Array<PiletMetadata>>>;
|
|
36
37
|
mergePilets(localPilets: Array<PiletMetadata>, remoteFeeds: Array<Array<PiletMetadata>>): PiletMetadata[];
|
|
37
38
|
sendContent(content: Buffer | string, type: string, url: string): KrasResponse;
|
|
38
39
|
sendFile(target: string, url: string): KrasResponse;
|
|
39
|
-
sendResponse(path: string, url: string): Promise<KrasResult>;
|
|
40
|
-
sendIndexFile(target: string, url: string): KrasResponse;
|
|
40
|
+
sendResponse(path: string, url: string, baseUrl: string): Promise<KrasResult>;
|
|
41
|
+
sendIndexFile(target: string, url: string, baseUrl: string): KrasResponse;
|
|
41
42
|
handle(req: KrasRequest): KrasResponse;
|
|
42
43
|
}
|
|
43
44
|
export {};
|
|
@@ -16,8 +16,7 @@ const log_1 = require("../common/log");
|
|
|
16
16
|
const spec_1 = require("../common/spec");
|
|
17
17
|
const config_1 = require("../common/config");
|
|
18
18
|
const external_1 = require("../external");
|
|
19
|
-
|
|
20
|
-
function fillPiletMeta(pilet, basePath, metaFile) {
|
|
19
|
+
function fillPiletMeta(pilet, metaFile, subPath) {
|
|
21
20
|
const { root, bundler } = pilet;
|
|
22
21
|
const metaPath = (0, path_1.join)(root, metaFile);
|
|
23
22
|
const packagePath = (0, path_1.join)(root, 'package.json');
|
|
@@ -25,10 +24,11 @@ function fillPiletMeta(pilet, basePath, metaFile) {
|
|
|
25
24
|
const metaOverride = (0, fs_1.existsSync)(metaPath) ? external_1.jju.parse((0, fs_1.readFileSync)(metaPath, 'utf8')) : undefined;
|
|
26
25
|
const file = bundler.bundle.name.replace(/^[\/\\]/, '');
|
|
27
26
|
const target = (0, path_1.join)(bundler.bundle.dir, file);
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
pilet.getMeta = (parentPath) => {
|
|
28
|
+
const basePath = `${parentPath}${subPath}`;
|
|
29
|
+
const url = new url_1.URL(file, basePath);
|
|
30
|
+
return Object.assign(Object.assign(Object.assign({ custom: def.custom, config: def.piletConfig }, metaOverride), { name: def.name, version: def.version, link: `${url.href}?updated=${Date.now()}` }), (0, spec_1.getPiletSpecMeta)(target, basePath));
|
|
31
|
+
};
|
|
32
32
|
}
|
|
33
33
|
function loadFeed(feed) {
|
|
34
34
|
var _a;
|
|
@@ -51,29 +51,31 @@ function loadFeed(feed) {
|
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
53
|
class PiletInjector {
|
|
54
|
-
constructor(
|
|
55
|
-
this.config =
|
|
54
|
+
constructor(config, serverConfig, core) {
|
|
55
|
+
this.config = config;
|
|
56
|
+
this.serverConfig = serverConfig;
|
|
56
57
|
if (this.config.active) {
|
|
57
|
-
|
|
58
|
-
this.piletApi = /^https?:/.test(options.api)
|
|
59
|
-
? options.api
|
|
60
|
-
: `${config.ssl ? 'https' : 'http'}://${host}:${config.port}${options.api}`;
|
|
61
|
-
const { pilets, api, publicUrl } = options;
|
|
58
|
+
const { pilets, api, publicUrl } = config;
|
|
62
59
|
this.indexPath = `${publicUrl}index.html`;
|
|
63
60
|
const cbs = {};
|
|
64
61
|
core.on('user-connected', (e) => {
|
|
65
62
|
if (e.target === '*' && e.url === api.substring(1)) {
|
|
66
|
-
cbs[e.id] =
|
|
63
|
+
cbs[e.id] = {
|
|
64
|
+
baseUrl: e.req.headers.origin,
|
|
65
|
+
notify: (msg) => e.ws.send(msg),
|
|
66
|
+
};
|
|
67
67
|
}
|
|
68
68
|
});
|
|
69
69
|
core.on('user-disconnected', (e) => {
|
|
70
70
|
delete cbs[e.id];
|
|
71
71
|
});
|
|
72
72
|
pilets.forEach((p, i) => p.bundler.on(() => {
|
|
73
|
-
|
|
74
|
-
const meta = fillPiletMeta(p, basePath, options.meta);
|
|
73
|
+
fillPiletMeta(p, config.meta, `/${i}/`);
|
|
75
74
|
for (const id of Object.keys(cbs)) {
|
|
76
|
-
cbs[id]
|
|
75
|
+
const { baseUrl, notify } = cbs[id];
|
|
76
|
+
const basePath = this.getPiletApi(baseUrl);
|
|
77
|
+
const meta = JSON.stringify(p.getMeta(basePath));
|
|
78
|
+
notify(meta);
|
|
77
79
|
}
|
|
78
80
|
}));
|
|
79
81
|
}
|
|
@@ -91,10 +93,24 @@ class PiletInjector {
|
|
|
91
93
|
return {};
|
|
92
94
|
}
|
|
93
95
|
setOptions() { }
|
|
94
|
-
|
|
96
|
+
getPiletApi(baseUrl) {
|
|
97
|
+
const { api } = this.config;
|
|
98
|
+
if (/^https?:/.test(api)) {
|
|
99
|
+
return api;
|
|
100
|
+
}
|
|
101
|
+
else if (baseUrl) {
|
|
102
|
+
return `${baseUrl}${api}`;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
const { ssl, port } = this.serverConfig;
|
|
106
|
+
const { host } = config_1.config;
|
|
107
|
+
return `${ssl ? 'https' : 'http'}://${host}:${port}${api}`;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
getMeta(baseUrl) {
|
|
95
111
|
return __awaiter(this, void 0, void 0, function* () {
|
|
96
112
|
const { pilets, feed } = this.config;
|
|
97
|
-
const localPilets = pilets.map((pilet) => pilet.
|
|
113
|
+
const localPilets = pilets.map((pilet) => { var _a; return (_a = pilet.getMeta) === null || _a === void 0 ? void 0 : _a.call(pilet, baseUrl); }).filter(Boolean);
|
|
98
114
|
const mergedPilets = this.mergePilets(localPilets, yield this.loadRemoteFeed(feed));
|
|
99
115
|
return JSON.stringify(mergedPilets);
|
|
100
116
|
});
|
|
@@ -136,7 +152,7 @@ class PiletInjector {
|
|
|
136
152
|
const type = (_a = external_1.mime.getType(target)) !== null && _a !== void 0 ? _a : 'application/octet-stream';
|
|
137
153
|
return this.sendContent(content, type, url);
|
|
138
154
|
}
|
|
139
|
-
sendResponse(path, url) {
|
|
155
|
+
sendResponse(path, url, baseUrl) {
|
|
140
156
|
return __awaiter(this, void 0, void 0, function* () {
|
|
141
157
|
const { pilets } = this.config;
|
|
142
158
|
const [index, ...rest] = path.split('/');
|
|
@@ -144,7 +160,7 @@ class PiletInjector {
|
|
|
144
160
|
const bundler = pilet === null || pilet === void 0 ? void 0 : pilet.bundler;
|
|
145
161
|
if (!path) {
|
|
146
162
|
yield (bundler === null || bundler === void 0 ? void 0 : bundler.ready());
|
|
147
|
-
const content = yield this.getMeta();
|
|
163
|
+
const content = yield this.getMeta(baseUrl);
|
|
148
164
|
return this.sendContent(content, 'application/json', url);
|
|
149
165
|
}
|
|
150
166
|
else {
|
|
@@ -157,10 +173,10 @@ class PiletInjector {
|
|
|
157
173
|
}
|
|
158
174
|
});
|
|
159
175
|
}
|
|
160
|
-
sendIndexFile(target, url) {
|
|
176
|
+
sendIndexFile(target, url, baseUrl) {
|
|
161
177
|
const indexHtml = (0, fs_1.readFileSync)(target, 'utf8');
|
|
162
178
|
// mechanism to inject server side debug piletApi config into piral emulator
|
|
163
|
-
const windowInjectionScript = `window['dbg:pilet-api'] = '${this.
|
|
179
|
+
const windowInjectionScript = `window['dbg:pilet-api'] = '${this.getPiletApi(baseUrl)}';`;
|
|
164
180
|
const findStr = `<script`;
|
|
165
181
|
const replaceStr = `<script>/* Pilet Debugging Emulator Config Injection */${windowInjectionScript}</script><script`;
|
|
166
182
|
const content = indexHtml.replace(`${findStr}`, `${replaceStr}`);
|
|
@@ -168,13 +184,14 @@ class PiletInjector {
|
|
|
168
184
|
}
|
|
169
185
|
handle(req) {
|
|
170
186
|
const { app, api, publicUrl } = this.config;
|
|
187
|
+
const baseUrl = req.headers.host ? `${req.encrypted ? 'https' : 'http'}://${req.headers.host}` : undefined;
|
|
171
188
|
if (!req.target) {
|
|
172
189
|
if (req.url.startsWith(publicUrl)) {
|
|
173
190
|
const path = req.url.substring(publicUrl.length).split('?')[0];
|
|
174
191
|
const target = (0, path_1.join)(app, path);
|
|
175
192
|
if ((0, fs_1.existsSync)(target) && (0, fs_1.statSync)(target).isFile()) {
|
|
176
193
|
if (req.url === this.indexPath) {
|
|
177
|
-
return this.sendIndexFile(target, req.url);
|
|
194
|
+
return this.sendIndexFile(target, req.url, baseUrl);
|
|
178
195
|
}
|
|
179
196
|
else {
|
|
180
197
|
return this.sendFile(target, req.url);
|
|
@@ -188,7 +205,7 @@ class PiletInjector {
|
|
|
188
205
|
}
|
|
189
206
|
else if (req.target === api) {
|
|
190
207
|
const path = req.url.substring(1).split('?')[0];
|
|
191
|
-
return this.sendResponse(path, req.url);
|
|
208
|
+
return this.sendResponse(path, req.url, baseUrl);
|
|
192
209
|
}
|
|
193
210
|
}
|
|
194
211
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pilet-injector.js","sourceRoot":"","sources":["../../src/injectors/pilet-injector.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,6BAA0B;AAC1B,+BAA4B;AAE5B,2BAAwD;AAExD,uCAAoC;AACpC,yCAAkD;AAClD,
|
|
1
|
+
{"version":3,"file":"pilet-injector.js","sourceRoot":"","sources":["../../src/injectors/pilet-injector.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "piral-cli",
|
|
3
|
-
"version": "0.15.0-beta.
|
|
3
|
+
"version": "0.15.0-beta.4544",
|
|
4
4
|
"description": "The standard CLI for creating and building a Piral instance or a Pilet.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"portal",
|
|
@@ -78,5 +78,5 @@
|
|
|
78
78
|
"typescript": "^4.7.3",
|
|
79
79
|
"yargs": "^15.4.1"
|
|
80
80
|
},
|
|
81
|
-
"gitHead": "
|
|
81
|
+
"gitHead": "d128ed2e80430bbedcc16644455dd47c958addfc"
|
|
82
82
|
}
|
|
@@ -5,11 +5,9 @@ import PiletInjector from './pilet-injector';
|
|
|
5
5
|
const optionsMock = {
|
|
6
6
|
pilets: [],
|
|
7
7
|
publicUrl: '/',
|
|
8
|
-
meta: 'debug-meta.json',
|
|
9
8
|
api: '',
|
|
10
9
|
app: '',
|
|
11
10
|
active: true,
|
|
12
|
-
publicUrl: '/',
|
|
13
11
|
meta: '',
|
|
14
12
|
headers: {},
|
|
15
13
|
};
|
|
@@ -35,7 +33,7 @@ describe('Piral-CLI piral injector', () => {
|
|
|
35
33
|
injector.name;
|
|
36
34
|
injector.getOptions();
|
|
37
35
|
//injector.getMetaOf(0);
|
|
38
|
-
injector.getMeta();
|
|
36
|
+
injector.getMeta('http://localhost:9000');
|
|
39
37
|
|
|
40
38
|
// Assert
|
|
41
39
|
expect(injector.active).toBeFalsy();
|
|
@@ -78,7 +76,7 @@ describe('Piral-CLI piral injector', () => {
|
|
|
78
76
|
const injector = new PiletInjector(optionsMock, configMock, core);
|
|
79
77
|
|
|
80
78
|
// Act
|
|
81
|
-
const res = await injector.sendResponse('some/nice/invalid/path', 'localhost:1234');
|
|
79
|
+
const res = await injector.sendResponse('some/nice/invalid/path', 'localhost:1234', 'http://localhost:9000');
|
|
82
80
|
|
|
83
81
|
// Assert
|
|
84
82
|
expect(res).toBeUndefined();
|
|
@@ -88,8 +86,6 @@ describe('Piral-CLI piral injector', () => {
|
|
|
88
86
|
// Arrange
|
|
89
87
|
const optionsMock = {
|
|
90
88
|
pilets: [],
|
|
91
|
-
meta: 'debug-meta.json',
|
|
92
|
-
publicUrl: '/',
|
|
93
89
|
api: 'http://someFakeApi:1234',
|
|
94
90
|
app: '',
|
|
95
91
|
publicUrl: '/',
|
|
@@ -120,8 +116,6 @@ describe('Piral-CLI piral injector', () => {
|
|
|
120
116
|
// Arrange
|
|
121
117
|
const optionsMock = {
|
|
122
118
|
pilets: [],
|
|
123
|
-
meta: 'debug-meta.json',
|
|
124
|
-
publicUrl: '/',
|
|
125
119
|
api: 'http://someFakeApi:1234',
|
|
126
120
|
app: '',
|
|
127
121
|
publicUrl: '/',
|
|
@@ -5,16 +5,14 @@ import { readFileSync, existsSync, statSync } from 'fs';
|
|
|
5
5
|
import { KrasInjector, KrasResponse, KrasRequest, KrasInjectorConfig, KrasConfiguration, KrasResult } from 'kras';
|
|
6
6
|
import { log } from '../common/log';
|
|
7
7
|
import { getPiletSpecMeta } from '../common/spec';
|
|
8
|
-
import { config } from '../common/config';
|
|
8
|
+
import { config as commonConfig } from '../common/config';
|
|
9
9
|
import { axios, mime, jju } from '../external';
|
|
10
10
|
import { Bundler } from '../types';
|
|
11
11
|
|
|
12
|
-
const { host } = config;
|
|
13
|
-
|
|
14
12
|
interface Pilet {
|
|
15
13
|
bundler: Bundler;
|
|
16
14
|
root: string;
|
|
17
|
-
|
|
15
|
+
getMeta(basePath: string): PiletMetadata;
|
|
18
16
|
}
|
|
19
17
|
|
|
20
18
|
export interface PiletInjectorConfig extends KrasInjectorConfig {
|
|
@@ -32,7 +30,7 @@ interface PiletMetadata {
|
|
|
32
30
|
[key: string]: unknown;
|
|
33
31
|
}
|
|
34
32
|
|
|
35
|
-
function fillPiletMeta(pilet: Pilet,
|
|
33
|
+
function fillPiletMeta(pilet: Pilet, metaFile: string, subPath: string) {
|
|
36
34
|
const { root, bundler } = pilet;
|
|
37
35
|
const metaPath = join(root, metaFile);
|
|
38
36
|
const packagePath = join(root, 'package.json');
|
|
@@ -40,19 +38,21 @@ function fillPiletMeta(pilet: Pilet, basePath: string, metaFile: string) {
|
|
|
40
38
|
const metaOverride = existsSync(metaPath) ? jju.parse(readFileSync(metaPath, 'utf8')) : undefined;
|
|
41
39
|
const file = bundler.bundle.name.replace(/^[\/\\]/, '');
|
|
42
40
|
const target = join(bundler.bundle.dir, file);
|
|
43
|
-
const url = new URL(file, basePath);
|
|
44
|
-
const meta = {
|
|
45
|
-
custom: def.custom,
|
|
46
|
-
config: def.piletConfig,
|
|
47
|
-
...metaOverride,
|
|
48
|
-
name: def.name,
|
|
49
|
-
version: def.version,
|
|
50
|
-
link: `${url.href}?updated=${Date.now()}`,
|
|
51
|
-
...getPiletSpecMeta(target, basePath),
|
|
52
|
-
};
|
|
53
41
|
|
|
54
|
-
pilet.
|
|
55
|
-
|
|
42
|
+
pilet.getMeta = (parentPath) => {
|
|
43
|
+
const basePath = `${parentPath}${subPath}`;
|
|
44
|
+
const url = new URL(file, basePath);
|
|
45
|
+
|
|
46
|
+
return {
|
|
47
|
+
custom: def.custom,
|
|
48
|
+
config: def.piletConfig,
|
|
49
|
+
...metaOverride,
|
|
50
|
+
name: def.name,
|
|
51
|
+
version: def.version,
|
|
52
|
+
link: `${url.href}?updated=${Date.now()}`,
|
|
53
|
+
...getPiletSpecMeta(target, basePath),
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
async function loadFeed(feed: string) {
|
|
@@ -75,25 +75,24 @@ async function loadFeed(feed: string) {
|
|
|
75
75
|
|
|
76
76
|
export default class PiletInjector implements KrasInjector {
|
|
77
77
|
public config: PiletInjectorConfig;
|
|
78
|
-
private
|
|
78
|
+
private serverConfig: KrasConfiguration;
|
|
79
79
|
private indexPath: string;
|
|
80
80
|
|
|
81
|
-
constructor(
|
|
82
|
-
this.config =
|
|
81
|
+
constructor(config: PiletInjectorConfig, serverConfig: KrasConfiguration, core: EventEmitter) {
|
|
82
|
+
this.config = config;
|
|
83
|
+
this.serverConfig = serverConfig;
|
|
83
84
|
|
|
84
85
|
if (this.config.active) {
|
|
85
|
-
|
|
86
|
-
this.piletApi = /^https?:/.test(options.api)
|
|
87
|
-
? options.api
|
|
88
|
-
: `${config.ssl ? 'https' : 'http'}://${host}:${config.port}${options.api}`;
|
|
89
|
-
|
|
90
|
-
const { pilets, api, publicUrl } = options;
|
|
86
|
+
const { pilets, api, publicUrl } = config;
|
|
91
87
|
this.indexPath = `${publicUrl}index.html`;
|
|
92
88
|
const cbs = {};
|
|
93
89
|
|
|
94
90
|
core.on('user-connected', (e) => {
|
|
95
91
|
if (e.target === '*' && e.url === api.substring(1)) {
|
|
96
|
-
cbs[e.id] =
|
|
92
|
+
cbs[e.id] = {
|
|
93
|
+
baseUrl: e.req.headers.origin,
|
|
94
|
+
notify: (msg: string) => e.ws.send(msg),
|
|
95
|
+
};
|
|
97
96
|
}
|
|
98
97
|
});
|
|
99
98
|
|
|
@@ -103,11 +102,13 @@ export default class PiletInjector implements KrasInjector {
|
|
|
103
102
|
|
|
104
103
|
pilets.forEach((p, i) =>
|
|
105
104
|
p.bundler.on(() => {
|
|
106
|
-
|
|
107
|
-
const meta = fillPiletMeta(p, basePath, options.meta);
|
|
105
|
+
fillPiletMeta(p, config.meta, `/${i}/`);
|
|
108
106
|
|
|
109
107
|
for (const id of Object.keys(cbs)) {
|
|
110
|
-
cbs[id]
|
|
108
|
+
const { baseUrl, notify } = cbs[id];
|
|
109
|
+
const basePath = this.getPiletApi(baseUrl);
|
|
110
|
+
const meta = JSON.stringify(p.getMeta(basePath));
|
|
111
|
+
notify(meta);
|
|
111
112
|
}
|
|
112
113
|
}),
|
|
113
114
|
);
|
|
@@ -132,9 +133,23 @@ export default class PiletInjector implements KrasInjector {
|
|
|
132
133
|
|
|
133
134
|
setOptions() {}
|
|
134
135
|
|
|
135
|
-
|
|
136
|
+
getPiletApi(baseUrl: string) {
|
|
137
|
+
const { api } = this.config;
|
|
138
|
+
|
|
139
|
+
if (/^https?:/.test(api)) {
|
|
140
|
+
return api;
|
|
141
|
+
} else if (baseUrl) {
|
|
142
|
+
return `${baseUrl}${api}`;
|
|
143
|
+
} else {
|
|
144
|
+
const { ssl, port } = this.serverConfig;
|
|
145
|
+
const { host } = commonConfig;
|
|
146
|
+
return `${ssl ? 'https' : 'http'}://${host}:${port}${api}`;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
async getMeta(baseUrl: string) {
|
|
136
151
|
const { pilets, feed } = this.config;
|
|
137
|
-
const localPilets = pilets.map((pilet) => pilet.
|
|
152
|
+
const localPilets = pilets.map((pilet) => pilet.getMeta?.(baseUrl)).filter(Boolean);
|
|
138
153
|
const mergedPilets = this.mergePilets(localPilets, await this.loadRemoteFeed(feed));
|
|
139
154
|
return JSON.stringify(mergedPilets);
|
|
140
155
|
}
|
|
@@ -187,7 +202,7 @@ export default class PiletInjector implements KrasInjector {
|
|
|
187
202
|
return this.sendContent(content, type, url);
|
|
188
203
|
}
|
|
189
204
|
|
|
190
|
-
async sendResponse(path: string, url: string): Promise<KrasResult> {
|
|
205
|
+
async sendResponse(path: string, url: string, baseUrl: string): Promise<KrasResult> {
|
|
191
206
|
const { pilets } = this.config;
|
|
192
207
|
const [index, ...rest] = path.split('/');
|
|
193
208
|
const pilet = pilets[+index];
|
|
@@ -195,7 +210,7 @@ export default class PiletInjector implements KrasInjector {
|
|
|
195
210
|
|
|
196
211
|
if (!path) {
|
|
197
212
|
await bundler?.ready();
|
|
198
|
-
const content = await this.getMeta();
|
|
213
|
+
const content = await this.getMeta(baseUrl);
|
|
199
214
|
return this.sendContent(content, 'application/json', url);
|
|
200
215
|
} else {
|
|
201
216
|
return bundler?.ready().then(() => {
|
|
@@ -208,11 +223,11 @@ export default class PiletInjector implements KrasInjector {
|
|
|
208
223
|
}
|
|
209
224
|
}
|
|
210
225
|
|
|
211
|
-
sendIndexFile(target: string, url: string): KrasResponse {
|
|
226
|
+
sendIndexFile(target: string, url: string, baseUrl: string): KrasResponse {
|
|
212
227
|
const indexHtml = readFileSync(target, 'utf8');
|
|
213
228
|
|
|
214
229
|
// mechanism to inject server side debug piletApi config into piral emulator
|
|
215
|
-
const windowInjectionScript = `window['dbg:pilet-api'] = '${this.
|
|
230
|
+
const windowInjectionScript = `window['dbg:pilet-api'] = '${this.getPiletApi(baseUrl)}';`;
|
|
216
231
|
const findStr = `<script`;
|
|
217
232
|
const replaceStr = `<script>/* Pilet Debugging Emulator Config Injection */${windowInjectionScript}</script><script`;
|
|
218
233
|
const content = indexHtml.replace(`${findStr}`, `${replaceStr}`);
|
|
@@ -222,6 +237,7 @@ export default class PiletInjector implements KrasInjector {
|
|
|
222
237
|
|
|
223
238
|
handle(req: KrasRequest): KrasResponse {
|
|
224
239
|
const { app, api, publicUrl } = this.config;
|
|
240
|
+
const baseUrl = req.headers.host ? `${req.encrypted ? 'https' : 'http'}://${req.headers.host}` : undefined;
|
|
225
241
|
|
|
226
242
|
if (!req.target) {
|
|
227
243
|
if (req.url.startsWith(publicUrl)) {
|
|
@@ -230,7 +246,7 @@ export default class PiletInjector implements KrasInjector {
|
|
|
230
246
|
|
|
231
247
|
if (existsSync(target) && statSync(target).isFile()) {
|
|
232
248
|
if (req.url === this.indexPath) {
|
|
233
|
-
return this.sendIndexFile(target, req.url);
|
|
249
|
+
return this.sendIndexFile(target, req.url, baseUrl);
|
|
234
250
|
} else {
|
|
235
251
|
return this.sendFile(target, req.url);
|
|
236
252
|
}
|
|
@@ -245,7 +261,7 @@ export default class PiletInjector implements KrasInjector {
|
|
|
245
261
|
return undefined;
|
|
246
262
|
} else if (req.target === api) {
|
|
247
263
|
const path = req.url.substring(1).split('?')[0];
|
|
248
|
-
return this.sendResponse(path, req.url);
|
|
264
|
+
return this.sendResponse(path, req.url, baseUrl);
|
|
249
265
|
}
|
|
250
266
|
}
|
|
251
267
|
}
|