miolo 0.3.2 → 0.3.5

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 (31) hide show
  1. package/dist/cli/miolo.cli.iife.bundle.js +1 -1
  2. package/dist/cli/miolo.cli.iife.bundle.min.js +1 -1
  3. package/dist/cli/miolo.cli.iife.js +1 -1
  4. package/dist/cli/miolo.cli.iife.min.js +1 -1
  5. package/dist/cli/miolo.cli.min.mjs +1 -1
  6. package/dist/cli/miolo.cli.mjs +1 -1
  7. package/dist/cli/miolo.cli.umd.bundle.js +1 -1
  8. package/dist/cli/miolo.cli.umd.bundle.min.js +1 -1
  9. package/dist/cli/miolo.cli.umd.js +1 -1
  10. package/dist/cli/miolo.cli.umd.min.js +1 -1
  11. package/dist/cli-react/miolo.cli-react.iife.bundle.js +1670 -1677
  12. package/dist/cli-react/miolo.cli-react.iife.bundle.js.map +1 -1
  13. package/dist/cli-react/miolo.cli-react.iife.bundle.min.js +42 -49
  14. package/dist/cli-react/miolo.cli-react.iife.js +22 -11
  15. package/dist/cli-react/miolo.cli-react.iife.js.map +1 -1
  16. package/dist/cli-react/miolo.cli-react.iife.min.js +2 -2
  17. package/dist/cli-react/miolo.cli-react.min.mjs +2 -2
  18. package/dist/cli-react/miolo.cli-react.mjs +23 -9
  19. package/dist/cli-react/miolo.cli-react.mjs.map +1 -1
  20. package/dist/cli-react/miolo.cli-react.umd.bundle.js +1669 -1676
  21. package/dist/cli-react/miolo.cli-react.umd.bundle.js.map +1 -1
  22. package/dist/cli-react/miolo.cli-react.umd.bundle.min.js +42 -49
  23. package/dist/cli-react/miolo.cli-react.umd.js +24 -13
  24. package/dist/cli-react/miolo.cli-react.umd.js.map +1 -1
  25. package/dist/cli-react/miolo.cli-react.umd.min.js +2 -2
  26. package/dist/server/miolo.server.cjs +216 -265
  27. package/dist/server/miolo.server.min.mjs +2 -2
  28. package/dist/server/miolo.server.mjs +169 -227
  29. package/dist/server/miolo.server.mjs.map +1 -1
  30. package/dist/server/miolo.server.node.mjs +217 -265
  31. package/package.json +8 -9
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.3.2
2
+ * miolo v0.3.5
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -9,21 +9,15 @@
9
9
  * @license MIT
10
10
  */
11
11
  import Koa from 'koa';
12
- import { initCalustraRouter } from 'calustra/router';
13
12
  import merge from 'assign-deep';
14
13
  import path from 'node:path';
15
14
  import { fileURLToPath } from 'node:url';
16
- import os from 'node:os';
17
- import diskspace from 'diskspace';
18
- import { cyan, yellow, green, uncolor, gray, magenta, red_light, red, blue } from 'tinguir';
19
- import { CronJob } from 'cron';
20
15
  import { getConnection } from 'calustra';
21
16
  export { getConnection } from 'calustra';
22
17
  import nodemailer from 'nodemailer';
18
+ import { uncolor, gray, magenta, cyan, yellow, red_light, red, green, blue } from 'tinguir';
23
19
  import util from 'node:util';
24
20
  import winston, { format, transports, createLogger } from 'winston';
25
- import koa_cors from '@koa/cors';
26
- import koa_proxy from 'koa-proxies';
27
21
  import koa_body_parser from 'koa-better-body';
28
22
  import koa_convert from 'koa-convert';
29
23
  import koa_compress from 'koa-compress';
@@ -36,8 +30,13 @@ import koa_session from 'koa-session';
36
30
  import RedisStore from 'koa-redis';
37
31
  import Router from '@koa/router';
38
32
  import { readFileSync } from 'node:fs';
39
- import React, { useState, useEffect } from 'react';
40
- import { StaticRouter } from 'react-router-dom/server';
33
+ import { initCalustraRouter } from 'calustra/router';
34
+ import koa_cors from '@koa/cors';
35
+ import koa_proxy from 'koa-proxies';
36
+ import os from 'node:os';
37
+ import diskspace from 'diskspace';
38
+ import { CronJob } from 'cron';
39
+ import React from 'react';
41
40
  import { renderToString } from 'react-dom/server';
