@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.
Files changed (60) hide show
  1. package/dist/assets/loading-page.html +54 -0
  2. package/dist/config.d.ts +7 -0
  3. package/dist/config.js +9 -0
  4. package/dist/config.js.map +1 -0
  5. package/dist/consts.d.ts +12 -0
  6. package/dist/consts.js +47 -0
  7. package/dist/consts.js.map +1 -0
  8. package/dist/dev.d.ts +6 -0
  9. package/dist/dev.js +57 -0
  10. package/dist/dev.js.map +1 -0
  11. package/dist/index.d.ts +2 -0
  12. package/dist/index.js +46 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/runner/index.d.ts +38 -0
  15. package/dist/runner/index.js +141 -0
  16. package/dist/runner/index.js.map +1 -0
  17. package/dist/runner/ssg.d.ts +9 -0
  18. package/dist/runner/ssg.js +15 -0
  19. package/dist/runner/ssg.js.map +1 -0
  20. package/dist/server/index.d.ts +7 -0
  21. package/dist/server/index.js +51 -0
  22. package/dist/server/index.js.map +1 -0
  23. package/dist/server/proxy.d.ts +2 -0
  24. package/dist/server/proxy.js +81 -0
  25. package/dist/server/proxy.js.map +1 -0
  26. package/dist/server/routes.d.ts +3 -0
  27. package/dist/server/routes.js +190 -0
  28. package/dist/server/routes.js.map +1 -0
  29. package/dist/services/api.d.ts +4 -0
  30. package/dist/services/api.js +15 -0
  31. package/dist/services/api.js.map +1 -0
  32. package/dist/services/file-watcher.d.ts +2 -0
  33. package/dist/services/file-watcher.js +42 -0
  34. package/dist/services/file-watcher.js.map +1 -0
  35. package/dist/services/logger.d.ts +6 -0
  36. package/dist/services/logger.js +35 -0
  37. package/dist/services/logger.js.map +1 -0
  38. package/dist/services/ngrok.d.ts +1 -0
  39. package/dist/services/ngrok.js +18 -0
  40. package/dist/services/ngrok.js.map +1 -0
  41. package/dist/services/user-config.d.ts +1 -0
  42. package/dist/services/user-config.js +16 -0
  43. package/dist/services/user-config.js.map +1 -0
  44. package/package.json +59 -0
  45. package/src/assets/loading-page.html +54 -0
  46. package/src/config.ts +6 -0
  47. package/src/consts.ts +44 -0
  48. package/src/dev.ts +65 -0
  49. package/src/index.ts +48 -0
  50. package/src/runner/index.ts +162 -0
  51. package/src/runner/ssg.ts +10 -0
  52. package/src/server/index.ts +65 -0
  53. package/src/server/proxy.ts +85 -0
  54. package/src/server/routes.ts +186 -0
  55. package/src/services/api.ts +10 -0
  56. package/src/services/file-watcher.ts +37 -0
  57. package/src/services/logger.ts +34 -0
  58. package/src/services/ngrok.ts +11 -0
  59. package/src/services/user-config.ts +14 -0
  60. 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>
@@ -0,0 +1,7 @@
1
+ declare const _default: {
2
+ apiUrl: string;
3
+ appUrl: string;
4
+ snippetUrl: string;
5
+ logLevel: string;
6
+ };
7
+ export default _default;
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"}
@@ -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
@@ -0,0 +1,6 @@
1
+ export declare function start({ ssgPort, ssgHost, rootDir, runnableDir }: {
2
+ ssgPort: number;
3
+ ssgHost: string;
4
+ rootDir: string;
5
+ runnableDir?: string;
6
+ }): Promise<false | undefined>;
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
@@ -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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
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,9 @@
1
+ declare const _default: {
2
+ directPaths: string[];
3
+ directRoutes: {
4
+ '/socket.io': string;
5
+ };
6
+ directChangeSocketOrigin: boolean;
7
+ directChangeOrigin: boolean;
8
+ };
9
+ export default _default;
@@ -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,7 @@
1
+ export declare function start({ serverPort, ssgPort, ssgHost, rootDir, runnableDir }: {
2
+ serverPort: number;
3
+ ssgPort: number;
4
+ ssgHost: string;
5
+ rootDir: string;
6
+ runnableDir?: string;
7
+ }): Promise<void>;
@@ -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,2 @@
1
+ import Runner from '../runner';
2
+ export default function proxyMiddleware(ssgHost: string, ssgPort: number, runner: Runner): import("express-serve-static-core").Router;
@@ -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