2
0
Fork 0

WIP open file for a while

This commit is contained in:
Willem 2017-06-10 16:53:29 +02:00
parent f937019e42
commit d280fb9af3
122 changed files with 5702 additions and 10 deletions

View file

@ -0,0 +1,63 @@
var debug = require('debug')('ff:tcrud:plugin:server:config:resouces:mobile');
var configRegistry = require('./../../../config-registry');
var configUtil = require('./../../../config-util');
var fetch = require('fetch');
module.exports = (function () {
var webAssets = [];
var fetchHashResource = function(fetchEntry,cb) {
fetch.fetchUrl(fetchEntry.url,function(err, meta, data) {
debug('fetched url: '+fetchEntry.url+' length: '+meta.responseHeaders['content-length']);
var assetHash = configUtil.stringHash(''+data);
webAssets.push({
url: fetchEntry.url,
type: fetchEntry.type,
hash: assetHash
});
cb();
});
};
var fetchHashResources = function(fetchList, cb) {
var startTime = new Date().getTime();
debug('createHashResources: '+fetchList.length);
var resourceStack = fetchList;
var resourceLoader = function() {
resourceStack = resourceStack.slice(1);
if (resourceStack.length === 0) {
debug('fetchHashResources done in '+(new Date().getTime()-startTime)+' ms.');
cb();
} else {
fetchHashResource(resourceStack[0],resourceLoader);
}
};
fetchHashResource(resourceStack[0],resourceLoader);
};
return function ServerConfigResourcesMobilePlugin() {
this.configPlugin = function (ctx) {
ctx.key = 'serverConfigResourcesMobile';
ctx.description = 'Exports client resources mobile.';
ctx.localDir = __dirname;
ctx.localConfigTemplate = 'config-resources-mobile.json';
};
this.configServer = function(ctx) {
ctx.server.get(ctx.createSlugApiServerBase(),ctx.renderFunctionJSON(function () {
return {
resources: webAssets
}
}));
};
this.configPostBoot = function(ctx) {
fetchHashResources(configRegistry.createClientResourceFetchList(), function() {
debug('Total assets build: '+webAssets.length);
});
}
};
})();

View file

@ -0,0 +1,12 @@
{
"masterTEntityTemplate": {
"tmeta": { "tplugin": { "serverConfigResourcesMobile": {
"tslug": "config/client-resources-mobile"
}}}
},
"masterTEntityTHelp": {
"tmeta": { "tplugin": { "serverConfigResourcesMobile": {
"tslug": "The client resource for mobile slug."
}}}
}
}

View file

