{"version":3,"sources":["/tools/static-assets/server/runtime.js"],"names":["fs","require","path","createHash","Module","module","constructor","exports","enable","cachePath","createLoader","cacheEnabled","cacheEntries","Object","create","readdirSync","forEach","name","e","code","mkdirSync","Mp","prototype","resolve","id","_resolveFilename","moduleLoad","load","filename","result","apply","arguments","runSetters","resolved","Promise","dynamicImport","then","reifyVersion","version","reifyBabelParse","parse","reifyCompile","compile","compileContent","content","identical","generateLetDeclarations","ast","_compile","options","compiledWithReify","call","jsExt","_extensions","js","stat","statSync","baseKey","update","mtimeMs","ino","size","digest","identicalKey","key","readFileSync","join","origContent","writeFileLater","immediateTimer","pendingWrites","setImmediate","keys","targetPath","tempPath","writeFileSync","renameSync","err"],"mappings":"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","sourcesContent":["const fs = require('fs');\nconst path = require('path');\nconst { createHash } = require(\"crypto\");\nconst Module = module.constructor;\n\nmodule.exports = function enable ({ cachePath, createLoader = true } = {}) {\n let cacheEnabled = !!cachePath;\n let cacheEntries = Object.create(null);\n\n if (cachePath) {\n try {\n fs.readdirSync(cachePath).forEach(name => {\n cacheEntries[name] = true;\n });\n } catch (e) {\n if (e.code === 'ENOENT') {\n fs.mkdirSync(cachePath);\n } else {\n cacheEnabled = false;\n }\n }\n }\n\n const Mp = Module.prototype;\n\n Mp.resolve = function (id) {\n return Module._resolveFilename(id, this);\n };\n\n // Enable the module.{watch,export,...} runtime API needed by Reify.\n require(\"@meteorjs/reify/lib/runtime\").enable(Mp);\n\n const moduleLoad = Mp.load;\n Mp.load = function (filename) {\n const result = moduleLoad.apply(this, arguments);\n if (typeof this.runSetters === \"function\") {\n // Make sure we call module.runSetters (or module.runModuleSetters, a\n // legacy synonym) whenever a module finishes loading.\n this.runSetters();\n }\n return result;\n };\n\n const resolved = Promise.resolve();\n Mp.dynamicImport = function (id) {\n return resolved.then(() => require(id));\n };\n\n const reifyVersion = require(\"@meteorjs/reify/package.json\").version;\n const reifyBabelParse = require(\"@meteorjs/reify/lib/parsers/babel\").parse;\n const reifyCompile = require(\"@meteorjs/reify/lib/compiler\").compile;\n\n function compileContent (content) {\n let identical = true;\n\n try {\n const result = reifyCompile(content, {\n parse: reifyBabelParse,\n generateLetDeclarations: false,\n ast: false,\n });\n if (!result.identical) {\n identical = false;\n content = result.code;\n }\n } finally {\n return { content, identical };\n }\n }\n\n const _compile = Mp._compile;\n Mp._compile = function (content, filename, options) {\n // When cache is enabled, the file has already been compiled\n if (!options || !options.compiledWithReify) {\n content = compileContent(content).content;\n }\n\n return _compile.call(this, content, filename);\n };\n\n if (cacheEnabled) {\n const jsExt = Module._extensions.js;\n Module._extensions['.js'] = function (module, filename) {\n let stat = fs.statSync(filename);\n let baseKey = createHash(\"sha1\")\n .update(`${reifyVersion}\\0${filename}\\0${stat.mtimeMs}\\0${stat.ino}\\0${stat.size}\\0`)\n .digest('hex');\n\n // When files don't use import/export, there is no reason to store\n // an identical copy of the file in the cache. Instead, it stores an empty\n // file with a different suffix to indicate the original file should be used\n let identicalKey = baseKey + '-identical.json';\n let key = baseKey + '.json';\n\n let content;\n if (cacheEntries[key]) {\n content = fs.readFileSync(path.join(cachePath, key), 'utf8');\n } else if (cacheEntries[identicalKey]) {\n content = fs.readFileSync(filename, 'utf8');\n } else {\n let origContent = fs.readFileSync(filename, 'utf8');\n let result = compileContent(origContent);\n content = result.content;\n\n if (result.identical) {\n writeFileLater(identicalKey, '');\n } else {\n writeFileLater(key, content);\n }\n }\n\n return module._compile(content, filename, { compiledWithReify: true });\n }\n }\n\n let immediateTimer = null;\n let pendingWrites = Object.create(null);\n function writeFileLater(key, content) {\n pendingWrites[key] = content;\n if (immediateTimer !== null) {\n return;\n }\n\n immediateTimer = setImmediate(() => {\n immediateTimer = null;\n Object.keys(pendingWrites).forEach(key => {\n try {\n let targetPath = path.resolve(cachePath, key);\n let tempPath = targetPath + '.tmp';\n fs.writeFileSync(tempPath, pendingWrites[key]);\n fs.renameSync(tempPath, targetPath);\n } catch (err) {\n }\n });\n\n pendingWrites = Object.create(null);\n });\n }\n}\n"],"file":"tools/static-assets/server/runtime.js.map"}