{"version":3,"sources":["meteor://💻app/packages/server-render/server.js","meteor://💻app/packages/server-render/server-register.js","meteor://💻app/packages/server-render/server-sink.js"],"names":["module","export","onPageLoad","Meteor","link","v","startupPromise","Promise","startup","pageLoadCallbacks","Set","callback","add","remove","delete","clear","chain","handler","then","promise","resolve","forEach","WebAppInternals","MagicString","default","SAXParser","createStream","create","ServerSink","registerBoilerplateDataCallback","request","data","arch","sink","maybeMadeChanges","reallyMadeChanges","rewrite","property","html","magic","parser","locationInfo","Object","keys","htmlById","length","stream","lastStart","start","on","name","attrs","selfClosing","loc","some","attr","value","slice","endOffset","append","Buffer","from","location","end","write","bind","head","dynamicHead","body","dynamicBody","statusCode","responseHeaders","headers","isReadable","constructor","appendToHead","appendContent","appendToBody","appendToElementById","id","renderIntoElementById","redirect","code","Location","setStatusCode","setHeader","key","getHeaders","getCookies","cookies","pipe","readable","_read","_readableState","object","content","madeChanges","Array","isArray","elem","toString"],"mappings":"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","file":"/packages/server-render.js","sourcesContent":["import { Meteor } from \"meteor/meteor\";\nimport \"./server-register.js\";\n\nconst startupPromise = new Promise(Meteor.startup);\nconst pageLoadCallbacks = new Set;\n\nexport function onPageLoad(callback) {\n if (typeof callback === \"function\") {\n pageLoadCallbacks.add(callback);\n }\n\n // Return the callback so that it can be more easily removed later.\n return callback;\n}\n\nonPageLoad.remove = function (callback) {\n pageLoadCallbacks.delete(callback);\n};\n\nonPageLoad.clear = function () {\n pageLoadCallbacks.clear();\n};\n\nonPageLoad.chain = function (handler) {\n return startupPromise.then(() => {\n let promise = Promise.resolve();\n pageLoadCallbacks.forEach(callback => {\n promise = promise.then(() => handler(callback));\n });\n return promise;\n });\n};\n","import { WebAppInternals } from \"meteor/webapp\";\nimport MagicString from \"magic-string\";\nimport { SAXParser } from \"parse5\";\nimport { create as createStream } from \"combined-stream2\";\nimport { ServerSink } from \"./server-sink.js\";\nimport { onPageLoad } from \"./server.js\";\n\nWebAppInternals.registerBoilerplateDataCallback(\n \"meteor/server-render\",\n (request, data, arch) => {\n const sink = new ServerSink(request, arch);\n\n return onPageLoad.chain(\n callback => callback(sink, request)\n ).then(() => {\n if (! sink.maybeMadeChanges) {\n return false;\n }\n\n let reallyMadeChanges = false;\n\n function rewrite(property) {\n const html = data[property];\n if (typeof html !== \"string\") {\n return;\n }\n\n const magic = new MagicString(html);\n const parser = new SAXParser({\n locationInfo: true\n });\n\n data[property] = parser;\n\n if (Object.keys(sink.htmlById).length) {\n const stream = createStream();\n\n let lastStart = magic.start;\n parser.on(\"startTag\", (name, attrs, selfClosing, loc) => {\n attrs.some(attr => {\n if (attr.name === \"id\") {\n let html = sink.htmlById[attr.value];\n if (html) {\n reallyMadeChanges = true;\n const start = magic.slice(lastStart, loc.endOffset);\n stream.append(Buffer.from(start, \"utf8\"));\n stream.append(\n typeof html === \"string\"\n ? Buffer.from(html, \"utf8\")\n : html\n );\n lastStart = loc.endOffset;\n }\n return true;\n }\n });\n });\n\n parser.on(\"endTag\", (name, location) => {\n if (location.endOffset === html.length) {\n // reached the end of the template\n const end = magic.slice(lastStart);\n stream.append(Buffer.from(end, \"utf8\"));\n }\n });\n\n data[property] = stream;\n }\n\n parser.write(html, parser.end.bind(parser));\n }\n\n if (sink.head) {\n data.dynamicHead = (data.dynamicHead || \"\") + sink.head;\n reallyMadeChanges = true;\n }\n\n if (Object.keys(sink.htmlById).length > 0) {\n // We don't currently allow injecting HTML into the except\n // by calling sink.appendHead(html).\n rewrite(\"body\");\n rewrite(\"dynamicBody\");\n }\n\n if (sink.body) {\n data.dynamicBody = (data.dynamicBody || \"\") + sink.body;\n reallyMadeChanges = true;\n }\n\n if (sink.statusCode) {\n data.statusCode = sink.statusCode;\n reallyMadeChanges = true;\n }\n\n if (Object.keys(sink.responseHeaders)){\n data.headers = sink.responseHeaders;\n reallyMadeChanges = true;\n }\n\n return reallyMadeChanges;\n });\n }\n);\n","export class ServerSink {\n constructor(request, arch) {\n this.request = request;\n this.arch = arch;\n this.head = \"\";\n this.body = \"\";\n this.htmlById = Object.create(null);\n this.maybeMadeChanges = false;\n this.statusCode = null;\n this.responseHeaders = {};\n }\n\n appendToHead(html) {\n if (appendContent(this, \"head\", html)) {\n this.maybeMadeChanges = true;\n }\n }\n\n appendToBody(html) {\n if (appendContent(this, \"body\", html)) {\n this.maybeMadeChanges = true;\n }\n }\n\n appendToElementById(id, html) {\n if (appendContent(this.htmlById, id, html)) {\n this.maybeMadeChanges = true;\n }\n }\n\n renderIntoElementById(id, html) {\n this.htmlById[id] = \"\";\n this.appendToElementById(id, html);\n }\n\n redirect(location, code = 301) {\n this.maybeMadeChanges = true;\n this.statusCode = code;\n this.responseHeaders.Location = location;\n }\n\n // server only methods\n setStatusCode(code) {\n this.maybeMadeChanges = true;\n this.statusCode = code;\n }\n\n setHeader(key, value) {\n this.maybeMadeChanges = true;\n this.responseHeaders[key] = value;\n }\n\n getHeaders() {\n return this.request.headers;\n }\n\n getCookies() {\n return this.request.cookies;\n }\n}\n\nexport function isReadable(stream) {\n return (\n stream !== null &&\n typeof stream === 'object' &&\n typeof stream.pipe === 'function' &&\n stream.readable !== false &&\n typeof stream._read === 'function' &&\n typeof stream._readableState === 'object'\n );\n}\n\nfunction appendContent(object, property, content) {\n let madeChanges = false;\n\n if (Array.isArray(content)) {\n content.forEach(elem => {\n if (appendContent(object, property, elem)) {\n madeChanges = true;\n }\n });\n } else if (isReadable(content)) {\n object[property] = content;\n madeChanges = true;\n } else if ((content = content && content.toString(\"utf8\"))) {\n object[property] = (object[property] || \"\") + content;\n madeChanges = true;\n } \n return madeChanges;\n}\n"]}