@stackbit/dev 0.0.3
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/dist/assets/loading-page.html +54 -0
- package/dist/config.d.ts +7 -0
- package/dist/config.js +9 -0
- package/dist/config.js.map +1 -0
- package/dist/consts.d.ts +12 -0
- package/dist/consts.js +47 -0
- package/dist/consts.js.map +1 -0
- package/dist/dev.d.ts +6 -0
- package/dist/dev.js +57 -0
- package/dist/dev.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +46 -0
- package/dist/index.js.map +1 -0
- package/dist/runner/index.d.ts +38 -0
- package/dist/runner/index.js +141 -0
- package/dist/runner/index.js.map +1 -0
- package/dist/runner/ssg.d.ts +9 -0
- package/dist/runner/ssg.js +15 -0
- package/dist/runner/ssg.js.map +1 -0
- package/dist/server/index.d.ts +7 -0
- package/dist/server/index.js +51 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/proxy.d.ts +2 -0
- package/dist/server/proxy.js +81 -0
- package/dist/server/proxy.js.map +1 -0
- package/dist/server/routes.d.ts +3 -0
- package/dist/server/routes.js +190 -0
- package/dist/server/routes.js.map +1 -0
- package/dist/services/api.d.ts +4 -0
- package/dist/services/api.js +15 -0
- package/dist/services/api.js.map +1 -0
- package/dist/services/file-watcher.d.ts +2 -0
- package/dist/services/file-watcher.js +42 -0
- package/dist/services/file-watcher.js.map +1 -0
- package/dist/services/logger.d.ts +6 -0
- package/dist/services/logger.js +35 -0
- package/dist/services/logger.js.map +1 -0
- package/dist/services/ngrok.d.ts +1 -0
- package/dist/services/ngrok.js +18 -0
- package/dist/services/ngrok.js.map +1 -0
- package/dist/services/user-config.d.ts +1 -0
- package/dist/services/user-config.js +16 -0
- package/dist/services/user-config.js.map +1 -0
- package/package.json +59 -0
- package/src/assets/loading-page.html +54 -0
- package/src/config.ts +6 -0
- package/src/consts.ts +44 -0
- package/src/dev.ts +65 -0
- package/src/index.ts +48 -0
- package/src/runner/index.ts +162 -0
- package/src/runner/ssg.ts +10 -0
- package/src/server/index.ts +65 -0
- package/src/server/proxy.ts +85 -0
- package/src/server/routes.ts +186 -0
- package/src/services/api.ts +10 -0
- package/src/services/file-watcher.ts +37 -0
- package/src/services/logger.ts +34 -0
- package/src/services/ngrok.ts +11 -0
- package/src/services/user-config.ts +14 -0
- package/src/types/http-proxy-middleware.d.ts +3 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<title>Stackbit</title>
|
|
6
|
+
<style type="text/css">
|
|
7
|
+
body {
|
|
8
|
+
margin: 0;
|
|
9
|
+
padding: 0;
|
|
10
|
+
}
|
|
11
|
+
#main-container {
|
|
12
|
+
color: #fff;
|
|
13
|
+
background: #22252d;
|
|
14
|
+
display: flex;
|
|
15
|
+
flex-direction: column;
|
|
16
|
+
align-items: center;
|
|
17
|
+
justify-content: center;
|
|
18
|
+
font-family: sans-serif;
|
|
19
|
+
height: 100vh;
|
|
20
|
+
text-align: center;
|
|
21
|
+
}
|
|
22
|
+
h1 {
|
|
23
|
+
font-weight: 400;
|
|
24
|
+
font-size: 34px;
|
|
25
|
+
}
|
|
26
|
+
#logo {
|
|
27
|
+
margin-bottom: 16px;
|
|
28
|
+
width: 78px;
|
|
29
|
+
height: 69px;
|
|
30
|
+
fill: #f25458;
|
|
31
|
+
}
|
|
32
|
+
#info-text a {
|
|
33
|
+
color: #fff;
|
|
34
|
+
}
|
|
35
|
+
</style>
|
|
36
|
+
</head>
|
|
37
|
+
<body>
|
|
38
|
+
<div id="main-container">
|
|
39
|
+
<svg id="logo" width="26" height="23" viewBox="0 0 23 23" fill="#fff"><path d="M5.728 0C4.533 0 3.387.47 2.542 1.304a4.426 4.426 0 00-1.32 3.149v6.68c0 .55.155 1.091.447 1.56.293.47.71.85 1.209 1.1l5.87 2.922V7.42h9.406L25.65 0H5.728z"></path><path d="M19.92 22.684a4.542 4.542 0 003.188-1.303 4.417 4.417 0 001.322-3.146v-6.672a2.951 2.951 0 00-.45-1.557 3.007 3.007 0 00-1.208-1.096L16.93 5.97v9.286H7.515L0 22.684h19.92z"></path></svg>
|
|
40
|
+
<h1>Local Server Unavailable</h1>
|
|
41
|
+
<div id="info-text">Is your site running and available at <a href="__URL__" target="_blank">__URL__</a>?</div>
|
|
42
|
+
</div>
|
|
43
|
+
<script type="application/javascript">
|
|
44
|
+
function poll() {
|
|
45
|
+
fetch('/', { method: 'HEAD' }).then((response) => {
|
|
46
|
+
window.location = "__PATH__";
|
|
47
|
+
}).catch(err => {
|
|
48
|
+
window.setTimeout(poll, 1000);
|
|
49
|
+
})
|
|
50
|
+
}
|
|
51
|
+
poll();
|
|
52
|
+
</script>
|
|
53
|
+
</body>
|
|
54
|
+
</html>
|
package/dist/config.d.ts
ADDED
package/dist/config.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = {
|
|
4
|
+
apiUrl: process.env.API_URL || 'https://api.stackbit.com',
|
|
5
|
+
appUrl: process.env.APP_URL || 'https://app.stackbit.com',
|
|
6
|
+
snippetUrl: process.env.SNIPPET_URL || 'https://app.stackbit.com/snippet.js',
|
|
7
|
+
logLevel: process.env.LOG_LEVEL || 'info'
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;AAAA,kBAAe;IACX,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,0BAA0B;IACzD,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,0BAA0B;IACzD,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,qCAAqC;IAC5E,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;CAC5C,CAAC"}
|
package/dist/consts.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
NEXTJS_SOURCEBIT_LIVE_UPDATE_PORT: number;
|
|
3
|
+
DEFAULT_DIRECT_PROXY_PATH: string[];
|
|
4
|
+
ASSET_ID_PREFIX: string;
|
|
5
|
+
STATIC_ASSETS_FILE_PATH: string;
|
|
6
|
+
STATIC_ASSETS_PUBLIC_PATH: string;
|
|
7
|
+
STATIC_THEME_ASSETS_FILE_PATH: string;
|
|
8
|
+
STATIC_THEME_ASSETS_PUBLIC_PATH: string;
|
|
9
|
+
STACKBIT_URL_PATH_FIELD: string;
|
|
10
|
+
DEFAULT_CONTENT_TYPE_EXTENSIONS: string[];
|
|
11
|
+
};
|
|
12
|
+
export default _default;
|
package/dist/consts.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = {
|
|
4
|
+
NEXTJS_SOURCEBIT_LIVE_UPDATE_PORT: 8088,
|
|
5
|
+
DEFAULT_DIRECT_PROXY_PATH: [
|
|
6
|
+
'/socket.io/**',
|
|
7
|
+
'/__webpack_hmr/**',
|
|
8
|
+
'/sockjs-node/**',
|
|
9
|
+
'**/*.js',
|
|
10
|
+
'**/*.js.map',
|
|
11
|
+
'**/*.css',
|
|
12
|
+
'**/*.css.map',
|
|
13
|
+
'**/*.json',
|
|
14
|
+
'**/*.png',
|
|
15
|
+
'**/*.jpg',
|
|
16
|
+
'**/*.jpeg',
|
|
17
|
+
'**/*.gif',
|
|
18
|
+
'**/*.svg',
|
|
19
|
+
'**/*.ico',
|
|
20
|
+
'**/*.pdf',
|
|
21
|
+
'**/*.otf',
|
|
22
|
+
'**/*.ttf',
|
|
23
|
+
'**/*.tif',
|
|
24
|
+
'**/*.tiff',
|
|
25
|
+
'**/*.mp4',
|
|
26
|
+
'**/*.mkv',
|
|
27
|
+
'**/*.mov',
|
|
28
|
+
'**/*.wmv',
|
|
29
|
+
'**/*.zip',
|
|
30
|
+
'**/*.xml',
|
|
31
|
+
'**/*.ppt',
|
|
32
|
+
'**/*.pptx',
|
|
33
|
+
'**/*.doc',
|
|
34
|
+
'**/*.docx',
|
|
35
|
+
'**/*.xls',
|
|
36
|
+
'**/*.xlsx',
|
|
37
|
+
'**/*.rtf'
|
|
38
|
+
],
|
|
39
|
+
ASSET_ID_PREFIX: 'stackbit_asset_id',
|
|
40
|
+
STATIC_ASSETS_FILE_PATH: '.cache/static-app-assets',
|
|
41
|
+
STATIC_ASSETS_PUBLIC_PATH: '/_static/app-assets',
|
|
42
|
+
STATIC_THEME_ASSETS_FILE_PATH: '.cache/static-theme-assets',
|
|
43
|
+
STATIC_THEME_ASSETS_PUBLIC_PATH: '/_static/theme-assets',
|
|
44
|
+
STACKBIT_URL_PATH_FIELD: 'stackbit_url_path',
|
|
45
|
+
DEFAULT_CONTENT_TYPE_EXTENSIONS: ['md', 'markdown', 'mdx', 'yml', 'yaml', 'json', 'toml']
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=consts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consts.js","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":";;AAAA,kBAAe;IACX,iCAAiC,EAAE,IAAI;IACvC,yBAAyB,EAAE;QACvB,eAAe;QACf,mBAAmB;QACnB,iBAAiB;QACjB,SAAS;QACT,aAAa;QACb,UAAU;QACV,cAAc;QACd,WAAW;QACX,UAAU;QACV,UAAU;QACV,WAAW;QACX,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;QACV,WAAW;QACX,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;QACV,WAAW;QACX,UAAU;QACV,WAAW;QACX,UAAU;QACV,WAAW;QACX,UAAU;KACb;IACD,eAAe,EAAE,mBAAmB;IACpC,uBAAuB,EAAE,0BAA0B;IACnD,yBAAyB,EAAE,qBAAqB;IAChD,6BAA6B,EAAE,4BAA4B;IAC3D,+BAA+B,EAAE,uBAAuB;IACxD,uBAAuB,EAAE,mBAAmB;IAC5C,+BAA+B,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;CAC5F,CAAC"}
|
package/dist/dev.d.ts
ADDED
package/dist/dev.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.start = void 0;
|
|
7
|
+
const url_1 = require("url");
|
|
8
|
+
const detect_port_1 = __importDefault(require("detect-port"));
|
|
9
|
+
const server_1 = require("./server");
|
|
10
|
+
const ngrok_1 = require("./services/ngrok");
|
|
11
|
+
const user_config_1 = require("./services/user-config");
|
|
12
|
+
const logger_1 = __importDefault(require("./services/logger"));
|
|
13
|
+
const api_1 = __importDefault(require("./services/api"));
|
|
14
|
+
const config_1 = __importDefault(require("./config"));
|
|
15
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
16
|
+
async function start({ ssgPort = 3000, ssgHost = 'localhost', rootDir = process.cwd(), runnableDir }) {
|
|
17
|
+
var _a;
|
|
18
|
+
logger_1.default.info('Site directory: ' + rootDir);
|
|
19
|
+
let serverPort = await (0, detect_port_1.default)(8090);
|
|
20
|
+
const userId = (0, user_config_1.getUserId)();
|
|
21
|
+
logger_1.default.debug('id: ' + userId);
|
|
22
|
+
let url;
|
|
23
|
+
try {
|
|
24
|
+
url = await (0, ngrok_1.createTunnel)(serverPort, logger_1.default);
|
|
25
|
+
logger_1.default.debug('Server created', { url });
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
logger_1.default.error('Error starting ngrok');
|
|
29
|
+
logger_1.default.debug('createTunnel failed', { err });
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
await (0, server_1.start)({ serverPort, ssgHost, ssgPort, rootDir, runnableDir });
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
logger_1.default.error('Error starting Stackbit dev server');
|
|
37
|
+
logger_1.default.debug('startServer failed', { err });
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
const localDetails = {
|
|
41
|
+
i: userId,
|
|
42
|
+
h: (_a = (0, url_1.parse)(url).hostname) === null || _a === void 0 ? void 0 : _a.split('.')[0],
|
|
43
|
+
v: require('../package.json').version
|
|
44
|
+
};
|
|
45
|
+
logger_1.default.debug('Local details', { localDetails });
|
|
46
|
+
const studioUrl = `${config_1.default.appUrl}/local/${Buffer.from(JSON.stringify(localDetails)).toString('base64')}`;
|
|
47
|
+
try {
|
|
48
|
+
await api_1.default.updateLocalDev(userId, localDetails);
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
logger_1.default.debug('updateLocalDev failed', { err });
|
|
52
|
+
}
|
|
53
|
+
logger_1.default.info(`Server started. Forwarding requests to: ${ssgHost}:${ssgPort}`);
|
|
54
|
+
logger_1.default.info(`Open ${chalk_1.default.bold(studioUrl)} in your browser`);
|
|
55
|
+
}
|
|
56
|
+
exports.start = start;
|
|
57
|
+
//# sourceMappingURL=dev.js.map
|
package/dist/dev.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../src/dev.ts"],"names":[],"mappings":";;;;;;AACA,6BAAwC;AACxC,8DAAqC;AAErC,qCAAgD;AAChD,4CAAgD;AAChD,wDAAmD;AACnD,+DAAuC;AACvC,yDAAwC;AACxC,sDAA8B;AAC9B,kDAA0B;AAEnB,KAAK,UAAU,KAAK,CAAC,EACxB,OAAO,GAAG,IAAI,EACd,OAAO,GAAG,WAAW,EACrB,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,EACvB,WAAW,EAMd;;IACG,gBAAM,CAAC,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,CAAC;IAE1C,IAAI,UAAU,GAAG,MAAM,IAAA,qBAAU,EAAC,IAAI,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,IAAA,uBAAS,GAAE,CAAC;IAC3B,gBAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAE9B,IAAI,GAAG,CAAC;IACR,IAAI;QACA,GAAG,GAAG,MAAM,IAAA,oBAAY,EAAC,UAAU,EAAE,gBAAM,CAAC,CAAC;QAC7C,gBAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;KAC3C;IAAC,OAAO,GAAG,EAAE;QACV,gBAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACrC,gBAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7C,OAAO,KAAK,CAAC;KAChB;IAED,IAAI;QACA,MAAM,IAAA,cAAW,EAAC,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;KAC7E;IAAC,OAAO,GAAG,EAAE;QACV,gBAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACnD,gBAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5C,OAAO,KAAK,CAAC;KAChB;IAED,MAAM,YAAY,GAAG;QACjB,CAAC,EAAE,MAAM;QACT,CAAC,EAAE,MAAA,IAAA,WAAQ,EAAC,GAAG,CAAC,CAAC,QAAQ,0CAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QACxC,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO;KACxC,CAAC;IAEF,gBAAM,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,GAAG,gBAAM,CAAC,MAAM,UAAU,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IAE3G,IAAI;QACA,MAAM,aAAU,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;KACzD;IAAC,OAAO,GAAG,EAAE;QACV,gBAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;KAClD;IAED,gBAAM,CAAC,IAAI,CAAC,2CAA2C,OAAO,IAAI,OAAO,EAAE,CAAC,CAAC;IAC7E,gBAAM,CAAC,IAAI,CAAC,QAAQ,eAAK,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;AACjE,CAAC;AApDD,sBAoDC"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const yargs_1 = __importDefault(require("yargs"));
|
|
8
|
+
(0, yargs_1.default)(process.argv.slice(2))
|
|
9
|
+
.command('$0', 'stackbit-dev', (yargs) => yargs
|
|
10
|
+
.option('port', {
|
|
11
|
+
alias: 'p',
|
|
12
|
+
description: 'port',
|
|
13
|
+
default: 3000
|
|
14
|
+
})
|
|
15
|
+
.options('host', {
|
|
16
|
+
alias: 'h',
|
|
17
|
+
description: 'hostname',
|
|
18
|
+
default: 'localhost'
|
|
19
|
+
})
|
|
20
|
+
.options('dir', {
|
|
21
|
+
alias: 'd',
|
|
22
|
+
description: 'root dir',
|
|
23
|
+
default: process.cwd()
|
|
24
|
+
})
|
|
25
|
+
.options('runnable-dir', {
|
|
26
|
+
description: 'runnable dir',
|
|
27
|
+
default: ''
|
|
28
|
+
})
|
|
29
|
+
.options('log-level', {
|
|
30
|
+
description: 'log level',
|
|
31
|
+
default: 'info'
|
|
32
|
+
})
|
|
33
|
+
.options('help', {}), async (argv) => {
|
|
34
|
+
if (argv['log-level']) {
|
|
35
|
+
process.env.LOG_LEVEL = argv['log-level'];
|
|
36
|
+
}
|
|
37
|
+
return require('./dev').start({
|
|
38
|
+
ssgPort: argv.port,
|
|
39
|
+
ssgHost: argv.host,
|
|
40
|
+
rootDir: argv.dir,
|
|
41
|
+
runnableDir: argv['runnable-dir']
|
|
42
|
+
});
|
|
43
|
+
})
|
|
44
|
+
.demandCommand()
|
|
45
|
+
.parse();
|
|
46
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAEA,kDAA0B;AAE1B,IAAA,eAAK,EAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACvB,OAAO,CACJ,IAAI,EACJ,cAAc,EACd,CAAC,KAAK,EAAE,EAAE,CACN,KAAK;KACA,MAAM,CAAC,MAAM,EAAE;IACZ,KAAK,EAAE,GAAG;IACV,WAAW,EAAE,MAAM;IACnB,OAAO,EAAE,IAAI;CAChB,CAAC;KACD,OAAO,CAAC,MAAM,EAAE;IACb,KAAK,EAAE,GAAG;IACV,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,WAAW;CACvB,CAAC;KACD,OAAO,CAAC,KAAK,EAAE;IACZ,KAAK,EAAE,GAAG;IACV,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE;CACzB,CAAC;KACD,OAAO,CAAC,cAAc,EAAE;IACrB,WAAW,EAAE,cAAc;IAC3B,OAAO,EAAE,EAAE;CACd,CAAC;KACD,OAAO,CAAC,WAAW,EAAE;IAClB,WAAW,EAAE,WAAW;IACxB,OAAO,EAAE,MAAM;CAClB,CAAC;KACD,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAC5B,KAAK,EAAE,IAAI,EAAE,EAAE;IACX,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE;QACnB,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;KAC7C;IACD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC;QAC1B,OAAO,EAAE,IAAI,CAAC,IAAI;QAClB,OAAO,EAAE,IAAI,CAAC,IAAI;QAClB,OAAO,EAAE,IAAI,CAAC,GAAG;QACjB,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC;KACpC,CAAC,CAAC;AACP,CAAC,CACJ;KACA,aAAa,EAAE;KACf,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export default class Runner {
|
|
2
|
+
private editor;
|
|
3
|
+
private cms;
|
|
4
|
+
private stackbitYaml;
|
|
5
|
+
private workers;
|
|
6
|
+
private watcher;
|
|
7
|
+
private rootDir;
|
|
8
|
+
private appDir?;
|
|
9
|
+
constructor({ rootDir, runnableDir }: {
|
|
10
|
+
rootDir: string;
|
|
11
|
+
runnableDir?: string;
|
|
12
|
+
});
|
|
13
|
+
install(): Promise<void>;
|
|
14
|
+
handleFileChanges(filePaths: string[]): void;
|
|
15
|
+
getDirectPaths(): string[];
|
|
16
|
+
/**
|
|
17
|
+
* Function retuning a map or a function that rewrites direct proxy requests.
|
|
18
|
+
* https://github.com/chimurai/http-proxy-middleware#http-proxy-middleware-options
|
|
19
|
+
* @return {Function|Object}
|
|
20
|
+
*/
|
|
21
|
+
getDirectRoutes(): {
|
|
22
|
+
[hostOrPath: string]: string;
|
|
23
|
+
};
|
|
24
|
+
getDirectChangeOrigin(): boolean;
|
|
25
|
+
getDirectChangeSocketOrigin(): boolean;
|
|
26
|
+
getObjects(objectIds?: never[]): Promise<any>;
|
|
27
|
+
getObjectsWithAnnotations(annotationTree?: null, clientAnnotationErrors?: never[]): Promise<any>;
|
|
28
|
+
getCollections(): Promise<any>;
|
|
29
|
+
getSiteMap(): Promise<any>;
|
|
30
|
+
getSchema(): Promise<any>;
|
|
31
|
+
getUrl(objectId: string, projectId: string, locale: string): Promise<any>;
|
|
32
|
+
getObject(objectId: string, projectId: string): Promise<any>;
|
|
33
|
+
createObject(modelName: string, filePath: any, object: string, user: any): Promise<any>;
|
|
34
|
+
deleteObject(objectId: string, user: any): Promise<any>;
|
|
35
|
+
updateObject(objectId: string, projectId: string, object: any, user: any): Promise<any>;
|
|
36
|
+
listAssets(filterParams: any): Promise<any>;
|
|
37
|
+
uploadAsset(url: string, filename: string, user: any): Promise<any>;
|
|
38
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const ssg_1 = __importDefault(require("./ssg"));
|
|
9
|
+
const editor_1 = __importDefault(require("@stackbit/dev-common/dist/runner/editor"));
|
|
10
|
+
const git_1 = __importDefault(require("@stackbit/dev-common/dist/cms/git"));
|
|
11
|
+
const worker_1 = __importDefault(require("@stackbit/dev-common/dist/utils/worker"));
|
|
12
|
+
const stackbit_yaml_1 = require("@stackbit/dev-common/dist/services/stackbit-yaml");
|
|
13
|
+
const file_watcher_1 = require("../services/file-watcher");
|
|
14
|
+
const logger_1 = __importDefault(require("../services/logger"));
|
|
15
|
+
const consts_1 = __importDefault(require("../consts"));
|
|
16
|
+
class Runner {
|
|
17
|
+
constructor({ rootDir, runnableDir }) {
|
|
18
|
+
this.rootDir = rootDir;
|
|
19
|
+
this.appDir = runnableDir ? path_1.default.join(this.rootDir, runnableDir) : this.rootDir;
|
|
20
|
+
this.workers = {
|
|
21
|
+
gitApp: new worker_1.default()
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
async install() {
|
|
25
|
+
this.stackbitYaml = new stackbit_yaml_1.StackbitYaml({
|
|
26
|
+
repoDir: this.rootDir,
|
|
27
|
+
appDir: this.appDir,
|
|
28
|
+
extendLogicFields: null,
|
|
29
|
+
onNodeVersionUpdated: null,
|
|
30
|
+
logger: logger_1.default,
|
|
31
|
+
userLogger: logger_1.default,
|
|
32
|
+
envName: 'local' //TODO
|
|
33
|
+
});
|
|
34
|
+
await this.stackbitYaml.load();
|
|
35
|
+
this.cms = new git_1.default({
|
|
36
|
+
rootDir: this.rootDir,
|
|
37
|
+
repoDir: this.rootDir,
|
|
38
|
+
appDir: this.appDir,
|
|
39
|
+
stackbitYaml: this.stackbitYaml,
|
|
40
|
+
workers: this.workers,
|
|
41
|
+
assetIdPrefix: consts_1.default.ASSET_ID_PREFIX,
|
|
42
|
+
staticAssetsFilePath: consts_1.default.STATIC_ASSETS_FILE_PATH,
|
|
43
|
+
staticAssetsPublicPath: consts_1.default.STATIC_ASSETS_PUBLIC_PATH,
|
|
44
|
+
staticThemeAssetsFilePath: consts_1.default.STATIC_THEME_ASSETS_FILE_PATH,
|
|
45
|
+
staticThemeAssetsPublicPath: consts_1.default.STATIC_THEME_ASSETS_PUBLIC_PATH,
|
|
46
|
+
defaultContentTypeExtensions: consts_1.default.DEFAULT_CONTENT_TYPE_EXTENSIONS,
|
|
47
|
+
logger: logger_1.default,
|
|
48
|
+
userLogger: logger_1.default
|
|
49
|
+
});
|
|
50
|
+
await this.cms.run();
|
|
51
|
+
this.editor = new editor_1.default(null, this.cms, this.stackbitYaml, {
|
|
52
|
+
logger: logger_1.default,
|
|
53
|
+
stackbitUrlPathField: consts_1.default.STACKBIT_URL_PATH_FIELD
|
|
54
|
+
});
|
|
55
|
+
this.watcher = (0, file_watcher_1.watchDir)(this.rootDir, (filePaths) => {
|
|
56
|
+
logger_1.default.debug(`File change detected: ${filePaths}`);
|
|
57
|
+
this.handleFileChanges(filePaths);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
handleFileChanges(filePaths) {
|
|
61
|
+
this.cms.postPull(filePaths.map((filePath) => path_1.default.join(this.rootDir, filePath))).catch((err) => {
|
|
62
|
+
logger_1.default.debug('Error in postPull', { err });
|
|
63
|
+
});
|
|
64
|
+
for (const filePath of filePaths) {
|
|
65
|
+
if (!stackbit_yaml_1.StackbitYaml.isStackbitYamlFile(filePath)) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
this.stackbitYaml.load().catch((err) => {
|
|
69
|
+
logger_1.default.debug('Error handling stackbit.yaml change', { err });
|
|
70
|
+
logger_1.default.error('Error reloading stackbit.yaml');
|
|
71
|
+
});
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
getDirectPaths() {
|
|
76
|
+
return ssg_1.default.directPaths;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Function retuning a map or a function that rewrites direct proxy requests.
|
|
80
|
+
* https://github.com/chimurai/http-proxy-middleware#http-proxy-middleware-options
|
|
81
|
+
* @return {Function|Object}
|
|
82
|
+
*/
|
|
83
|
+
getDirectRoutes() {
|
|
84
|
+
return ssg_1.default.directRoutes;
|
|
85
|
+
}
|
|
86
|
+
getDirectChangeOrigin() {
|
|
87
|
+
return ssg_1.default.directChangeOrigin;
|
|
88
|
+
}
|
|
89
|
+
getDirectChangeSocketOrigin() {
|
|
90
|
+
return ssg_1.default.directChangeSocketOrigin;
|
|
91
|
+
}
|
|
92
|
+
async getObjects(objectIds = []) {
|
|
93
|
+
return this.editor.getObjects(objectIds);
|
|
94
|
+
}
|
|
95
|
+
async getObjectsWithAnnotations(annotationTree = null, clientAnnotationErrors = []) {
|
|
96
|
+
var _a;
|
|
97
|
+
const result = this.editor.getObjectsWithAnnotations(annotationTree);
|
|
98
|
+
lodash_1.default.forEach([...((_a = result.errors) !== null && _a !== void 0 ? _a : []), ...clientAnnotationErrors], (error) => {
|
|
99
|
+
const errorProps = lodash_1.default.omit(error, ['type', 'message']);
|
|
100
|
+
logger_1.default.error(`${error.message} ${lodash_1.default.map(errorProps, (val, key) => `${key}:'${val && val.toString ? val.toString() : val}'`).join(', ')}`);
|
|
101
|
+
});
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
104
|
+
async getCollections() {
|
|
105
|
+
return this.editor.getCollections();
|
|
106
|
+
}
|
|
107
|
+
async getSiteMap() {
|
|
108
|
+
return this.editor.getSiteMap(this.cms.getEncodingResult());
|
|
109
|
+
}
|
|
110
|
+
async getSchema() {
|
|
111
|
+
return this.editor.getSchema();
|
|
112
|
+
}
|
|
113
|
+
async getUrl(objectId, projectId, locale) {
|
|
114
|
+
return this.editor.getUrl(objectId, projectId, locale);
|
|
115
|
+
}
|
|
116
|
+
async getObject(objectId, projectId) {
|
|
117
|
+
return this.cms.getObject(objectId, projectId);
|
|
118
|
+
}
|
|
119
|
+
createObject(modelName, filePath, object, user) {
|
|
120
|
+
return this.cms.createObject(modelName, filePath, object, user);
|
|
121
|
+
}
|
|
122
|
+
deleteObject(objectId, user) {
|
|
123
|
+
return this.cms.deleteObject(objectId, user);
|
|
124
|
+
}
|
|
125
|
+
updateObject(objectId, projectId, object, user) {
|
|
126
|
+
return this.getObject(objectId, projectId).then((existingObject) => {
|
|
127
|
+
if (!existingObject) {
|
|
128
|
+
throw new Error('Object not found');
|
|
129
|
+
}
|
|
130
|
+
return this.cms.updateObject(existingObject, object, user);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
async listAssets(filterParams) {
|
|
134
|
+
return this.cms.listAssets(filterParams);
|
|
135
|
+
}
|
|
136
|
+
async uploadAsset(url, filename, user) {
|
|
137
|
+
return this.cms.uploadAsset(url, filename, user);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
exports.default = Runner;
|
|
141
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runner/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const consts_1 = __importDefault(require("../consts"));
|
|
7
|
+
exports.default = {
|
|
8
|
+
directPaths: ['/_next/**', '/nextjs-live-updates/**'],
|
|
9
|
+
directRoutes: {
|
|
10
|
+
'/socket.io': `http://localhost:${consts_1.default.NEXTJS_SOURCEBIT_LIVE_UPDATE_PORT}`
|
|
11
|
+
},
|
|
12
|
+
directChangeSocketOrigin: false,
|
|
13
|
+
directChangeOrigin: true
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=ssg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssg.js","sourceRoot":"","sources":["../../src/runner/ssg.ts"],"names":[],"mappings":";;;;;AAAA,uDAA+B;AAE/B,kBAAe;IACX,WAAW,EAAE,CAAC,WAAW,EAAE,yBAAyB,CAAC;IACrD,YAAY,EAAE;QACV,YAAY,EAAE,oBAAoB,gBAAM,CAAC,iCAAiC,EAAE;KAC/E;IACD,wBAAwB,EAAE,KAAK;IAC/B,kBAAkB,EAAE,IAAI;CAC3B,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.start = void 0;
|
|
7
|
+
const http_1 = __importDefault(require("http"));
|
|
8
|
+
const express_1 = __importDefault(require("express"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const logger_1 = __importDefault(require("../services/logger"));
|
|
11
|
+
const routes_1 = __importDefault(require("./routes"));
|
|
12
|
+
const proxy_1 = __importDefault(require("./proxy"));
|
|
13
|
+
const runner_1 = __importDefault(require("../runner"));
|
|
14
|
+
const consts_1 = __importDefault(require("../consts"));
|
|
15
|
+
const socket_service_1 = __importDefault(require("@stackbit/dev-common/dist/services/socket-service"));
|
|
16
|
+
async function start({ serverPort, ssgPort, ssgHost, rootDir, runnableDir }) {
|
|
17
|
+
const server = (0, express_1.default)();
|
|
18
|
+
const httpServer = http_1.default.createServer(server);
|
|
19
|
+
socket_service_1.default.use(httpServer, logger_1.default);
|
|
20
|
+
const runner = new runner_1.default({
|
|
21
|
+
rootDir,
|
|
22
|
+
runnableDir
|
|
23
|
+
});
|
|
24
|
+
await runner.install();
|
|
25
|
+
server.use(require('cors')());
|
|
26
|
+
// if (config.setContentSecurityPolicy) {
|
|
27
|
+
// server.use((req, res, next) => {
|
|
28
|
+
// const hosts = getClientAllowedHosts(req).join(' ');
|
|
29
|
+
// res.set('Content-Security-Policy', `frame-ancestors 'self' ${hosts}`);
|
|
30
|
+
// next();
|
|
31
|
+
// });
|
|
32
|
+
// }
|
|
33
|
+
// log requests
|
|
34
|
+
server.use((req, res, next) => {
|
|
35
|
+
logger_1.default.debug(`got request ${req.method} ${req.path}`, { method: req.method, originalUrl: req.originalUrl, url: req.url, path: req.path });
|
|
36
|
+
next();
|
|
37
|
+
});
|
|
38
|
+
server.use('/_static', express_1.default.static('static'));
|
|
39
|
+
server.use(consts_1.default.STATIC_ASSETS_PUBLIC_PATH, express_1.default.static(path_1.default.join(rootDir, consts_1.default.STATIC_ASSETS_FILE_PATH)));
|
|
40
|
+
server.use(consts_1.default.STATIC_THEME_ASSETS_PUBLIC_PATH, express_1.default.static(path_1.default.join(rootDir, consts_1.default.STATIC_THEME_ASSETS_FILE_PATH)));
|
|
41
|
+
(0, routes_1.default)(server, runner);
|
|
42
|
+
server.use((0, proxy_1.default)(ssgHost, ssgPort, runner));
|
|
43
|
+
return new Promise((resolve, reject) => {
|
|
44
|
+
httpServer.listen(serverPort, () => {
|
|
45
|
+
logger_1.default.debug('Server running on port ' + serverPort);
|
|
46
|
+
resolve();
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
exports.start = start;
|
|
51
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":";;;;;;AACA,gDAAwB;AACxB,sDAA8B;AAC9B,gDAAwB;AAExB,gEAAwC;AAExC,sDAA8B;AAC9B,oDAA4B;AAC5B,uDAA+B;AAC/B,uDAA+B;AAC/B,uGAA8E;AAEvE,KAAK,UAAU,KAAK,CAAC,EACxB,UAAU,EACV,OAAO,EACP,OAAO,EACP,OAAO,EACP,WAAW,EAOd;IACG,MAAM,MAAM,GAAG,IAAA,iBAAO,GAAE,CAAC;IACzB,MAAM,UAAU,GAAG,cAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC7C,wBAAa,CAAC,GAAG,CAAC,UAAU,EAAE,gBAAM,CAAC,CAAC;IAEtC,MAAM,MAAM,GAAG,IAAI,gBAAM,CAAC;QACtB,OAAO;QACP,WAAW;KACd,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IAEvB,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9B,yCAAyC;IACzC,uCAAuC;IACvC,8DAA8D;IAC9D,iFAAiF;IACjF,kBAAkB;IAClB,UAAU;IACV,IAAI;IAEJ,eAAe;IACf,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC1B,gBAAM,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1I,IAAI,EAAE,CAAC;IACX,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,iBAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjD,MAAM,CAAC,GAAG,CAAC,gBAAM,CAAC,yBAAyB,EAAE,iBAAO,CAAC,MAAM,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;IACjH,MAAM,CAAC,GAAG,CAAC,gBAAM,CAAC,+BAA+B,EAAE,iBAAO,CAAC,MAAM,CAAC,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC;IAE7H,IAAA,gBAAM,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvB,MAAM,CAAC,GAAG,CAAC,IAAA,eAAK,EAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAE5C,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACzC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE;YAC/B,gBAAM,CAAC,KAAK,CAAC,yBAAyB,GAAG,UAAU,CAAC,CAAC;YACrD,OAAO,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AAnDD,sBAmDC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const express_1 = __importDefault(require("express"));
|
|
9
|
+
const http_proxy_middleware_1 = __importDefault(require("http-proxy-middleware"));
|
|
10
|
+
const logger_1 = __importDefault(require("../services/logger"));
|
|
11
|
+
const consts_1 = __importDefault(require("../consts"));
|
|
12
|
+
const proxy_utils_1 = require("@stackbit/dev-common/dist/utils/proxy-utils");
|
|
13
|
+
const pages_1 = require("@stackbit/dev-common/dist/utils/pages");
|
|
14
|
+
const config_1 = __importDefault(require("../config"));
|
|
15
|
+
function proxyMiddleware(ssgHost, ssgPort, runner) {
|
|
16
|
+
var _a;
|
|
17
|
+
const router = express_1.default.Router();
|
|
18
|
+
router.use((req, res, next) => {
|
|
19
|
+
lodash_1.default.unset(req, 'headers.x-forwarded-proto');
|
|
20
|
+
const rawHeaders = lodash_1.default.get(req, 'rawHeaders');
|
|
21
|
+
const headerIndex = lodash_1.default.findIndex(rawHeaders, (headerValue) => headerValue.toLowerCase() === 'x-forwarded-proto');
|
|
22
|
+
if (headerIndex > -1) {
|
|
23
|
+
// remove the header key and value
|
|
24
|
+
rawHeaders.splice(headerIndex, 2);
|
|
25
|
+
}
|
|
26
|
+
next();
|
|
27
|
+
});
|
|
28
|
+
const proxyTargetUrl = `http://${ssgHost}:${ssgPort}`;
|
|
29
|
+
const handlerProxyError = (err, req, res) => {
|
|
30
|
+
if ((err === null || err === void 0 ? void 0 : err.code) === 'ECONNREFUSED' && (res === null || res === void 0 ? void 0 : res.status)) {
|
|
31
|
+
(0, pages_1.renderLoadingPage)(req, res, {
|
|
32
|
+
assetsDir: path_1.default.join(__dirname, '../assets'),
|
|
33
|
+
proxyUrl: proxyTargetUrl,
|
|
34
|
+
proxyPath: (req === null || req === void 0 ? void 0 : req.path) || '',
|
|
35
|
+
htmlMessage: '',
|
|
36
|
+
status: 504,
|
|
37
|
+
statusMessage: 'aa'
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
// visit https://github.com/chimurai/http-proxy-middleware#context-matching
|
|
42
|
+
// for docs on how path matching works, it is different from express matching
|
|
43
|
+
const directPaths = lodash_1.default.uniq(lodash_1.default.concat(consts_1.default.DEFAULT_DIRECT_PROXY_PATH, runner.getDirectPaths()));
|
|
44
|
+
router.use((0, http_proxy_middleware_1.default)(directPaths, {
|
|
45
|
+
target: proxyTargetUrl,
|
|
46
|
+
changeOrigin: runner.getDirectChangeOrigin(),
|
|
47
|
+
ws: true,
|
|
48
|
+
logProvider: () => logger_1.default,
|
|
49
|
+
logLevel: config_1.default.logLevel === 'debug' ? 'info' : 'silent',
|
|
50
|
+
router: (_a = runner.getDirectRoutes()) !== null && _a !== void 0 ? _a : [],
|
|
51
|
+
onError: (err, req, res) => {
|
|
52
|
+
logger_1.default.debug(`onError in direct proxy, request: ${req.method} ${req.url}, error: ${err.message}`, { error: err });
|
|
53
|
+
handlerProxyError(err, req, res);
|
|
54
|
+
}
|
|
55
|
+
}));
|
|
56
|
+
router.use((0, http_proxy_middleware_1.default)({
|
|
57
|
+
target: proxyTargetUrl,
|
|
58
|
+
changeOrigin: true,
|
|
59
|
+
followRedirects: true,
|
|
60
|
+
logProvider: () => logger_1.default,
|
|
61
|
+
logLevel: config_1.default.logLevel === 'debug' ? 'info' : 'silent',
|
|
62
|
+
onError: (err, req, res) => {
|
|
63
|
+
logger_1.default.debug(`onError in main proxy, request: ${req.method} ${req.url}, error: ${err.message}`, { error: err });
|
|
64
|
+
handlerProxyError(err, req, res);
|
|
65
|
+
},
|
|
66
|
+
selfHandleResponse: true,
|
|
67
|
+
onProxyRes: (0, proxy_utils_1.createProxyModifyResponseMiddleware)({
|
|
68
|
+
logTagName: 'proxy',
|
|
69
|
+
shouldModifyBody: (proxyRes, req) => {
|
|
70
|
+
return req.method === 'GET' && (0, proxy_utils_1.isHtml)(proxyRes);
|
|
71
|
+
},
|
|
72
|
+
modifyBody: (body) => {
|
|
73
|
+
body = (0, proxy_utils_1.injectScript)(body, config_1.default.snippetUrl);
|
|
74
|
+
return body;
|
|
75
|
+
}
|
|
76
|
+
})
|
|
77
|
+
}));
|
|
78
|
+
return router;
|
|
79
|
+
}
|
|
80
|
+
exports.default = proxyMiddleware;
|
|
81
|
+
//# sourceMappingURL=proxy.js.map
|