@ -0,0 +1,144 @@
var debug = require('debug')('ff:tcrud:plugin:server:config:resouces:web');
var configRegistry = require('./../../../config-registry');
var configUtil = require('./../../../config-util');
var fetch = require('fetch');
// FIXME: use type as key
var assetCss = '';
var assetCssUrl = '';
var assetCssHash = '';
var assetCssData = '';
var assetCssDataUrl = '';
var assetCssDataHash = '';
var assetJs = '';
var assetJsUrl = '';
var assetJsHash = '';
var plugin = (function () {
var webAssets = [];
var fetchResource = function(fetchEntry,cb) {
fetch.fetchUrl(fetchEntry.url,function(err, meta, data) {
if (err) {
throw err;
}
debug('fetched url: '+fetchEntry.url+' length: '+meta.responseHeaders['content-length']);
//debug('meta: '+JSON.stringify(meta));
if (fetchEntry.type === 'css') {
assetCss += '\n/* FILE: '+fetchEntry.url+' */\n';
assetCss += data;
} else if (fetchEntry.type === 'js') {
assetJs += '\n/* FILE: '+fetchEntry.url+' */\n';
assetJs += data;
} else if (fetchEntry.type === 'dss') {
assetCssData += '\n/* FILE: '+fetchEntry.url+' */\n';
assetCssData += data;
}
cb();
});
};
var fetchResources = function(fetchList, cb) {
var startTime = new Date().getTime();
debug('createResources: '+fetchList.length);
var resourceStack = fetchList;
var resourceLoader = function() {
resourceStack = resourceStack.slice(1);
if (resourceStack.length === 0) {
debug('fetchResources done in '+(new Date().getTime()-startTime)+' ms.');
cb();
} else {
fetchResource(resourceStack[0],resourceLoader);
}
};
fetchResource(resourceStack[0],resourceLoader);
};
return function ServerConfigResourcesWebPlugin() {
this.configPlugin = function (ctx) {
ctx.key = 'serverConfigResourcesWeb';
ctx.description = 'Exports client resources web.';
ctx.localDir = __dirname;
ctx.localConfigTemplate = 'config-resources-web.json';
};
this.configServer = function(ctx) {
ctx.server.get(ctx.createSlugApiServerBase(),ctx.renderFunctionJSON(function () {
return {
resources: webAssets
}
}));
};
this.configPostBoot = function(ctx) {
fetchResources(configRegistry.createClientResourceFetchList(), function() {
assetJsHash = configUtil.stringHash(assetJs);
assetCssHash = configUtil.stringHash(assetCss);
assetCssDataHash = configUtil.stringHash(assetCssData);
debug('Total size assets.js: '+assetJs.length+' hash: '+assetJsHash);
debug('Total size assets.css: '+assetCss.length+' hash: '+assetCssHash);
debug('Total size assets-data.css: '+assetCssData.length+' hash: '+assetCssDataHash);
// note: js first to inject href asap by loader
webAssets.push({
url: assetJsUrl,
type: 'js',
hash: assetJsHash
});
webAssets.push({
url: assetCssUrl,
type: 'css',
hash: assetCssHash
});
webAssets.push({
url: assetCssDataUrl,
type: 'dss',
hash: assetCssDataHash
});
});
}
};
})();
var pluginDownload = (function () {
return function ServerConfigResourcesWebAssetPlugin() {
this.configPlugin = function (ctx) {
ctx.key = 'serverConfigResourcesWebAsset';
ctx.description = 'Exports downloaded client web resources.';
ctx.dependencies.push('serverConfigResourcesWeb');
};
this.configServer = function(ctx) {
assetCssDataUrl = ctx.createSlugApiPluginBase('assets-data.css');
ctx.server.get(assetCssDataUrl,function (req, res, next) {
res.set('Content-Type','text/css');
res.write(assetCssData);
res.end();
});
assetCssUrl = ctx.createSlugApiPluginBase('assets.css');
ctx.server.get(assetCssUrl,function (req, res, next) {
res.set('Content-Type','text/css');
res.write(assetCss);
res.end();
});
assetJsUrl = ctx.createSlugApiPluginBase('assets.js');
ctx.server.get(assetJsUrl,function (req, res, next) {
res.set('Content-Type','application/javascript');
res.write(assetJs);
res.end();
});
};
};
})();
module.exports = {
web: plugin,
webAssets: pluginDownload
};

View file

@ -0,0 +1,12 @@
{
"masterTEntityTemplate": {
"tmeta": { "tplugin": { "serverConfigResourcesWeb": {
"tslug": "config/client-resources-web"
}}}
},
"masterTEntityTHelp": {
"tmeta": { "tplugin": { "serverConfigResourcesWeb": {
"tslug": "The client resources web slug."
}}}
}
}

View file

@ -0,0 +1,68 @@
var buildServerExpress = require('./../../../build-server-express');
module.exports = (function () {
var renderServerRoutes = function (server) {
if (!server) {
throw new Error('no server');
}
return function (req, res, next) {
var routeList = buildServerExpress.getRoutes(server);
if (!routeList) {
routeList = [];
}
var reqGroups = req.query.groups;
var groupList = [];
if (reqGroups) {
groupList = reqGroups.split(',');
}
var result = {
all: [],
};
for (var i = 0; i < groupList.length; i++) {
var groupName = groupList[i].split('/').join('_');
result[groupName] = [];
}
groupList.sort(function(a, b) {
return a.length < b.length; // longest first as we break on first hit
});
for (i = 0; i < routeList.length; i++) {
var route = routeList[i];
var added = false;
for (var ii = 0; ii < groupList.length; ii++) {
if (route.uriPath.indexOf(groupList[ii]) > 0) {
var groupName = groupList[ii].split('/').join('_');
result[groupName].push(route);
added = true;
break;
}
}
if (!added) {
result.all.push(route);
}
}
res.json({
data: result
});
};
}
return function ServerConfigRoutesPlugin() {
this.configPlugin = function (ctx) {
ctx.key = 'serverConfigRoutes';
ctx.description = 'Exports all server routes.';
ctx.localDir = __dirname;
ctx.localConfigTemplate = 'config-routes.json';
};
this.configServer = function(ctx) {
ctx.server.get(ctx.createSlugApiServerBase(),renderServerRoutes(ctx.server));
};
this.configPostBoot = function(ctx) {
buildServerExpress.saveRoutes(ctx.server);
};
};
})();

