mirror of
https://github.com/node-red/node-red.git
synced 2025-03-01 10:36:34 +00:00
WIP: move all the code
This commit is contained in:
162
packages/node_modules/@node-red/util/i18n.js
generated
vendored
Normal file
162
packages/node_modules/@node-red/util/i18n.js
generated
vendored
Normal file
@@ -0,0 +1,162 @@
|
||||
/**
|
||||
* Copyright JS Foundation and other contributors, http://js.foundation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
**/
|
||||
|
||||
var i18n = require("i18next");
|
||||
|
||||
var when = require("when");
|
||||
var path = require("path");
|
||||
var fs = require("fs");
|
||||
|
||||
var defaultLang = "en-US";
|
||||
|
||||
var resourceMap = {};
|
||||
var resourceCache = {};
|
||||
var initPromise;
|
||||
|
||||
function registerMessageCatalogs(catalogs) {
|
||||
var promises = catalogs.map(function(catalog) {
|
||||
return registerMessageCatalog(catalog.namespace,catalog.dir,catalog.file);
|
||||
});
|
||||
return when.settle(promises);
|
||||
}
|
||||
|
||||
function registerMessageCatalog(namespace,dir,file) {
|
||||
return initPromise.then(function() {
|
||||
return new Promise((resolve,reject) => {
|
||||
resourceMap[namespace] = { basedir:dir, file:file};
|
||||
i18n.loadNamespaces(namespace,function() {
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function mergeCatalog(fallback,catalog) {
|
||||
for (var k in fallback) {
|
||||
if (fallback.hasOwnProperty(k)) {
|
||||
if (!catalog[k]) {
|
||||
catalog[k] = fallback[k];
|
||||
} else if (typeof fallback[k] === 'object') {
|
||||
mergeCatalog(fallback[k],catalog[k]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var MessageFileLoader = {
|
||||
type: "backend",
|
||||
init: function(services, backendOptions, i18nextOptions) {},
|
||||
read: function(lng, ns, callback) {
|
||||
if (resourceMap[ns]) {
|
||||
var file = path.join(resourceMap[ns].basedir,lng,resourceMap[ns].file);
|
||||
//console.log(file);
|
||||
fs.readFile(file,"utf8",function(err,content) {
|
||||
if (err) {
|
||||
callback(err);
|
||||
} else {
|
||||
try {
|
||||
resourceCache[ns] = resourceCache[ns]||{};
|
||||
resourceCache[ns][lng] = JSON.parse(content.replace(/^\uFEFF/, ''));
|
||||
//console.log(resourceCache[ns][lng]);
|
||||
if (lng !== defaultLang) {
|
||||
mergeCatalog(resourceCache[ns][defaultLang],resourceCache[ns][lng]);
|
||||
}
|
||||
callback(null, resourceCache[ns][lng]);
|
||||
} catch(e) {
|
||||
callback(e);
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
callback(new Error("Unrecognised namespace"));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function getCurrentLocale() {
|
||||
var env = process.env;
|
||||
for (var name of ['LC_ALL', 'LC_MESSAGES', 'LANG']) {
|
||||
if (name in env) {
|
||||
var val = env[name];
|
||||
return val.substring(0, 2);
|
||||
}
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
function init() {
|
||||
if (!initPromise) {
|
||||
// Keep this as a 'when' promise as top-level red.js uses 'otherwise'
|
||||
// and embedded users of NR may have copied that.
|
||||
initPromise = when.promise((resolve,reject) => {
|
||||
i18n.use(MessageFileLoader);
|
||||
var opt = {
|
||||
// debug: true,
|
||||
defaultNS: "runtime",
|
||||
ns: [],
|
||||
fallbackLng: defaultLang,
|
||||
interpolation: {
|
||||
unescapeSuffix: 'HTML',
|
||||
escapeValue: false,
|
||||
prefix: '__',
|
||||
suffix: '__'
|
||||
}
|
||||
};
|
||||
var lang = getCurrentLocale();
|
||||
if (lang) {
|
||||
opt.lng = lang;
|
||||
}
|
||||
i18n.init(opt ,function() {
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function getCatalog(namespace,lang) {
|
||||
var result = null;
|
||||
lang = lang || defaultLang;
|
||||
if (resourceCache.hasOwnProperty(namespace)) {
|
||||
result = resourceCache[namespace][lang];
|
||||
if (!result) {
|
||||
var langParts = lang.split("-");
|
||||
if (langParts.length == 2) {
|
||||
result = resourceCache[namespace][langParts[0]];
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
var obj = module.exports = {
|
||||
init: init,
|
||||
registerMessageCatalog: registerMessageCatalog,
|
||||
registerMessageCatalogs: registerMessageCatalogs,
|
||||
catalog: getCatalog,
|
||||
i: i18n,
|
||||
defaultLang: defaultLang
|
||||
}
|
||||
|
||||
obj['_'] = function() {
|
||||
//var opts = {};
|
||||
//if (def) {
|
||||
// opts.defaultValue = def;
|
||||
//}
|
||||
//console.log(arguments);
|
||||
var res = i18n.t.apply(i18n,arguments);
|
||||
return res;
|
||||
}
|
28
packages/node_modules/@node-red/util/index.js
generated
vendored
Normal file
28
packages/node_modules/@node-red/util/index.js
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
/**
|
||||
* Copyright JS Foundation and other contributors, http://js.foundation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
**/
|
||||
|
||||
|
||||
var log = require("./log");
|
||||
var i18n = require("./i18n");
|
||||
|
||||
module.exports = {
|
||||
init: function(settings) {
|
||||
log.init(settings);
|
||||
i18n.init();
|
||||
},
|
||||
log: log,
|
||||
i18n: i18n
|
||||
}
|
166
packages/node_modules/@node-red/util/log.js
generated
vendored
Normal file
166
packages/node_modules/@node-red/util/log.js
generated
vendored
Normal file
@@ -0,0 +1,166 @@
|
||||
/**
|
||||
* Copyright JS Foundation and other contributors, http://js.foundation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
**/
|
||||
|
||||
var util = require("util");
|
||||
var EventEmitter = require("events").EventEmitter;
|
||||
|
||||
var i18n = require("./i18n");
|
||||
|
||||
var levels = {
|
||||
off: 1,
|
||||
fatal: 10,
|
||||
error: 20,
|
||||
warn: 30,
|
||||
info: 40,
|
||||
debug: 50,
|
||||
trace: 60,
|
||||
audit: 98,
|
||||
metric: 99
|
||||
};
|
||||
|
||||
var levelNames = {
|
||||
10: "fatal",
|
||||
20: "error",
|
||||
30: "warn",
|
||||
40: "info",
|
||||
50: "debug",
|
||||
60: "trace",
|
||||
98: "audit",
|
||||
99: "metric"
|
||||
};
|
||||
|
||||
var logHandlers = [];
|
||||
|
||||
var verbose;
|
||||
|
||||
var metricsEnabled = false;
|
||||
|
||||
var LogHandler = function(settings) {
|
||||
this.logLevel = settings ? levels[settings.level]||levels.info : levels.info;
|
||||
this.metricsOn = settings ? settings.metrics||false : false;
|
||||
this.auditOn = settings ? settings.audit||false : false;
|
||||
|
||||
metricsEnabled = metricsEnabled || this.metricsOn;
|
||||
|
||||
this.handler = (settings && settings.handler) ? settings.handler(settings) : consoleLogger;
|
||||
this.on("log",function(msg) {
|
||||
if (this.shouldReportMessage(msg.level)) {
|
||||
this.handler(msg);
|
||||
}
|
||||
});
|
||||
}
|
||||
util.inherits(LogHandler, EventEmitter);
|
||||
|
||||
LogHandler.prototype.shouldReportMessage = function(msglevel) {
|
||||
return (msglevel == log.METRIC && this.metricsOn) ||
|
||||
(msglevel == log.AUDIT && this.auditOn) ||
|
||||
msglevel <= this.logLevel;
|
||||
}
|
||||
|
||||
var consoleLogger = function(msg) {
|
||||
if (msg.level == log.METRIC || msg.level == log.AUDIT) {
|
||||
util.log("["+levelNames[msg.level]+"] "+JSON.stringify(msg));
|
||||
} else {
|
||||
if (verbose && msg.msg && msg.msg.stack) {
|
||||
util.log("["+levelNames[msg.level]+"] "+(msg.type?"["+msg.type+":"+(msg.name||msg.id)+"] ":"")+msg.msg.stack);
|
||||
} else {
|
||||
var message = msg.msg;
|
||||
if (typeof message === 'object' && message !== null && message.toString() === '[object Object]' && message.message) {
|
||||
message = message.message;
|
||||
}
|
||||
util.log("["+levelNames[msg.level]+"] "+(msg.type?"["+msg.type+":"+(msg.name||msg.id)+"] ":"")+message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var log = module.exports = {
|
||||
FATAL: 10,
|
||||
ERROR: 20,
|
||||
WARN: 30,
|
||||
INFO: 40,
|
||||
DEBUG: 50,
|
||||
TRACE: 60,
|
||||
AUDIT: 98,
|
||||
METRIC: 99,
|
||||
|
||||
init: function(settings) {
|
||||
metricsEnabled = false;
|
||||
logHandlers = [];
|
||||
var loggerSettings = {};
|
||||
verbose = settings.verbose;
|
||||
if (settings.logging) {
|
||||
var keys = Object.keys(settings.logging);
|
||||
if (keys.length === 0) {
|
||||
log.addHandler(new LogHandler());
|
||||
} else {
|
||||
for (var i=0, l=keys.length; i<l; i++) {
|
||||
var config = settings.logging[keys[i]];
|
||||
loggerSettings = config || {};
|
||||
if ((keys[i] === "console") || config.handler) {
|
||||
log.addHandler(new LogHandler(loggerSettings));
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
log.addHandler(new LogHandler());
|
||||
}
|
||||
},
|
||||
addHandler: function(func) {
|
||||
logHandlers.push(func);
|
||||
},
|
||||
removeHandler: function(func) {
|
||||
var index = logHandlers.indexOf(func);
|
||||
if (index > -1) {
|
||||
logHandlers.splice(index,1);
|
||||
}
|
||||
},
|
||||
log: function(msg) {
|
||||
msg.timestamp = Date.now();
|
||||
logHandlers.forEach(function(handler) {
|
||||
handler.emit("log",msg);
|
||||
});
|
||||
},
|
||||
info: function(msg) {
|
||||
log.log({level:log.INFO,msg:msg});
|
||||
},
|
||||
warn: function(msg) {
|
||||
log.log({level:log.WARN,msg:msg});
|
||||
},
|
||||
error: function(msg) {
|
||||
log.log({level:log.ERROR,msg:msg});
|
||||
},
|
||||
trace: function(msg) {
|
||||
log.log({level:log.TRACE,msg:msg});
|
||||
},
|
||||
debug: function(msg) {
|
||||
log.log({level:log.DEBUG,msg:msg});
|
||||
},
|
||||
metric: function() {
|
||||
return metricsEnabled;
|
||||
},
|
||||
|
||||
audit: function(msg,req) {
|
||||
msg.level = log.AUDIT;
|
||||
if (req) {
|
||||
msg.user = req.user;
|
||||
msg.path = req.path;
|
||||
msg.ip = (req.headers && req.headers['x-forwarded-for']) || (req.connection && req.connection.remoteAddress) || undefined;
|
||||
}
|
||||
log.log(msg);
|
||||
}
|
||||
}
|
||||
|
||||
log["_"] = i18n._;
|
5
packages/node_modules/@node-red/util/package.json
generated
vendored
Normal file
5
packages/node_modules/@node-red/util/package.json
generated
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"name": "@node-red/util",
|
||||
"version": "0.20.0",
|
||||
"license": "Apache-2.0"
|
||||
}
|
Reference in New Issue
Block a user