console.log('__dirname', __dirname)
console.log('process.cwd', process.cwd())
console.log('process.env', process.env)
//console.log('process', process)
// process.on('error', console.error)
// process.on('uncaughtException', console.error)
//npmRunPath()
//var myModulePath = require('app-root-path').resolve('/lib/my-module.js');
var Application = exports = (module && module.exports) ? module.exports : {};
const Module = require('module')
const os = require('os')
var axios = require("axios")
var { vol } = require('memfs')
var { patchFs, patchRequire } = require('fs-monkey')
var { VM, NodeVM, VMScript } = require('vm2')
var { ufs } = require('unionfs')
var fs = require('fs')
//var Module = require('module')
var isCoreModule = require('is-core-module');
var Settings = require('convict-register')
var DIContainer = require('electrolyte')
var Napa = require('napa')
var DirHelper = require('node-dir')
var ncfg = require('ncfg')
var defineLazyProp = require('define-lazy-prop')
var requireControl = require('require-control');
var {
esm_modules,
interopRequire,
setAliases,
resolutions,
mirrorModuleCache,
hoistExtensions,
babelIt
} = requireControl;
//require('require-context/register')
var Vinyl = require('vinyl')
var importLazy = require('import-lazy')
var requireVm = require('require-vm')
var compiler = require('require/compiler')
/*
var compiler = require('require/compiler')
console.log(compiler.compile('./example/client.js'))
console.log(compiler.compileCode('require("./example/client")'))
*/
var requireServer = require('require/server')
var requireContext = require('require-context')
var bcrypt = require("bcrypt")
var toll = require("toll")
var npmHttpServer = require("npm-http-server")
var express=require('express');
var path = require('path')
////var cheerio = require("cheerio")
var util = require("util")
var childProcess = require('child_process');
var npmRunPath = require('npm-run-path');
//var runkitExpress = require("@runkit/runkit/express-endpoint/1.0.0")
var npmHttpServer = require("npm-http-server")
var isObject = require('is-object')
var merge = require('@betafcc/deep-merge')
//var dl = require("@frdl/simple-downloader")
var requireFromWeb = require('require-from-web')
var requireFromUrl = require('require-from-url')
var requireFromUrlSync = require('require-from-url/sync')
var data_uri = require('data-uri');
var merge = require('@betafcc/deep-merge')
var rmerge = merge.addCase(
[Array.isArray, Array.isArray],
(a, b) => a.concat(b)
)
var commonModules = {
"@frdl/merge" : merge,
"@frdl/rmerge" : rmerge,
"axios":axios
};
var commonModulesOnServer = merge(commonModules, {
});
var commonModulesOnBrowser = merge(commonModules, {
// 'http' : commonModules.axios,
// 'https' : commonModules.axios,
// 'request' : commonModules.axios.request
});
var bubleItPlugins = {
"@babel/cli": true,
"@babel/core": true,
"@babel/plugin-proposal-export-namespace-from": true,
"@babel/plugin-proposal-object-rest-spread": true,
"@babel/plugin-transform-modules-commonjs": true,
"@babel/plugin-transform-runtime": true,
"@babel/preset-env": true,
"@babel/preset-flow": true,
"@babel/preset-typescript": true,
"@babel/register": true,
"@babel/runtime": true,
"@rollup/plugin-babel": true,
"@rollup/plugin-json": true,
"@rollup/plugin-node-resolve": true,
"@rollup/plugin-replace": true,
"@typescript-eslint/eslint-plugin": true,
"@typescript-eslint/parser": true,
"babel-plugin-transform-charcodes": true
};
var clone = require('clone')
require.rootResolve =clone(require.resolve);
//require.resolve = require('app-root-path').resolve
var requireFromServer= clone(require);
const defaultResolvers = Object.assign({}, requireFromServer.extensions);
// require('require-context/register');
var requireFromServerRuntime = function (){
// return requireFromServer(...arguments);
var mod = ('undefined'!==typeof this) ? this : requireFromServer;
return requireFromServer.apply(mod, Array.prototype.slice.call(arguments))
};
var requireFromApplicationRootPath = function (){
// return requireFromServerRuntime('app-root-path').require(...arguments);
var mod = ('undefined'!==typeof this) ? this : requireFromServerRuntime;
return requireFromServerRuntime.apply(mod, Array.prototype.slice.call(arguments))
};
//var requireFromString = require('require-from-string')
var requireFromSource, define, m,s,r;
var moduleMap = require._cache;
var main = requireFromServer.main || Application;
var getContext = dir => {
return requireContext(
('string'===typeof dir) ? dir : path.resolve(__dirname, '..'),
true,
/(\.js|package\.json)$/
);
};
var builtInProps = ['id', '_id', 'module', 'source','contents'];
class SourceArtifact extends Vinyl {
constructor(options, source) {
super(options);
options = ('string' ===typeof options) ? {id:options} : options;
var self = this;
self.id = options.id;
if(true===source){
source = self.id;
}
self.source= require.resolve(source || options.source || self.id);
self.context=options.context || getContext(__dirname);
defineLazyProp(self, 'contents',async ()=>{
var fn = self.wrap;
var module =await fn(self, (err, moduleResult)=>{
if(err){
throw err;
}else{
var instance = self['@InstancePointer'] = moduleResult.exports;
}
});
var instance = self['@InstancePointer'];
return `${instance}`;
});
return self;
}
/*
get contents() {
var module = this.wrap(this, console.log);
return module.exports;
}
*/
get wrap() {
return (instance, done) => {
var self = instance || this;
var theRequest = self.source || self.id;
var contextObject = requireContext(self.context);
return new Promise(async(resolve,reject)=>{
const importLazyBound = importLazy(req=>{
var packagePath = req, pkg = self['@Package'] = new Napa(self.source, self.id, {
"cache" : true,
"cache-path":path.join(global.os.tmpdir(), '.frdl', 'shared', '.cache'),
"log-level": "error"
});
console.log('pkg',pkg);
var buf = !pkg.installed
? pkg.install(function (err) {
if(err){
reject( err);
}else{
packagePath = path.resolve(pkg.installTo, 'package.json')
}
})
: packagePath = path.resolve(pkg.installTo, 'package.json')
var result = requireVm(packagePath, contextObject, {
id : self.id,
cwd : process.cwd(),
source : self.source
}, require._cache, true);
return result;
});//importLazyBound
var module = new Module(self.id, self.context);
// m.exports = importLazyBound(theRequest);
defineLazyProp(module, 'exports', ()=>{
return importLazyBound(theRequest);
});
resolve(module);
}).then(moduleResult => {
done(null, moduleResult);
return moduleResult;
}).catch(err=>done(err));//Promise
};//return async
}// get wrap()
static isCustomProp(name) {
return super.isCustomProp(name) && builtInProps.indexOf(name) === -1;
}
}
define = async (id, deps, fn) => {
defineLazyProp(require._cache, id,async ()=>{
var parent = global.require.main || main || Application;
var module = new Module(id, parent);
module.exports = await (async (require,exports,module)=>{
var args = [];
if(deps && deps.length && deps.length>0){
for(var i=0;i<deps.length;i++){
// define(deps[i], null, ()=>{
// return require(deps[i]);
// } );
args.push(await require(deps[i]) );
}
}
return await fn.apply(null, args);
})( require,module.exports,module)
return module.exports;
});
};
requireFromSource = (key,val) => {
var m,s,r;
if('string'!==typeof key && 'object' === typeof key && true!==key instanceof Array){
r = {};
for( m in key){
r[m]= requireFromSource(m, key[m])
}
return r
}else if('string'!==typeof key && 'object' === typeof key && true===key instanceof Array){
r=[];
key.forEach((v,i,a)=>{
var {id,source} = ('string'===typeof v) ? v : (('object' === typeof v && true===v instanceof Array)
? {
id:v[0],
source:v[1]
}
: a[i]);
r.push(requireFromSource(id,source))
})
return r
}else{
s = new SourceArtifact({
id:key,
source : val//,
// context : `${__dirname}`
}, (true===val) ? key : val)
define(s.id, [], ()=>{
return s.module
})
return s.module
}
};
var global = ('object'===typeof global && 'object'===typeof global.global)
? global.global
: require('global-object');
// DirHelper.paths(process.cwd(), true, handlePathsLogger);
// DirHelper.paths(__dirname, true, handlePathsLogger);
// DirHelper.paths('.', true, handlePathsLogger);
// DirHelper.paths('node_modules', true, handlePathsLogger);
var _require = ((reqFn)=>{
var require = reqFn;
const Require = function(){
var mod = ('undefined'!==typeof this) ? this : require;
return require.apply(mod, Array.prototype.slice.call(arguments))
};
return function(){
return Require.apply(Require, Array.prototype.slice.call(arguments))
};
})(require)
_require.compiler=compiler
//_require.unpatch = unpatch
_require.isCoreModule=isCoreModule
_require.from = _require
_require.from.string = requireFromString
_require.from.url = requireFromUrlSync
_require.from.web = requireFromWeb
_require.from.private = requireFromServerRuntime
_require.from.virtual = requireVm
_require.from.endpoint =loadEndpoint
_require.from.source =requireFromSource
_require.from.server = requireFromServer
_require.from.runtime = requireFromServerRuntime
_require.from.root = requireFromApplicationRootPath
//global.require.from.context=requireContext
//global.require.from.server =requireServer
/*
const moduleMap ={
'fs':ufs,
'@frdl/vm-node':NodeVM,
'@frdl/vm':VM,
'vm':VM
}
*/
//requireVm(reqest, contextObject={}, options={}, moduleMap={}, isCache=false)
//var vm = require('vm')
//require('require-context/register');
//const Tpl = requireFromString('https://webhub.frdl.de/@frdl/tpl/index.js');
//npmRunPath()
Application =await _require.from.endpoint(
'https://webhub.frdl.de/@frdl/webfantized/runkit-endpoint.js',
Application || exports || {}
)
//_require.from.source(commonModulesOnServer)
//_require.from.source(bubleItPlugins)
//_require.from.source('main', path.resolve(__dirname, '..'))
//require('require-control/register')
hoistExtensions(['.tsx', '.ts', '.jsx']);
//esm_modules(); // support ES in node_modules
// interopRequire(); // "webpack" default imports everywhere in js,jsx,less,scss
interopRequire(['.js', '.jsx', '.less', '.scss']); // "webpack" default imports for .less files
setAliases({ // why not!
'vm':NodeVM,
'@frdl/main': process.cwd(),
});
resolutions(req => { // custom resolution
if (req === 'common') {
return '@frdl/common';
}
if(req==='npm'){
return 'pnpm';
}
return req;
});
vol.fromJSON({
'.dummy' : ''
});
ufs
.use(vol)
// .use( fs )
;
_require.patchFs = ufs => patchFs( ufs )
//var unpatch = patchFs(ufs )
patchRequire(ufs, true, Module)
global.require = _require;
console.log('Application ',Application)
function runkitExpress(anExport)
{
var mount = express();
var app = express();
// "mount" is our root app, and it mounts "app" at your notebook path
// which is available in the RUNKIT_MOUNT_PATH environment variable
mount.use(process.env.RUNKIT_MOUNT_PATH || "", app);
if (anExport) {
anExport.endpoint = mount;
}
// overwrite .listen since it is not needed
app.listen = function(){}
// return the express instance for use by the caller
return app;
}
function requireFromString(code, filename, opts, Module) {
// var path = require('path');
if (typeof filename === 'object') {
opts = filename;
filename = undefined;
}
if (typeof Module === 'undefined') {
var Module = require('module');
}
opts = opts || {};
filename = filename || '';
opts.appendPaths = opts.appendPaths || [];
opts.prependPaths = opts.prependPaths || [];
if (typeof code !== 'string') {
throw new Error('code must be a string, not ' + typeof code);
}
var paths = Module._nodeModulePaths(path.dirname(filename));
var parent = module.parent;
var m = new Module(filename, parent);
m.filename = filename;
m.paths = [].concat(opts.prependPaths).concat(paths).concat(opts.appendPaths);
m._compile(code, filename);
var exports = m.exports;
parent && parent.children && parent.children.splice(parent.children.indexOf(m), 1);
return exports;
}
function handlePathsLogger(err, paths) {
if(err){
return ((e)=>{throw e;})(err)
}
var relPaths = paths.map(curPath => {
return path.relative('~/', curPath);
});
relPaths = relPaths.sort();
console.log('paths', paths);
console.log('relPaths', relPaths);
}
async function loadEndpoint(url, exp){
var route, routes = [];
var app = runkitExpress(exp)
var mount = await(async function mount(mount){
// var source =await dl(url)
var source =await axios.get(url)
var code = source.data
var mod = requireFromString(`${code}`, url,{
appendPaths : [],
prependPaths : []
},Module)(require, exp, process)
mod.config({
npmRegistryBaseUri : '/npm/',
npmRegistryProxyServer : {
registryURL: 'https://registry.npmjs.org', // The URL of the npm registry, defaults to the public registry
bowerBundle: '/bower.zip', // A special pathname for generating Bower bundles, defaults to "/bower.zip"
redirectTTL: 60, // The time (in seconds) to cache 302 responses, defaults to 0
autoIndex: true // Set false to disable generating index pages for directories
}
})
var endpoint = mod.Endpoint.create(mount)
return Promise.resolve(endpoint);
})(app)
return mount;
}