View file

@ -0,0 +1,12 @@
{
"masterTEntityTemplate": {
"tmeta": { "tplugin": { "serverConfigRoutes": {
"tslug": "config/routes"
}}}
},
"masterTEntityTHelp": {
"tmeta": { "tplugin": { "serverConfigRoutes": {
"tslug": "The routes slug."
}}}
}
}

View file

@ -0,0 +1,28 @@
var configRegistry = require('./../../../config-registry');
module.exports = (function () {
return function ServerConfigTMenuPlugin() {
this.configPlugin = function (ctx) {
ctx.key = 'serverConfigTMenu';
ctx.description = 'Exports tmenu.';
ctx.localDir = __dirname;
ctx.localConfigTemplate = 'config-tmenu.json';
};
this.configServer = function(ctx) {
ctx.server.get(ctx.createSlugApiServerBase(),ctx.renderFunctionJSON(function() {
var result = {};
for (var key in configRegistry.getMasterConfig().rootTMenu) {
var value = configRegistry.getMasterConfig().rootTMenu[key];
if (value.items.length > 0) {
result[key] = value; // remove empty menus
}
}
return result;
}));
};
};
})();

View file

@ -0,0 +1,12 @@
{
"masterTEntityTemplate": {
"tmeta": { "tplugin": { "serverConfigTMenu": {
"tslug": "config/menu"
}}}
},
"masterTEntityTHelp": {
"tmeta": { "tplugin": { "serverConfigTMenu": {
"tslug": "The config tmenu slug."
}}}
}
}

View file

@ -0,0 +1,23 @@
var configRegistry = require('./../../../config-registry');
module.exports = (function () {
return function ServerConfigTViewPlugin() {
this.configPlugin = function (ctx) {
ctx.key = 'serverConfigTView';
ctx.description = 'Exports tentity tviews.';
ctx.localDir = __dirname;
ctx.localConfigTemplate = 'config-tview.json';
};
this.configApi = function(ctx) {
ctx.server.get(ctx.createSlugApiTEntityBase(),ctx.renderFunctionJSON(function () {
return {
tview: ctx.tview
}
}));
};
};
})();

View file

@ -0,0 +1,12 @@
{
"masterTEntityTemplate": {
"tmeta": { "tplugin": { "serverConfigTView": {
"tslug": "config/tview"
}}}
},
"masterTEntityTHelp": {
"tmeta": { "tplugin": { "serverConfigTView": {
"tslug": "The config tview slug."
}}}
}
}

View file

@ -0,0 +1,42 @@
var configRegistry = require('./../../config-registry');
module.exports = (function () {
var masterDebug = function(ctx,modelName,modelType,model) {
ctx.server.get(
ctx.createSlugApiServerBase('master')+
'/'+modelName+
'/'+modelType
,ctx.renderFunctionJSON(function() {
var result = {};
result[modelName] = model;
return result;
})
);
};
return function ServerDebugPlugin() {
this.configPlugin = function (ctx) {
ctx.key = 'serverDebug';
ctx.description = 'Exports some debug data.';
ctx.localDir = __dirname;
ctx.localConfigTemplate = 'debug.json';
};
this.configServer = function(ctx) {
var mt = configRegistry.getMasterTemplates();
masterDebug(ctx,'tfield', 'template', mt.masterTFieldTemplate);
masterDebug(ctx,'tfield', 'thelp', mt.masterTFieldTHelp);
masterDebug(ctx,'tentity', 'template', mt.masterTEntityTemplate);
masterDebug(ctx,'tentity', 'thelp', mt.masterTEntityTHelp);
masterDebug(ctx,'tview', 'template', mt.masterTViewTemplate);
masterDebug(ctx,'tview', 'thelp', mt.masterTViewTHelp);
// todo: TypeError: Converting circular structure to JSON
//ctx.server.get(ctx.createSlugApiServerBase('config/root-tentity'),this.renderFunction(function() {
// return configRegistry.rootTEntity;
//}));
};
};
})();

