Webfantizer

node v15.14.0
version: 1.0.1
endpointsharetweet
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; }
/* console.log('DIContainer',DIContainer) DIContainer.use(DIContainer.node_modules()); DIContainer.use(DIContainer.dir('available_modules')); DIContainer.use(DIContainer.dir('app')); DIContainer.use(DIContainer.dir('app/components')); DIContainer.use(DIContainer.dir('packages')); DIContainer.use(DIContainer.dir('components')); var myApp = DIContainer.create('app'); */
Loading…

no comments

    sign in to comment