UNPKG

7.5 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../src/cover.js"],"names":["path","require","url","AggregateError","unindent","stringHash","fromString","RENDER_PATH","COVER_PATH","module","exports","options","config","main","req","res","err","error","Array","isArray","console","status","send","message","cover","sendStatus","wait","queue","fs","getModule","fromFs","context","getContext","render","Promise","resolve","content","html","base","params","scripts","default","observable","reject","type","payload","subscribe","dirname","filename","componentBundleSource","String","readFileSync","getExports","exportsCache","Map","source","hash","has","set","get","prefix","head","css","before","after","js"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,MAAMA,OAAOC,QAAQ,MAAR,CAAb;;AACA,MAAMC,MAAMD,QAAQ,KAAR,CAAZ;;AACA,MAAME,iBAAiBF,QAAQ,iBAAR,CAAvB;;AACA,MAAMG,WAAWH,QAAQ,UAAR,CAAjB;;AACA,MAAMI,aAAaJ,QAAQ,aAAR,CAAnB;;AACA,MAAMK,aAAaL,QAAQ,qBAAR,CAAnB;;AAEA,MAAMM,cAAc,8BAApB;AACA,MAAMC,aAAa,6BAAnB;;AAEAC,OAAOC,OAAP,GAAuBC,OAAN;AAAA,QACRC,MADQ,GACED,OADF,CACRC,MADQ;AAGf,iBAAO,SAAeC,IAAf,CAAoBC,GAApB,EAAyBC,GAAzB;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA,mCAcIC,GAdJ,EAcS;AACNC,aADM,GACEC,MAAMC,OAAN,CAAcH,GAAd,IAAqB,IAAIb,cAAJ,CAAmBa,GAAnB,CAArB,GAA+CA,GADjD;AAEZI,gBAAQH,KAAR,CAAcA,KAAd;AACAF,YAAIM,MAAJ,CAAW,GAAX,EAAgBC,IAAhB,CAAqBL,MAAMM,OAA3B;AAHY;AAIb,OAlBI;;AACL,UAAI;AACF,YAAI,CAACX,OAAOY,KAAZ,EAAmB;AACjB,yBAAOT,IAAIU,UAAJ,CAAe,GAAf,CAAP;AACD;;AAEY,eAAMC,KAAKf,QAAQgB,KAAb,CAAN;AAAA,2BAANC,EAAM,QAANA,EAAM;AACPC,mBADO,GACKC,OAAOF,EAAP,CADL;AAGPJ,eAHO,GAGCK,UAAUrB,UAAV,CAHD;AAIPuB,iBAJO,GAIGC,WAAWpB,MAAX,CAJH;AAKPqB,gBALO,GAKE,OAAOT,MAAMS,MAAb,KAAwB,UAAxB,GAAqCT,MAAMS,MAA3C,GAAoDJ,UAAUtB,WAAV,CALtD;AAMG,iBAAM2B,QAAQC,OAAR,CAAgBF,OAAOT,KAAP,EAAcO,OAAd,CAAhB,CAAN;AAAVK,mBAAU;AAChBrB,gBAAIO,IAAJ,CAASe,KAAKD,OAAL,EAAc;AAACE,oBAAMxB,IAAIyB,MAAJ,CAAWD,IAAX,IAAmB,GAA1B;AAA+BE,uBAAS,OAAOhB,MAAMiB,OAAb,KAAyB;AAAjE,aAAd,CAAT;AADgB;AAAA;AANH;AAQd,OAbD,CAaE,OAAOzB,GAAP,EAAY;AAAA,qBAALA,GAAK;AAIb;AAlBI;AAAA,GAAP;AAHe,mBAAjB,C,CAyBA;;;AACA,SAASU,IAAT,CAAcgB,UAAd,EAA0B;AACxB,SAAO,IAAIR,OAAJ,CAAY,CAACC,OAAD,EAAUQ,MAAV,KAAqB;AAAA,6CACfD,WAAWf,KADI;AAAA;AAAA,UAC/BJ,OAD+B,mCACrB,EADqB;;AAEtC,YAAQA,QAAQqB,IAAhB;AACE,WAAK,MAAL;AACE,eAAOT,QAAQZ,QAAQsB,OAAhB,CAAP;;AACF,WAAK,OAAL;AACE,eAAOF,OAAOpB,QAAQsB,OAAf,CAAP;;AACF;AACEH,mBAAWI,SAAX,CACEnB,SAAS;AAAA,wCACWA,KADX;AAAA,gBACAJ,OADA;;AAEP,kBAAQA,QAAQqB,IAAhB;AACE,iBAAK,MAAL;AACE,qBAAOT,QAAQZ,QAAQsB,OAAhB,CAAP;;AACF,iBAAK,OAAL;AACE,qBAAOF,OAAOpB,QAAQsB,OAAf,CAAP;;AACF;AACE,qBAAO,IAAP;AANJ;AAQD,SAXH,EAYEF,MAZF;AANJ;AAqBD,GAvBM,CAAP;AAwBD;;AAED,SAASX,UAAT,CAAoBpB,MAApB,EAA4B;AAC1B,SAAO;AACLmC,aAAS/C,KAAK+C,OAAL,CAAanC,OAAOY,KAApB;AADJ,GAAP;AAGD;;AAED,SAASM,MAAT,CAAgBF,EAAhB,EAAoB;AAClB,SAAOoB,YAAY;AACjB,UAAMC,wBAAwBC,OAAOtB,GAAGuB,YAAH,CAAgBH,QAAhB,CAAP,CAA9B;AACA,WAAOI,WAAWH,qBAAX,EAAkCD,QAAlC,CAAP;AACD,GAHD;AAID;;AAED,MAAMK,eAAe,IAAIC,GAAJ,EAArB;;AAEA,SAASF,UAAT,CAAoBG,MAApB,EAA4B;AAACP;AAAD,CAA5B,EAAwC;AACtC,QAAMQ,OAAOnD,WAAWkD,MAAX,CAAb;;AAEA,MAAI,CAACF,aAAaI,GAAb,CAAiBD,IAAjB,CAAL,EAA6B;AAC3BH,iBAAaK,GAAb,CAAiBF,IAAjB,EAAuBlD,WAAWiD,MAAX,EAAmBP,QAAnB,CAAvB;AACD;;AAED,SAAOK,aAAaM,GAAb,CAAiBH,IAAjB,CAAP;AACD;;AAED,SAASnB,IAAT,CAAcD,OAAd,EAAuBzB,OAAvB,EAAgC;AAC9B,QAAMiD,SAAS1D,IAAIiC,OAAJ,CAAYxB,QAAQ2B,IAApB,EAA0B,KAA1B,CAAf;AAEA,SAAOlC,SAAU;;;;;UAKTgC,QAAQyB,IAAR,IAAgB,EAAG;;;YAGjBzB,QAAQ0B,GAAR,IAAe,EAAG;;;;;UAKpB1B,QAAQ2B,MAAR,IAAkB,EAAG;;iEAEkC3B,QAAQC,IAAR,IAAgB,EAAG;;UAE1ED,QAAQ4B,KAAR,IAAiB,EAAG;uBACPJ,MAAO;UACpBjD,QAAQ6B,OAAR,GAAmB;yBACJoB,MAAO;yBACPA,MAAO;yBACPA,MAAO;SAHtB,GAIE,EAAG;;;YAGHxB,QAAQ6B,EAAR,IAAc,EAAG;;;;GA1BpB,CAAP;AA+BD","file":"cover.js","sourcesContent":["const path = require(\"path\");\nconst url = require(\"url\");\nconst AggregateError = require(\"aggregate-error\");\nconst unindent = require(\"unindent\");\nconst stringHash = require(\"string-hash\");\nconst fromString = require(\"require-from-string\");\n\nconst RENDER_PATH = \"/patternplate.node.render.js\";\nconst COVER_PATH = \"/patternplate.node.cover.js\";\n\nmodule.exports = async options => {\n const {config} = options;\n\n return async function main(req, res) {\n try {\n if (!config.cover) {\n return res.sendStatus(404);\n }\n\n const {fs} = await wait(options.queue);\n const getModule = fromFs(fs);\n\n const cover = getModule(COVER_PATH);\n const context = getContext(config);\n const render = typeof cover.render === \"function\" ? cover.render : getModule(RENDER_PATH);\n const content = await Promise.resolve(render(cover, context));\n res.send(html(content, {base: req.params.base || \"/\", scripts: typeof cover.default === 'function'}));\n } catch (err) {\n const error = Array.isArray(err) ? new AggregateError(err) : err;\n console.error(error);\n res.status(500).send(error.message);\n }\n };\n};\n\n// Todo: Unify with wait and fromFS, getExports from demo.js\nfunction wait(observable) {\n return new Promise((resolve, reject) => {\n const [message = {}] = observable.queue;\n switch (message.type) {\n case 'done':\n return resolve(message.payload);\n case 'error':\n return reject(message.payload);\n default:\n observable.subscribe(\n queue => {\n const [message] = queue;\n switch (message.type) {\n case 'done':\n return resolve(message.payload);\n case 'error':\n return reject(message.payload);\n default:\n return null;\n }\n },\n reject\n );\n }\n });\n}\n\nfunction getContext(config) {\n return {\n dirname: path.dirname(config.cover)\n };\n}\n\nfunction fromFs(fs) {\n return filename => {\n const componentBundleSource = String(fs.readFileSync(filename));\n return getExports(componentBundleSource, filename);\n };\n}\n\nconst exportsCache = new Map();\n\nfunction getExports(source, {filename}) {\n const hash = stringHash(source);\n\n if (!exportsCache.has(hash)) {\n exportsCache.set(hash, fromString(source, filename));\n }\n\n return exportsCache.get(hash);\n}\n\nfunction html(content, options) {\n const prefix = url.resolve(options.base, \"api\");\n\n return unindent(`\n <!doctype html>\n <html lang=\"en\">\n <head>\n <!-- content.head -->\n ${content.head || \"\"}\n <style>\n /* content.css */\n ${content.css || \"\"}\n </style>\n </head>\n <body>\n <!-- content.before -->\n ${content.before || \"\"}\n <!-- content.html -->\n <div data-patternplate-mount=\"data-patternplate-mount\">${content.html || \"\"}</div>\n <!-- content.after -->\n ${content.after || \"\"}\n <script src=\"${prefix}/patternplate.web.probe.js\"></script>\n ${options.scripts ? `\n <script src=\"${prefix}/patternplate.web.cover.js\"></script>\n <script src=\"${prefix}/patternplate.web.mount.js\"></script>\n <script src=\"${prefix}/patternplate.web.cover-client.js\"></script>\n ` : ''}\n <script>\n /* content.js */\n ${content.js || \"\"}\n </script>\n </body>\n </html>\n `);\n}\n"]}
\No newline at end of file