修复一些错误

This commit is contained in:
masnn committed 2020-05-19 12:46:00 +08:00
1 parent 747cb1b9b5
commit b19f948fdd
30 files changed
+306 -132

No files matched your search

+20 -52
View File
@@ -19,6 +19,7 @@ function ensureDir(dir) {
}
}
let pending = [];
const active = [];
const fail = [];
try {
@@ -26,39 +27,13 @@ try {
// eslint-disable-next-line import/no-unresolved
const f = require('../.build/builtin.json');
const m = { ...yaml.safeLoad(zlib.gunzipSync(f.data)), id: 'builtin' };
active.push(m);
pending.push(m);
} catch (e) {
// Builtin module is in the module directory
}
const moduleRoots = [
root('.build/module'),
root('module'),
root(path.resolve(os.homedir(), '.hydro', 'module')),
root('.'),
];
let moduleRoot;
for (const i of moduleRoots) {
if (fs.existsSync(i) && fs.statSync(i).isDirectory()) {
moduleRoot = i;
break;
}
}
async function preload() {
const files = fs.readdirSync(moduleRoot);
for (const file of files) {
if (file.endsWith('.hydro')) {
try {
const f = fs.readFileSync(root(`${moduleRoot}/${file}`));
const m = { ...yaml.safeLoad(zlib.gunzipSync(f)), id: file.split('.')[0] };
active.push(m);
} catch (e) {
console.error(`Module Load Fail: ${file}`);
}
}
}
for (const i of active) {
for (const i of pending) {
try {
if (i.os) {
if (!i.os.includes(os.platform().toLowerCase())) throw new Error('Unsupported OS');
@@ -86,14 +61,11 @@ async function preload() {
}
async function handler() {
for (const i of active) {
for (const i of pending) {
if (i.handler && !i.fail) {
try {
console.log(`Handler init: ${i.id}`);
console.time(`Handler init: ${i.id}`);
const exports = {};
// eslint-disable-next-line no-unused-vars
const module = { exports, file: i.files || {} };
eval(i.handler);
console.timeEnd(`Handler init: ${i.id}`);
} catch (e) {
@@ -106,7 +78,7 @@ async function handler() {
}
async function locale() {
for (const i of active) {
for (const i of pending) {
if (i.locale && !i.fail) {
try {
global.Hydro.lib.i18n(i.locale);
@@ -121,7 +93,7 @@ async function locale() {
}
async function template() {
for (const i of active) {
for (const i of pending) {
if (i.template && !i.fail) {
try {
Object.assign(global.Hydro.template, i.template);
@@ -136,15 +108,13 @@ async function template() {
}
async function model() {
for (const i of active) {
for (const i of pending) {
if (i.model && !i.fail) {
try {
console.log(`Model init: ${i.id}`);
console.time(`Model init: ${i.id}`);
const exports = {};
const module = { exports, file: i.files || {} };
eval(i.model);
if ((module.exports || {}).index) await module.exports.index();
const m = eval(i.model);
if ((m || {}).index) await m.index();
console.timeEnd(`Model init: ${i.id}`);
} catch (e) {
i.fail = true;
@@ -156,14 +126,11 @@ async function model() {
}
async function lib() {
for (const i of active) {
for (const i of pending) {
if (i.lib && !i.fail) {
try {
console.log(`Lib init: ${i.id}`);
console.time(`Lib init: ${i.id}`);
const exports = {};
// eslint-disable-next-line no-unused-vars
const module = { exports, file: i.files || {} };
eval(i.lib);
console.timeEnd(`Lib init: ${i.id}`);
} catch (e) {
@@ -176,14 +143,12 @@ async function lib() {
}
async function service() {
for (const i of active) {
for (const i of pending) {
if (i.service && !i.fail) {
try {
console.time(`Service init: ${i.id}`);
const exports = {}; // eslint-disable-line no-unused-vars
const module = { exports };
eval(i.service);
if ((module.exports || {}).init) await module.exports.init();
const m = eval(i.service);
if ((m || {}).init) await m.init();
console.timeEnd(`Service init: ${i.id}`);
} catch (e) {
i.fail = true;
@@ -196,12 +161,10 @@ async function service() {
}
async function script() {
for (const i of active) {
for (const i of pending) {
if (i.script && !i.fail) {
try {
console.time(`Script init: ${i.id}`);
const exports = {};
const module = { exports }; // eslint-disable-line no-unused-vars
eval(i.script);
console.timeEnd(`Script init: ${i.id}`);
} catch (e) {
@@ -211,6 +174,7 @@ async function script() {
console.error(e);
}
}
if (!i.fail) active.push(i.name);
}
}
@@ -235,6 +199,7 @@ async function load() {
template: {},
ui: {},
};
pending.push(...await require('./lib/hpm').getInstalled());
await preload();
require('./lib/i18n');
require('./utils');
@@ -299,7 +264,10 @@ async function load() {
if (global.Hydro.service[i].postInit) await global.Hydro.service[i].postInit();
}
await script();
pending = [];
await server.start();
}
module.exports = { load, active, fail };
module.exports = {
load, pending, active, fail,
};