WIP open file for a while
This commit is contained in:
parent
f937019e42
commit
d280fb9af3
122 changed files with 5702 additions and 10 deletions
63
lib/plugin/server/config/config-resources-mobile.js
Normal file
63
lib/plugin/server/config/config-resources-mobile.js
Normal 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);
|
||||
});
|
||||
}
|
||||
};
|
||||
})();
|
||||
|
||||
12
lib/plugin/server/config/config-resources-mobile.json
Normal file
12
lib/plugin/server/config/config-resources-mobile.json
Normal 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."
|
||||
}}}
|
||||
}
|
||||
}
|
||||
144
lib/plugin/server/config/config-resources-web.js
Normal file
144
lib/plugin/server/config/config-resources-web.js
Normal 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
|
||||
};
|
||||
12
lib/plugin/server/config/config-resources-web.json
Normal file
12
lib/plugin/server/config/config-resources-web.json
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"masterTEntityTemplate": {
|
||||
"tmeta": { "tplugin": { "serverConfigResourcesWeb": {
|
||||
"tslug": "config/client-resources-web"
|
||||
}}}
|
||||
},
|
||||
"masterTEntityTHelp": {
|
||||
"tmeta": { "tplugin": { "serverConfigResourcesWeb": {
|
||||
"tslug": "The client resources web slug."
|
||||
}}}
|
||||
}
|
||||
}
|
||||
68
lib/plugin/server/config/config-routes.js
Normal file
68
lib/plugin/server/config/config-routes.js
Normal 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);
|
||||
};
|
||||
};
|
||||
})();
|
||||
12
lib/plugin/server/config/config-routes.json
Normal file
12
lib/plugin/server/config/config-routes.json
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"masterTEntityTemplate": {
|
||||
"tmeta": { "tplugin": { "serverConfigRoutes": {
|
||||
"tslug": "config/routes"
|
||||
}}}
|
||||
},
|
||||
"masterTEntityTHelp": {
|
||||
"tmeta": { "tplugin": { "serverConfigRoutes": {
|
||||
"tslug": "The routes slug."
|
||||
}}}
|
||||
}
|
||||
}
|
||||
28
lib/plugin/server/config/config-tmenu.js
Normal file
28
lib/plugin/server/config/config-tmenu.js
Normal 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;
|
||||
}));
|
||||
};
|
||||
};
|
||||
})();
|
||||
|
||||
12
lib/plugin/server/config/config-tmenu.json
Normal file
12
lib/plugin/server/config/config-tmenu.json
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"masterTEntityTemplate": {
|
||||
"tmeta": { "tplugin": { "serverConfigTMenu": {
|
||||
"tslug": "config/menu"
|
||||
}}}
|
||||
},
|
||||
"masterTEntityTHelp": {
|
||||
"tmeta": { "tplugin": { "serverConfigTMenu": {
|
||||
"tslug": "The config tmenu slug."
|
||||
}}}
|
||||
}
|
||||
}
|
||||
23
lib/plugin/server/config/config-tview.js
Normal file
23
lib/plugin/server/config/config-tview.js
Normal 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
|
||||
}
|
||||
}));
|
||||
};
|
||||
};
|
||||
})();
|
||||
|
||||
12
lib/plugin/server/config/config-tview.json
Normal file
12
lib/plugin/server/config/config-tview.json
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"masterTEntityTemplate": {
|
||||
"tmeta": { "tplugin": { "serverConfigTView": {
|
||||
"tslug": "config/tview"
|
||||
}}}
|
||||
},
|
||||
"masterTEntityTHelp": {
|
||||
"tmeta": { "tplugin": { "serverConfigTView": {
|
||||
"tslug": "The config tview slug."
|
||||
}}}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue