File: application/webfan/node_modules/webfan/cjs/frdlcjs.js

Recommend this page to a friend!
  Classes of Till Wehowski   µ.Flow   application/webfan/node_modules/webfan/cjs/frdlcjs.js   Download  
File: application/webfan/node_modules/webfan/cjs/frdlcjs.js
Role: Example script
Content type: text/plain
Description: Example script
Class: µ.Flow
General purpose library of objects
Author: By
Last change: Update frdlcjs.js
Date: 6 years ago
Size: 19,871 bytes
 

Contents

Class file image Download
/*!# @license webfan (C) Till Wehowski, Webfan.de - All rights reserved. !*/ define([ 'webfan/es6-compiler', 'webfan/bootcache!amd-loader','webfan/bootcache!lit', 'feature!vm'], function(traceur, amdL, Lit, vm) { console.log('es6Compiler traceur ', traceur); let URL = global.URL || global.webkitURL; let requestFileSystem = global.requestFileSystem || global.webkitRequestFileSystem; let resolveLocalFileSystemURL = global.resolveLocalFileSystemURL || global.webkitResolveLocalFileSystemURL; navigator.temporaryStorage = navigator.temporaryStorage || navigator.webkitTemporaryStorage; navigator.persistentStorage = navigator.persistentStorage || navigator.webkitPersistentStorage; let BlobBuilder = global.BlobBuilder || global.MozBlobBuilder || global.WebKitBlobBuilder; requirejs.config({ map: { 'webfan/bootcache': { '*': 'frdlcjs' } } }); var CACHE_LIMIT_LOCAL_STORAGE = 24 * 60 * 60 * 1000; var ext = 'js'; var cjsRequireRegExp = /\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g; var amdLoader = clone(amdL); var plugin = amdLoader('frdlcjs', ext, ['js'], function(name, source, req, callback, errback, config) { function parse_require_calls(Source){ var d = []; var lit = clone(Lit); // alert(JSON.stringify(lit)); lit.opts.identify_number_literals = true; lit.opts.identify_simple_literals = true; lit.opts.overlook_html_comment_markers = true; var ast = lit.lex(Source); var i = 0, t = false, tok = false, Toks = []; var _regex = /([^\n\,;!?\s{}=]+)/i; var requiredUrls = [], defineCalls = [], reqUrl = false, requireCall = false, defineCall = false; for (i = 0; i < ast.length - 1; i++) { Toks = []; tok = ast[i]; if (0 === tok.type) { t = tok.val.split(_regex); t.forEach( function(t, i) { if ('' !== t && ' ' !== t) Toks.push(t); }); if('require(' === Toks[Toks.length - 1]) { if (2 === ast[i + 1].type) { reqUrl = ast[i + 1].val.substr(1, ast[i + 1].val.length - 2); if (')' === ast[i + 2].val.substr(0, 1) || ',' === ast[i + 2].val.substr(0, 1)) { requireCall = { returnTok: Toks[Toks.length - 2], url: reqUrl, AstPosition : i + 1 }; requiredUrls.push(requireCall); } } }else if('define(' === tok.val.substr(0, 'define('.length)){ //Toks[Toks.length - 1]){ //if (0 === ast[i + 1].type) { defineCall = { token : tok }; defineCalls.push(defineCall); // } } } } // alert(JSON.stringify(ast)); // alert(JSON.stringify(defineCalls)); // alert(JSON.stringify(requiredUrls)); var CompilerConfig = { es6 : true, defaultPlugin : 'frdlcjs', defineWrap : true }; var comment_lines = []; var compiler_comments_directives = []; ast.forEach( function(a, i) { if(1!==parseInt(a.type))return; // alert(JSON.stringify(a.val.split(/[\r\n]/))); a.val.split(/[\r\n\t]+/) .forEach( function(c, j) { comment_lines.push(c); if(false!==strpos(c, '@')){ //alert(c); c.replace(/@\s?([(){}.-_\w^@><]+)\s?:?([().-_><@\s\w]+)/, function(match, _type, _value, pos, all){ var Com = { type : _type.trim(), value : _value.trim() }; // alert(JSON.stringify(Com)); compiler_comments_directives.push(Com); return match; }); } }); }); compiler_comments_directives.forEach( function(d, i) { if('no' === d.value.toLowerCase() || 'false' === d.value.toLowerCase() || 0 === parseInt(d.value) ){ d.value=false; }else if('yes' === d.value.toLowerCase() || 'true' === d.value.toLowerCase() || 1 === parseInt(d.value) ){ d.value=true; } var p = explode('.', d.type); if(p.length === 5 && 'frdl' === p[0] && 'Frdlweb' === p[1] && 'js' === p[2] && 'Compiler' === p[3] ){ CompilerConfig[p[4]] = d.value; } }); if(false!==CompilerConfig.defaultPlugin) { requiredUrls.forEach( function(r, i) { var tok = CompilerConfig.defaultPlugin + '!'; if(tok!==r.url.substr(0, tok.length)){ var nUrl =tok + r.url; // requiredUrls[i].url = 'frdlcjs!'+ r.url; ast[parseInt(r.AstPosition)].val=str_replace(requiredUrls[i].url, nUrl, ast[parseInt(r.AstPosition)].val); // alert(JSON.stringify(ast[parseInt(r.AstPosition)])); } }); } // alert(JSON.stringify(ast)); Source = lit.generate(ast); // source = 'define(function(require, exports, module){'+source+'});'; // source = 'define(function(require, exports, module) { var define=undefined;' + source + ' \n//# sourceURL=' + req.toUrl(name) + '\n });'; if((true=== CompilerConfig.defineWrap && 0===defineCalls.length && false!==strpos('exports', Source) ) ){ Source = 'define("'+name+'", ["require", "exports", "module"], function( require,exports, module){\n'+Source+' \n//# sourceURL=' + req.toUrl(name) + '\n});'; console.log('No dedfine call ', Source, CompilerConfig, defineCalls, strpos('exports', Source) ); }else{ // Source = '{' + Source + '}'; Source=Source+' \n//# sourceURL=' + req.toUrl(name)+ '\n'; } if(true!== !!CompilerConfig.es6){ var source =Source; }else{//if(true!== !!CompilerConfig.es6) var url = req.toUrl(name) + '.js'; var project = new traceur.semantics.symbols.Project(url); // traceur.options = config.traceur; traceur.options = clone(traceur.options); traceur.options.sourceMaps = false; // traceur.options.sourceMaps = true; traceur.options.debug = true; var reporter = new traceur.util.ErrorReporter(); reporter.reportMessageInternal = function(location, kind, format, args) { errback(location + '\n ' + format + '\n ' + args + '\n'); } try{ var source =Source; var sourceFile = new traceur.syntax.SourceFile(name, source); project.addFile(sourceFile); var res = traceur.codegeneration.Compiler.compile(reporter, project, false); // console.log('res compiled : ', res); var options; if (true === traceur.options.sourceMaps) { var config = {file: 'traceured.js'}; var sourceMapGenerator = new traceur.outputgeneration.SourceMapGenerator(config); options = {sourceMapGenerator: sourceMapGenerator}; } source = traceur.outputgeneration.ProjectWriter.write(res, options); if (true === traceur.options.sourceMaps) { var sourceMap = JSON.parse(options.sourceMap); //sourceMap.sourcesContent = [null, null, null, null]; // nb make this work // source += '\n//@ sourceMappingURL=data:application/json;base64,' + frdl.base64_encode(JSON.stringify(options.sourceMap)); source += '\n//@ sourceMappingURL=data:application/json;base64,' +base64_encode(JSON.stringify(options.sourceMap)); // console.log('sourceMap: ', sourceMap); } }catch(err){ console.warn('Error transpiling from es6 : '+ name +' '+err); var source = Source; } } return { source : source, requiredUrls : requiredUrls, countDefineCalls : defineCalls.length }; }//if(true!== !!CompilerConfig.es6){}else{ } function runIt(c, runItCallback){ function compile(s){ var _url = req.toUrl(name); if(false===strpos(_url, '.js') && false===strpos(_url, '.css') && false===strpos(_url, '.html') && false===strpos(_url, '.xml')){ _url += '.js'; } var parsed = false, mime = localStorage.getItem(_url+'#mime'); if(null !== mime){ mime = explode(';', mime)[0].trim(); } // alert(mime); if(null === mime || false !== strpos(mime, 'script') ){ parsed = parse_require_calls(s); }else if(false !== strpos(mime, 'css') ){ alert('@ToDo : require->parse text/css ('+name+')'); }else if(false !== strpos(mime, 'html') ){ alert('@ToDo : require->parse text/html ('+name+')'); }else{ parsed = { source : s }; } return parsed.source; } var r = runItCallback( c ); return r; }//runIt req.exec = require.exec /**/= function (js) { function compile_after(code){ code = parse_require_calls(code).source; return code; } var script = vm.createScript(js, { filename : name, compile : compile_after }); var context = vm.createContext({ }); if('undefined'!==typeof frdl){ context.frdl=frdl; if('undefined'!==typeof frdl.webfan){ context.webfan=frdl.webfan; } } try{ return script.runInNewContext(context); }catch(err){ console.error(err , script.code); } }; runIt(source, callback); }); var _fetch = clone(amdLoader.fetch); let hasLocalStorage = (function(){ var supported = false; try{ supported = window && ("localStorage" in window) && ("getItem" in localStorage); }catch(e){} return supported; })(); plugin.fetch = amdLoader.fetch = function(url, callback, errback) { var path = url; var cb = function(code){ if( // 1===0 && 'undefined'!==typeof frdl && 'undefined'!==typeof frdl.fs && 'function'===typeof frdl.fs.writeFile && true === frdl.fs.polyfill.check() && true === frdl.fs.polyfill.ready ){ frdl.fs.writeFile(path, base64_encode(code), console.warn); frdl.fs.writeFile(path + '#meta', new Date().getTime(), console.warn); } try { if('undefined'===typeof frdl || 'undefined'===typeof frdl.fs || 'function'!==typeof frdl.fs.writeFile || true !== frdl.fs.polyfill.check() || true !== frdl.fs.polyfill.ready || 16 > localStorage.length ){ localStorage.setItem(path, base64_encode(code)); localStorage.setItem(path + '#meta', new Date().getTime()); } } catch(e) { if(!!console)console.warn(e); } callback(code); }; if (hasLocalStorage) { var cached = localStorage.getItem(url); var lt = localStorage.getItem(url + '#meta'); if (cached !== null && null !== lt && (CACHE_LIMIT_LOCAL_STORAGE>(new Date().getTime()-parseInt(lt)))) { callback(base64_decode(cached)); return; } } if ('undefined'!==typeof frdl && 'undefined'!==typeof frdl.fs && 'function'===typeof frdl.fs.readFile && true === frdl.fs.polyfill.check() && true === frdl.fs.polyfill.ready ) { frdl.fs.readFile(url, function(e,cached){ if(e){ return _fetch(url, cb, errback); return; } frdl.fs.readFile(url + '#meta', function(e_meta,d_meta){ if(e_meta){ return _fetch(url, cb, errback); return; } if ('string'===typeof cached && 'string'===typeof d_meta && (CACHE_LIMIT_LOCAL_STORAGE>(new Date().getTime()-parseInt(d_meta)))) { callback(base64_decode(cached)); return; } _fetch(url, cb, errback); }); }); return; } else{ _fetch(url, cb, errback); } }; function extend(from, to) { if (from === null || typeof from !== 'object') return from; if (from.constructor !== Object && from.constructor !== Array) return from; if (from.constructor === Date || from.constructor === RegExp || from.constructor === Function || from.constructor === String || from.constructor === Number || from.constructor === Boolean) return new from.constructor(from); to = to || new from.constructor(); var name; for (name in from) { to[name] = typeof to[name] === 'undefined' ? extend(from[name], null) : to[name]; } return to; }; function clone(obj) { var clone = extend(obj); return clone; }; function base64_encode(data) { var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, enc = "", tmp_arr = []; if (!data) { return data; } do { o1 = data.charCodeAt(i++); o2 = data.charCodeAt(i++); o3 = data.charCodeAt(i++); bits = o1 << 16 | o2 << 8 | o3; h1 = bits >> 18 & 0x3f; h2 = bits >> 12 & 0x3f; h3 = bits >> 6 & 0x3f; h4 = bits & 0x3f; tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4); } while (i < data.length); enc = tmp_arr.join(''); var r = data.length % 3; return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3); } function base64_decode(data) { var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, dec = "", tmp_arr = []; if (!data) { return data; } data += ''; do { h1 = b64.indexOf(data.charAt(i++)); h2 = b64.indexOf(data.charAt(i++)); h3 = b64.indexOf(data.charAt(i++)); h4 = b64.indexOf(data.charAt(i++)); bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; o1 = bits >> 16 & 0xff; o2 = bits >> 8 & 0xff; o3 = bits & 0xff; if (h3 == 64) { tmp_arr[ac++] = String.fromCharCode(o1); } else if (h4 == 64) { tmp_arr[ac++] = String.fromCharCode(o1, o2); } else { tmp_arr[ac++] = String.fromCharCode(o1, o2, o3); } } while (i < data.length); dec = tmp_arr.join(''); return dec; } function base64_detect(str) { var base64Detect = new RegExp("^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$"); if (base64Detect.test(str)) { return true; } else { return false; } } function getFunctionBody(func){ return func.toString().trim().match(new RegExp("^function\s*\w*\s*\([\w\s,]*\)\s*{([\w\W]*?)}$"))[1]; } function createJavascriptObjectURL(func){ var functionBody = getFunctionBody(func); return URL.createObjectURL(new Blob([functionBody], { type: "text/javascript" })); } function strpos(haystack, needle, offset) { var i = (haystack + '').indexOf(needle, (offset || 0)); return i === -1 ? false : i; } function str_replace(search, replace, subject) { if ('string' !== typeof subject) return ''; try { return subject.split(search).join(replace); } catch (err) { console.error(err); return ''; } } function explode(delimiter, string, limit) { if (arguments.length < 2 || typeof delimiter === 'undefined' || typeof string === 'undefined') return null; if (delimiter === '' || delimiter === false || delimiter === null) return false; if (typeof delimiter === 'function' || typeof delimiter === 'object' || typeof string === 'function' || typeof string === 'object') { return [0]; } if (delimiter === true) delimiter = '1'; delimiter += ''; string += ''; var s = string.split(delimiter); if (typeof limit === 'undefined') return s; if (limit === 0) limit = 1; if (limit > 0) { if (limit >= s.length) return s; return s.slice(0, limit - 1).concat([s.slice(limit - 1).join(delimiter)]); } if (-limit >= s.length) return []; s.splice(s.length + limit); return s; } return plugin; });