42
41
  import jwt from 'jwt-simple';
43
42
  import auth from 'basic-auth';
@@ -670,43 +669,6 @@ function init_config(config) {
670
669
  return merge(base_config, config);
671
670
  }
672
671
 
673
- function init_sys_check_and_log(logger) {
674
- function toMB(bytes) {
675
- if (!bytes) return 0;
676
- return bytes / 1000000;
677
- }
678
- function toGB(kbytes) {
679
- if (!kbytes) return 0;
680
- return kbytes / 1000000;
681
- }
682
- function sys_check_and_log() {
683
- var used = Math.round(toMB(os.freemem()), 2);
684
- var total = Math.round(toMB(os.totalmem()), 2);
685
- var perc = Math.round(used * 100 / total, 2);
686
- if (perc > 80) {
687
- logger.error("[SERVER][" + cyan('SysCheck') + "] RAM " + yellow(used) + " MB used of " + green(total) + " MB (" + yellow(perc) + " %)");
688
- } else {
689
- logger.info("[SERVER][" + cyan('SysCheck') + "] RAM " + yellow(used) + " MB used of " + green(total) + " MB (" + yellow(perc) + " %)");
690
- }
691
- diskspace.check('/', function (err, result) {
692
- var used = Math.round(toGB(result.used), 2);
693
- var total = Math.round(toGB(result.total), 2);
694
- var free = Math.round(toGB(result.free), 2);
695
- if (free < 1) {
696
- logger.error("[SERVER][" + cyan('SysCheck') + "] DISK " + yellow(used) + " GB used of " + green(total) + " GB (" + yellow(free) + " GB free)");
697
- } else {
698
- logger.info("[SERVER][" + cyan('SysCheck') + "] DISK " + yellow(used) + " GB used of " + green(total) + " GB (" + yellow(free) + " GB free)");
699
- }
700
- });
701
- }
702
- return sys_check_and_log;
703
- }
704
-
705
- function init_cron(logger) {
706
- var sys_check_and_log = init_sys_check_and_log(logger);
707
- new CronJob('30 * * * *', sys_check_and_log, null, true, 'Europe/Madrid');
708
- }
709
-
710
672
  function init_emailer(options, defaults, silent) {
711
673
  if (silent === void 0) {
712
674
  silent = false;
@@ -928,75 +890,6 @@ var init_context_middleware = function init_context_middleware(app, config) {
928
890
  app.context.miolo = mioloContext;
929
891
  };
930
892
 
931
- var _if_options = function _if_options(http, field, callback) {
932
- try {
933
- var val = http[field];
934
- if (val != undefined && val != false) {
935
- return callback(val);
936
- }
937
- } catch (_) {}
938
- };
939
- var _cors_options = function _cors_options(options) {
940
- if (typeof options == 'object') {
941
- return options;
942
- }
943
- return {};
944
- };
945
- var _proxy_options = function _proxy_options(options) {
946
- var _options, _options2, _options3, _options4;
947
- if (options == undefined) {
948
- options = {};
949
- }
950
- var tpath = ((_options = options) == null ? void 0 : _options.path) || '/';
951
- var target = ((_options2 = options) == null ? void 0 : _options2.target) || "https://proxy.miolo.com";
952
- var changeOrigin = ((_options3 = options) == null ? void 0 : _options3.changeOrigin) != undefined ? options.changeOrigin : true;
953
- var logs = ((_options4 = options) == null ? void 0 : _options4.logs) != undefined ? options.logs : true;
954
- var toptions = {
955
- target: target,
956
- changeOrigin: changeOrigin,
957
- logs: logs
958
- };
959
- return [tpath, toptions];
960
- };
961
- var init_headers_middleware = function init_headers_middleware(app, http) {
962
- var logger = app.context.miolo.logger;
963
- _if_options(http, 'cors', function (options) {
964
- if (options == 'simple') {
965
- logger.debug("Setting CORS the simple way");
966
- app.use( /*#__PURE__*/function () {
967
- var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(ctx, next) {
968
- return _regeneratorRuntime().wrap(function _callee$(_context) {
969
- while (1) switch (_context.prev = _context.next) {
970
- case 0:
971
- ctx.set('Access-Control-Allow-Origin', '*');
972
- ctx.set('Access-Control-Expose-Headers', 'SourceMap,X-SourceMap');
973
- _context.next = 4;
974
- return next();
975
- case 4:
976
- case "end":
977
- return _context.stop();
978
- }
979
- }, _callee);
980
- }));
981
- return function (_x, _x2) {
982
- return _ref.apply(this, arguments);
983
- };
984
- }());
985
- } else {
986
- var coptions = _cors_options(options);
987
- logger.debug("Setting CORS headers for " + JSON.stringify(coptions));
988
- app.use(koa_cors(coptions));
989
- }
990
- });
991
- _if_options(http, 'proxy', function (options) {
992
- var _proxy_options2 = _proxy_options(options),
993
- tpath = _proxy_options2[0],
994
- toptions = _proxy_options2[1];
995
- logger.debug("Setting Proxy for " + tpath + " to " + toptions.target + " ");
996
- app.use(koa_proxy(tpath, toptions));
997
- });
998
- };
999
-
1000
893
  var init_body_middleware = function init_body_middleware(app) {
1001
894
  // Compress
1002
895
 
@@ -1124,36 +1017,6 @@ var init_static_middleware = function init_static_middleware(app, config) {
1124
1017
  }
1125
1018
  };