View file

@ -0,0 +1,12 @@
{
"masterTEntityTemplate": {
"tmeta": { "tplugin": { "serverDebug": {
"tslug": "debug"
}}}
},
"masterTEntityTHelp": {
"tmeta": { "tplugin": { "serverDebug": {
"tslug": "The server debug slug."
}}}
}
}

View file

@ -0,0 +1,55 @@
var configRegistry = require('./../../../config-registry');
module.exports = (function () {
var createPluginInfo = function() {
var result = {};
for (var pluginIdx in configRegistry.getMasterConfig().plugins) {
var plugin = configRegistry.getMasterConfig().plugins[pluginIdx];
var pluginExtensions = Object.keys(plugin).slice(0,-1);
//TODO: pluginExtensions.remove('tmeta');
var pluginData = {
extensions: pluginExtensions,
tmeta: plugin.tmeta,
troutes: plugin.troutes
};
result[plugin.tmeta.key] = pluginData;
}
return result;
};
var createPluginKeyList = function() {
var result = [];
for (var pluginIdx in configRegistry.getMasterConfig().plugins) {
var plugin = configRegistry.getMasterConfig().plugins[pluginIdx];
result.push(plugin.tmeta.key);
}
return result;
};
return function ServerInfoPluginsPlugin() {
this.configPlugin = function (ctx) {
ctx.key='serverInfoPlugins';
ctx.description='Makes the server plugins info public as json';
ctx.localDir = __dirname;
ctx.localConfigTemplate = 'info-plugins.json';
};
this.configServer = function(ctx) {
ctx.server.get(ctx.createSlugApiServerBase(),ctx.renderFunctionJSON(function () {
return {
plugins: {
keys: {
registrated: createPluginKeyList(),
backends: Object.keys(configRegistry.getMasterConfig().backends),
validators: Object.keys(configRegistry.getMasterConfig().validators)
},
info: createPluginInfo()
}
}
}));
};
};
})();

View file

@ -0,0 +1,12 @@
{
"masterTEntityTemplate": {
"tmeta": { "tplugin": { "serverInfoPlugins": {
"tslug": "info/plugins"
}}}
},
"masterTEntityTHelp": {
"tmeta": { "tplugin": { "serverInfoPlugins": {
"tslug": "The info plugins slug."
}}}
}
}

View file

@ -0,0 +1,28 @@
module.exports = (function () {
var timeBoot = new Date().getTime();
return function ServerInfoUptimePlugin() {
this.configPlugin = function (ctx) {
ctx.key='serverInfoUptime';
ctx.description='Makes the server uptime info public as json';
ctx.localDir = __dirname;
ctx.localConfigTemplate = 'info-uptime.json';
};
this.configServer = function(ctx) {
ctx.server.get(ctx.createSlugApiServerBase(),ctx.renderFunctionJSON(function () {
var timeNow = new Date().getTime();
return {
serverInfoUptime: {
time_boot: timeBoot,
time_now: timeNow,
uptime: timeNow-timeBoot
}
}
}));
};
};
})();

View file

@ -0,0 +1,12 @@
{
"masterTEntityTemplate": {
"tmeta": { "tplugin": { "serverInfoUptime": {
"tslug": "info/uptime"
}}}
},
"masterTEntityTHelp": {
"tmeta": { "tplugin": { "serverInfoUptime": {
"tslug": "The info uptime slug."
}}}
}
}