1126
1019
 
1127
- var init_extra_middlewares = function init_extra_middlewares(app, middlewares) {
1128
- if (middlewares == undefined || middlewares.length == 0) {
1129
- return;
1130
- }
1131
- middlewares.map(function (midw) {
1132
- function extra_middleware(_x, _x2) {
1133
- return _extra_middleware.apply(this, arguments);
1134
- }
1135
- function _extra_middleware() {
1136
- _extra_middleware = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(ctx, next) {
1137
- return _regeneratorRuntime().wrap(function _callee$(_context) {
1138
- while (1) switch (_context.prev = _context.next) {
1139
- case 0:
1140
- _context.next = 2;
1141
- return midw(ctx);
1142
- case 2:
1143
- _context.next = 4;
1144
- return next();
1145
- case 4:
1146
- case "end":
1147
- return _context.stop();
1148
- }
1149
- }, _callee);
1150
- }));
1151
- return _extra_middleware.apply(this, arguments);
1152
- }
1153
- app.use(extra_middleware);
1154
- });
1155
- };
1156
-
1157
1020
  var REQUEST_COUNTER = 1;
1158
1021
 
1159
1022
  /**
@@ -1287,40 +1150,140 @@ function init_route_catch_js_error(app, route) {
1287
1150
  app.use(catch_js_error_router.routes());
1288
1151
  }
1289
1152
 
1290
- var __my_filename = fileURLToPath(require('url').pathToFileURL(__filename).toString());
1291
- var __my_dirname = path.dirname(__my_filename);
1292
- var indexHTMLPath = path.resolve(__my_dirname, 'fallback_index.html');
1293
- var indexHTML = readFileSync(indexHTMLPath, 'utf8');
1294
- function init_route_html_render(app, html) {
1295
- // Server-side render
1296
- function html_render(_x) {
1297
- return _html_render.apply(this, arguments);
1153
+ var init_extra_middlewares = function init_extra_middlewares(app, middlewares) {
1154
+ if (middlewares == undefined || middlewares.length == 0) {
1155
+ return;
1298
1156
  }
1299
- function _html_render() {
1300
- _html_render = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(ctx) {
1301
- var logger, reqid, ip, method, url, what;
1302
- return _regeneratorRuntime().wrap(function _callee$(_context) {
1303
- while (1) switch (_context.prev = _context.next) {
1304
- case 0:
1305
- logger = ctx.miolo.logger;
1306
- reqid = ctx.requestId;
1307
- ip = ctx.headers["x-real-ip"] || '127.0.0.1';
1308
- method = ctx.request.method;
1309
- url = ctx.request.url;
1310
- what = html != undefined ? 'provided html' : 'fallback page';
1311
- logger.info(reqid + " - " + ip + " : " + cyan(method) + " " + cyan(url) + " => Rendering " + what);
1312
- ctx.body = html || indexHTML;
1313
- case 8:
1314
- case "end":
1315
- return _context.stop();
1316
- }
1317
- }, _callee);
1318
- }));
1319
- return _html_render.apply(this, arguments);
1157
+ middlewares.map(function (midw) {
1158
+ function extra_middleware(_x, _x2) {
1159
+ return _extra_middleware.apply(this, arguments);
1160
+ }
1161
+ function _extra_middleware() {
1162
+ _extra_middleware = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(ctx, next) {
1163
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
1164
+ while (1) switch (_context.prev = _context.next) {
1165
+ case 0:
1166
+ _context.next = 2;
1167
+ return midw(ctx);
1168
+ case 2:
1169
+ _context.next = 4;
1170
+ return next();
1171
+ case 4:
1172
+ case "end":
1173
+ return _context.stop();
1174
+ }
1175
+ }, _callee);
1176
+ }));
1177
+ return _extra_middleware.apply(this, arguments);
1178
+ }
1179
+ app.use(extra_middleware);
1180
+ });
1181
+ };
1182
+
1183
+ var _if_options = function _if_options(http, field, callback) {
1184
+ try {
1185
+ var val = http[field];
1186
+ if (val != undefined && val != false) {
1187
+ return callback(val);
1188
+ }
1189
+ } catch (_) {}
1190
+ };
1191
+ var _cors_options = function _cors_options(options) {
1192
+ if (typeof options == 'object') {
1193
+ return options;
1320
1194
  }
1321
- var html_render_router = new Router();
1322
- html_render_router.get('/', html_render);
1323
- app.use(html_render_router.routes());
1195
+ return {};
1196
+ };
1197
+ var _proxy_options = function _proxy_options(options) {
1198
+ var _options, _options2, _options3, _options4;
1199
+ if (options == undefined) {
1200
+ options = {};
1201
+ }
1202
+ var tpath = ((_options = options) == null ? void 0 : _options.path) || '/';
1203
+ var target = ((_options2 = options) == null ? void 0 : _options2.target) || "https://proxy.miolo.com";
1204
+ var changeOrigin = ((_options3 = options) == null ? void 0 : _options3.changeOrigin) != undefined ? options.changeOrigin : true;
1205
+ var logs = ((_options4 = options) == null ? void 0 : _options4.logs) != undefined ? options.logs : true;
1206
+ var toptions = {
1207
+ target: target,
1208
+ changeOrigin: changeOrigin,
1209
+ logs: logs
1210
+ };
1211
+ return [tpath, toptions];
1212
+ };
1213
+ var init_headers_middleware = function init_headers_middleware(app, http) {
1214
+ var logger = app.context.miolo.logger;
1215
+ _if_options(http, 'cors', function (options) {
1216
+ if (options == 'simple') {
1217
+ logger.debug("Setting CORS the simple way");
1218
+ app.use( /*#__PURE__*/function () {
1219
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(ctx, next) {
1220
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
1221
+ while (1) switch (_context.prev = _context.next) {
1222
+ case 0:
1223
+ ctx.set('Access-Control-Allow-Origin', '*');
1224
+ ctx.set('Access-Control-Expose-Headers', 'SourceMap,X-SourceMap');
1225
+ _context.next = 4;
1226
+ return next();
1227
+ case 4:
1228
+ case "end":
1229
+ return _context.stop();
1230
+ }
1231
+ }, _callee);
1232
+ }));
1233
+ return function (_x, _x2) {
1234
+ return _ref.apply(this, arguments);
1235
+ };
1236
+ }());
1237
+ } else {
1238
+ var coptions = _cors_options(options);
1239
+ logger.debug("Setting CORS headers for " + JSON.stringify(coptions));
1240
+ app.use(koa_cors(coptions));
1241
+ }
1242
+ });
1243
+ _if_options(http, 'proxy', function (options) {
1244
+ var _proxy_options2 = _proxy_options(options),
1245
+ tpath = _proxy_options2[0],
1246
+ toptions = _proxy_options2[1];
1247
+ logger.debug("Setting Proxy for " + tpath + " to " + toptions.target + " ");
1248
+ app.use(koa_proxy(tpath, toptions));
1249
+ });
1250
+ };
1251
+
1252
+ function init_sys_check_and_log(logger) {
1253
+ function toMB(bytes) {
1254
+ if (!bytes) return 0;
1255
+ return bytes / 1000000;
1256
+ }
1257
+ function toGB(kbytes) {
1258
+ if (!kbytes) return 0;
1259
+ return kbytes / 1000000;
1260
+ }
1261
+ function sys_check_and_log() {
1262
+ var used = Math.round(toMB(os.freemem()), 2);
1263
+ var total = Math.round(toMB(os.totalmem()), 2);
1264
+ var perc = Math.round(used * 100 / total, 2);
1265
+ if (perc > 80) {
1266
+ logger.error("[SERVER][" + cyan('SysCheck') + "] RAM " + yellow(used) + " MB used of " + green(total) + " MB (" + yellow(perc) + " %)");
1267
+ } else {
1268
+ logger.info("[SERVER][" + cyan('SysCheck') + "] RAM " + yellow(used) + " MB used of " + green(total) + " MB (" + yellow(perc) + " %)");
1269
+ }
1270
+ diskspace.check('/', function (err, result) {
1271
+ var used = Math.round(toGB(result.used), 2);
1272
+ var total = Math.round(toGB(result.total), 2);
1273
+ var free = Math.round(toGB(result.free), 2);
1274
+ if (free < 1) {
1275
+ logger.error("[SERVER][" + cyan('SysCheck') + "] DISK " + yellow(used) + " GB used of " + green(total) + " GB (" + yellow(free) + " GB free)");
1276
+ } else {
1277
+ logger.info("[SERVER][" + cyan('SysCheck') + "] DISK " + yellow(used) + " GB used of " + green(total) + " GB (" + yellow(free) + " GB free)");
1278
+ }
1279
+ });
1280
+ }
1281
+ return sys_check_and_log;
1282
+ }
1283
+
1284
+ function init_cron(logger) {
1285
+ var sys_check_and_log = init_sys_check_and_log(logger);
1286
+ new CronJob('30 * * * *', sys_check_and_log, null, true, 'Europe/Madrid');
1324
1287
  }
1325
1288
 
1326
1289
  function miolo(_x, _x2, _x3) {
@@ -1329,26 +1292,12 @@ function miolo(_x, _x2, _x3) {
1329
1292
  function _miolo() {
1330
1293
  _miolo = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(sconfig, render, callback) {
1331
1294
  var _config$http, _config$auth, _config$auth2, _config$auth3;
1332
- var app, config, catcher_url, _yield$import, init_guest_auth_middleware, _yield$import2, init_basic_auth_middleware, _yield$import3, init_passport_auth_middleware, conn, extra_middlewares;
1295
+ var app, config, catcher_url, _yield$import, init_guest_auth_middleware, _yield$import2, init_basic_auth_middleware, _yield$import3, init_passport_auth_middleware, conn, extra_middlewares, _yield$import4, init_route_html_render;
1333
1296
  return _regeneratorRuntime().wrap(function _callee$(_context) {
1334
1297
  while (1) switch (_context.prev = _context.next) {
1335
1298
  case 0:
1336
1299
  app = new Koa(); // Init some pieces
1337
- config = init_config(sconfig); //const emailer = init_emailer(config.mail.options, config.mail.defaults)
1338
- //const logger = init_logger(config.log, emailer)
1339
- //config.db.connection.options.log= logger
1340
- // // attach to app calustra's db methods
1341
- // initCalustraDbContext(app, config.db)
1342
- //
1343
- // // attach to app some custom miolo methods
1344
- // app.context.miolo = {
1345
- // config: {...config},
1346
- // emailer,
1347
- // logger,
1348
- // db: app.context.db
1349
- // }
1350
- //
1351
- // attach to app some custom miolo methods
1300
+ config = init_config(sconfig); // attach to app some custom miolo methods
1352
1301
  init_context_middleware(app, config);
1353
1302
 
1354
1303
  // Compress and body parser
@@ -1428,11 +1377,23 @@ function _miolo() {
1428
1377
  init_headers_middleware(app, config.http);
1429
1378
 
1430
1379
  // Middleware for html render
1431
- if (render == undefined || render.html != undefined) {
1432
- init_route_html_render(app, render == null ? void 0 : render.html);
1433
- } else if (render.middleware != undefined) {
1380
+ if (!(render == undefined || render.html != undefined)) {
1381
+ _context.next = 41;
1382
+ break;
1383
+ }
1384
+ _context.next = 36;
1385
+ return Promise.resolve().then(function () { return html_render; });
1386
+ case 36:
1387
+ _yield$import4 = _context.sent;
1388
+ init_route_html_render = _yield$import4.init_route_html_render;
1389
+ init_route_html_render(app, render == null ? void 0 : render.html);
1390
+ _context.next = 42;
1391
+ break;
1392
+ case 41:
1393
+ if (render.middleware != undefined) {
1434
1394
  app.use(render.middleware);
1435
1395
  }
1396
+ case 42:
1436
1397
  app.listen(config.http.port, config.http.hostname, function () {
1437
1398
  app.context.miolo.logger.info("miolo is listening on " + config.http.hostname + ":" + config.http.port);
1438
1399
  init_cron(app.context.miolo.logger);
@@ -1441,7 +1402,7 @@ function _miolo() {
1441
1402
  }
1442
1403
  });
1443
1404
  return _context.abrupt("return", app);
1444
- case 36:
1405
+ case 44:
1445
1406
  case "end":
1446
1407
  return _context.stop();
1447
1408
  }
@@ -1450,77 +1411,22 @@ function _miolo() {
1450
1411
  return _miolo.apply(this, arguments);
1451
1412
  }
1452
1413
 
1453
- var Context = /*#__PURE__*/React.createContext();
1454
-
1455
- var AppContext = function AppContext(_ref) {
1456
- var context = _ref.context,
1457
- children = _ref.children;
1458
- var _useState = useState(context),
1459
- innerContext = _useState[0],
1460
- setInnerContext = _useState[1];
1461
- useEffect(function () {
1462
- setInnerContext(context);
1463
- }, [context]);
1464
- return /*#__PURE__*/React.createElement(Context.Provider, {
1465
- value: {
1466
- context: innerContext,
1467
- setContext: setInnerContext
1468
- }
1469
- }, children);
1470
- };
1471
-
1472
- var AppSsr = function AppSsr(_ref) {
1473
- var url = _ref.url,
1474
- context = _ref.context,
1475
- children = _ref.children;
1476
- return /*#__PURE__*/React.createElement(StaticRouter, {
1477
- location: url
1478
- }, /*#__PURE__*/React.createElement(AppContext, {
1479
- context: context
1480
- }, children));
1481
- };
1482
-
1483
1414
  var ErrMessage = function ErrMessage(_ref) {
1484
1415
  _ref.ctx;
1485
1416
  var error = _ref.error;
1486
1417
  return /*#__PURE__*/React.createElement("div", null, "[MIOLO-SERVER_TOOLS] Missing SSR renderer: " + error.toString());
1487
1418
  };
1488
1419
 
1489
- var html = "\n\t\t<!DOCTYPE html>\n\t\t<html lang=\"en\">\n\t\t<head>\n\t\t\t<meta charset=\"utf-8\">\n\t\t\t<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n\t\t\t<title>miolo</title>\n\t\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\t\t\t<meta name=\"description\" content=\"miolo\" />\n\t\t\t<meta name=\"keywords\" content=\"miolo web\" />\n\t\t\t<meta name=\"author\" content=\"miolo.afialapis.com\" />\n\n\t\t\t<!-- Touch Icons - iOS and Android 2.1+ 180x180 pixels in size. --> \n\t\t\t<!--<link rel=\"apple-touch-icon-precomposed\" href=\"/favicon.ico\"/>-->\n\t\t\t<!-- Firefox, Chrome, Safari, IE 11+ and Opera. 196x196 pixels in size. -->\n\t\t\t<link rel=\"icon\" href=\"/favicon.ico\"/>\n\n\t\t\t{styles}\n\n\t\t\t<script>\n\t\t\t\twindow.__CONTEXT = {context}\n\t\t\t</script>\t\t\n\t\t</head>\n\n\t\t<body>\n\t\t\t<div id=\"root\">{children}</div>\n\t\t\t{bundle}\n\t\t</body>\n\t\t</html>\n ";
1420
+ var html = "\n\t\t<!DOCTYPE html>\n\t\t<html lang=\"en\">\n\t\t<head>\n\t\t\t<meta charset=\"utf-8\">\n\t\t\t<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n\t\t\t<title>miolo</title>\n\t\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\t\t\t<meta name=\"description\" content=\"miolo\" />\n\t\t\t<meta name=\"keywords\" content=\"miolo web\" />\n\t\t\t<meta name=\"author\" content=\"miolo.afialapis.com\" />\n\n\t\t\t<!-- Touch Icons - iOS and Android 2.1+ 180x180 pixels in size. --> \n\t\t\t<!--<link rel=\"apple-touch-icon-precomposed\" href=\"/favicon.ico\"/>-->\n\t\t\t<!-- Firefox, Chrome, Safari, IE 11+ and Opera. 196x196 pixels in size. -->\n\t\t\t<link rel=\"icon\" href=\"/favicon.ico\"/>\n\n\t\t\t<script>\n\t\t\t\twindow.__CONTEXT = {context}\n\t\t\t</script>\t\t\n\t\t</head>\n\n\t\t<body>\n\t\t\t<div id=\"root\">{children}</div>\n\t\t</body>\n\t\t</html>\n ";
1490
1421
 
1491
1422
  function init_render_middleware(loader, renderer, options) {
1492
1423
  // parse options
1493
- var html$1 = html,
1494
- port = 8000,
1495
- use_css = true;
1424
+ var html$1 = html;
1496
1425
  try {
1497
1426
  if ((options == null ? void 0 : options.html) != undefined) {
1498
1427
  html$1 = options.html;
1499
1428
  }
1500
1429
  } catch (_) {}
1501
- try {
1502
- if ((options == null ? void 0 : options.port) != undefined) {
1503
- if (!isNaN(parseInt(options.port))) {
1504
- port = parseInt(options.port);
1505
- }
1506
- }
1507
- } catch (_) {}
1508
- try {
1509
- use_css = (options == null ? void 0 : options.css) !== false;
1510
- } catch (_) {}
1511
- var bundleURL = '';
1512
- var cssURL = use_css ? '' : '';
1513
- var def_renderer = function def_renderer(ctx) {
1514
- try {
1515
- return renderer(ctx);
1516
- } catch (error) {
1517
- ctx.miolo.logger.error('Missing renderer in the render middleware');
1518
- return ErrMessage({
1519
- ctx: ctx,
1520
- error: error
1521
- });
1522
- }
1523
- };
1524
1430
  var def_loader = /*#__PURE__*/function () {
1525
1431
  var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(ctx) {
1526
1432
  var res;
@@ -1565,7 +1471,6 @@ function init_render_middleware(loader, renderer, options) {
1565
1471
  return def_loader(ctx);
1566
1472
  case 2:
1567
1473
  ssr_data = _context2.sent;
1568
- //const ssr_comp = def_renderer(ctx)
1569
1474
  isAuthed = false;
1570
1475
  try {
1571
1476
  isAuthed = (ctx == null ? void 0 : ctx.isAuthenticated()) === true;
@@ -1592,15 +1497,21 @@ function init_render_middleware(loader, renderer, options) {
1592
1497
  ssr_data: ssr_data,
1593
1498
  extra: ctx == null ? void 0 : ctx.extra
1594
1499
  };
1595
- ssr_html = renderToString( /*#__PURE__*/React.createElement(AppSsr, {
1596
- url: ctx.url,
1597
- context: context
1598
- }, function () {
1599
- return def_renderer(ctx);
1600
- }));
1601
- parsed_html = html$1.replace('{context}', JSON.stringify(context, null, 2)).replace(/{bundleURL}/g, bundleURL).replace('{children}', ssr_html).replace('{styles}', cssURL).replace('{bundle}', bundleURL);
1500
+ ssr_html = '';
1501
+ try {
1502
+ ssr_html = renderToString(renderer(ctx, context));
1503
+ } catch (error) {
1504
+ ctx.miolo.logger.error('Missing renderer in the render middleware');
1505
+ ctx.miolo.logger.error(error);
1506
+ ssr_html = renderToString( /*#__PURE__*/React.createElement(ErrMessage, {
1507
+ ctx: ctx,
1508
+ error: error
1509
+ }));
1510
+ }
1511
+ parsed_html = html$1.replace('{context}', JSON.stringify(context, null, 2)).replace('{children}', ssr_html);
1512
+ ctx.miolo.logger.debug("render_middleware() rendered HTML (" + Buffer.byteLength(ssr_html, 'utf8') + " bytes of SSR content, " + Buffer.byteLength(parsed_html, 'utf8') + " bytes total) ");
1602
1513
  ctx.body = parsed_html;
1603
- case 13:
1514
+ case 15:
1604
1515
  case "end":
1605
1516
  return _context2.stop();
1606
1517
  }
@@ -1883,4 +1794,45 @@ var passport = /*#__PURE__*/Object.freeze({
1883
1794
  init_passport_auth_middleware: init_passport_auth_middleware
1884
1795
  });
1885
1796
 
1886
- export { AppSsr, init_render_middleware, miolo };
1797
+ var __my_filename = fileURLToPath(require('url').pathToFileURL(__filename).toString());
1798
+ var __my_dirname = path.dirname(__my_filename);
1799
+ var indexHTMLPath = path.resolve(__my_dirname, 'fallback_index.html');
1800
+ var indexHTML = readFileSync(indexHTMLPath, 'utf8');
1801
+ function init_route_html_render(app, html) {
1802
+ // Server-side render
1803
+ function html_render(_x) {
1804
+ return _html_render.apply(this, arguments);
1805
+ }
1806
+ function _html_render() {
1807
+ _html_render = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(ctx) {
1808
+ var logger, reqid, ip, method, url, what;
1809
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
1810
+ while (1) switch (_context.prev = _context.next) {
1811
+ case 0:
1812
+ logger = ctx.miolo.logger;
1813
+ reqid = ctx.requestId;
1814
+ ip = ctx.headers["x-real-ip"] || '127.0.0.1';
1815
+ method = ctx.request.method;
1816
+ url = ctx.request.url;
1817
+ what = html != undefined ? 'provided html' : 'fallback page';
1818
+ logger.info(reqid + " - " + ip + " : " + cyan(method) + " " + cyan(url) + " => Rendering " + what);
1819
+ ctx.body = html || indexHTML;
1820
+ case 8:
1821
+ case "end":
1822
+ return _context.stop();
1823
+ }
1824
+ }, _callee);
1825
+ }));
1826
+ return _html_render.apply(this, arguments);
1827
+ }
1828
+ var html_render_router = new Router();
1829
+ html_render_router.get('/', html_render);
1830
+ app.use(html_render_router.routes());
1831
+ }
1832
+
1833
+ var html_render = /*#__PURE__*/Object.freeze({
1834
+ __proto__: null,
1835
+ init_route_html_render: init_route_html_render
1836
+ });
1837
+
1838
+ export { init_render_middleware, miolo };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "miolo",
3
- "version": "0.3.2",
3
+ "version": "0.3.5",
4
4
  "description": "all-in-one koa-based server",
5
5
  "author": "Donato Lorenzo <donato@afialapis.com>",
6
6
  "contributors": [
@@ -52,10 +52,9 @@
52
52
 
53
53
  "dist": "npm run cli-dist && npm run cli-react-dist && npm run server-dist",
54
54
 
55
- "demo-cli-build-bundle": "npx xeira bundle --target=browser --source_index=./demo/src/cli/index.js --bundle_folder=./demo/build/js --bundle_name=miolo-demo --bundler=rollup",
56
- "demo-cli-build-trim": "rm -fr ./demo/build/js/*umd* ./demo/build/js/*.mjs* ./demo/build/js/*.min* ./demo/build/js/*.iife.js*",
57
- "demo-cli-build-link": "cd ./demo/build && ln -s ./js/miolo-demo.iife.bundle.js bundle.js",
58
- "demo-cli-build": "rm -fr ./demo/build/* && npm run demo-cli-build-bundle && npm run demo-cli-build-trim && npm run demo-cli-build-link",
55
+ "demo-cli-build-bundle": "npx xeira bundle --target=browser --source_index=./demo/src/cli/index.js --bundle_folder=./demo/build --bundle_name=miolo-demo --bundler=rollup",
56
+ "demo-cli-build-trim": "rm -fr ./demo/build/*umd* ./demo/build/*.mjs* ./demo/build/*.min* ./demo/build/*.iife.js*",
57
+ "demo-cli-build": "rm -fr ./demo/build/* && npm run demo-cli-build-bundle && npm run demo-cli-build-trim",
59
58
  "demo-server": "NODE_ENV=development npx nodemon --inspect ./demo/src/server/index.js",
60
59
  "demo": "npm run demo-cli-build && npm run demo-server",
61
60
 
@@ -95,9 +94,9 @@
95
94
  "winston": "^3.6.0"
96
95
  },
97
96
  "peerDependencies": {
98
- "react": "^17.0.2",
99
- "react-dom": "^17.0.2",
100
- "react-router-dom": "^6.2.1"
97
+ "react": ">=16.13.1",
98
+ "react-dom": ">=16.13.1",
99
+ "react-router-dom": ">=6.2.1"
101
100
  },
102
101
  "devDependencies": {
103
102
  "@babel/core": "^7.17.2",
@@ -105,7 +104,7 @@
105
104
  "@babel/preset-react": "7.16.7",
106
105
  "@babel/register": "7.16.9",
107
106
  "nodemon": "^2.0.22",
108
- "xeira": "^0.3.2"
107
+ "xeira": "^0.3.3"
109
108
  },
110
109
  "eslintConfig": {
111
110
  "extends": [