|
// BEGIN qdd loader |
|
{ |
|
'use strict'; |
|
|
|
const Module = require('module'); |
|
const fs = require('fs'); |
|
const { execSync } = require('child_process'); |
|
|
|
const cacheDir = (process.env.QDD_CACHE || `${process.env.HOME}/.cache/qdd`); |
|
|
|
let entrypoint; |
|
|
|
// 1. Set up the lock tree |
|
|
|
let lockTree; |
|
try { |
|
lockTree = require(process.cwd() + '/package-lock.json'); |
|
parseLockTree(); |
|
} catch (lockTreeErr) { |
|
// get it later in _load |
|
} |
|
|
|
function getLockTree (mainFilename) { |
|
if (lockTree) { |
|
return lockTree; |
|
} |
|
entrypoint = mainFilename; |
|
const content = fs.readFileSync(mainFilename, 'utf8'); |
|
const [beforeJson, afterJson] = content.split(/^\/\*\*package-lock(?:\s|$)/m); |
|
if (afterJson) { |
|
const [json, rest] = afterJson.split(/\*\*\/$/m); |
|
if (rest) { |
|
try { |
|
lockTree = JSON.parse(json.replace(/^\s*\*/mg, "")); |
|
parseLockTree(); |
|
return lockTree; |
|
} catch (e) { |
|
throw new Error('badly formed in-line package-lock'); |
|
} |
|
} |
|
} |
|
throw new Error('no package-lock found'); |
|
} |
|
|
|
function parseLockTree() { |
|
lockTree.requires = lockTree.dependencies; |
|
|
|
function getDep (node, depName) { |
|
const deps = node.dependencies; |
|
return deps && deps[depName] ? deps[depName] : getDep(node.parent, depName); |
|
} |
|
|
|
(function augmentTree (node, parent) { |
|
for (const depName of Object.keys(node.dependencies || {})) { |
|
const dep = node.dependencies[depName]; |
|
dep.parent = node; |
|
augmentTree(dep); |
|
} |
|
node.requiresNodes = {}; |
|
for (const dep of Object.keys(node.requires || {})) { |
|
node.requiresNodes[dep] = getDep(node, dep); |
|
} |
|
delete node.parent; // no longer needed |
|
})(lockTree); |
|
} |
|
|
|
// 2. Shim the module loader |
|
|
|
let installed = false; |
|
|
|
function cache (node) { |
|
const dir = cacheDir + '/' + node.integrity; |
|
if (!installed) { |
|
try { |
|
fs.accessSync(dir, fs.constants.F_OK); |
|
} catch (e) { |
|
execSync(`qdd --onlycache`, { |
|
env: Object.assign({}, process.env, { QDD_LOCKJS: entrypoint }) |
|
}); |
|
} |
|
installed = true; |
|
} |
|
return dir; |
|
} |
|
|
|
let currentParent; |
|
|
|
const origFindPath = Module._findPath; |
|
Module._findPath = function (request, paths, isMain) { |
|
if (isMain) { |
|
return origFindPath(request, paths, isMain); |
|
} |
|
delete currentParent.nextTreeNode; |
|
const maybeOrig = origFindPath(request, paths, isMain); |
|
if (maybeOrig) { |
|
return maybeOrig; |
|
} |
|
const node = currentParent.treeNode; |
|
for (const name of (Object.keys(node.requiresNodes || {}))) { |
|
if (request === name || request.startsWith(name + '/')) { |
|
const newNode = node.requiresNodes[name]; |
|
currentParent.nextTreeNode = newNode; |
|
return origFindPath(request.replace(name, cache(newNode)), paths, isMain); |
|
} |
|
} |
|
}; |
|
|
|
const origResolveFilename = Module._resolveFilename; |
|
Module._resolveFilename = function (request, parent, isMain) { |
|
if (!isMain) { |
|
currentParent = parent; |
|
} |
|
return origResolveFilename(request, parent, isMain); |
|
}; |
|
|
|
const origLoad = Module.prototype.load; |
|
Module.prototype.load = function (filename) { |
|
this.treeNode = this.parent |
|
? (this.parent.nextTreeNode || this.parent.treeNode) |
|
: getLockTree(filename); |
|
return origLoad.call(this, filename); |
|
}; |
|
|
|
module.treeNode = getLockTree(__filename); |
|
currentParent = module; |
|
} |
|
// TODO this actually needs makeRequireFunction, not just module.require |
|
require = module.require.bind(module); |
|
// END qdd loader |
|
|
|
/**package-lock { |
|
"lockfileVersion": 1, |
|
"requires": true, |
|
"dependencies": { |
|
"accepts": { |
|
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", |
|
"integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", |
|
"requires": { |
|
"mime-types": "~2.1.18", |
|
"negotiator": "0.6.1" |
|
} |
|
}, |
|
"ansi-regex": { |
|
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", |
|
"integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" |
|
}, |
|
"array-flatten": { |
|
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", |
|
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" |
|
}, |
|
"body-parser": { |
|
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", |
|
"integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", |
|
"requires": { |
|
"bytes": "3.0.0", |
|
"content-type": "~1.0.4", |
|
"debug": "2.6.9", |
|
"depd": "~1.1.1", |
|
"http-errors": "~1.6.2", |
|
"iconv-lite": "0.4.19", |
|
"on-finished": "~2.3.0", |
|
"qs": "6.5.1", |
|
"raw-body": "2.3.2", |
|
"type-is": "~1.6.15" |
|
} |
|
}, |
|
"bytes": { |
|
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", |
|
"integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" |
|
}, |
|
"content-disposition": { |
|
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", |
|
"integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" |
|
}, |
|
"content-type": { |
|
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", |
|
"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" |
|
}, |
|
"cookie": { |
|
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", |
|
"integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" |
|
}, |
|
"cookie-signature": { |
|
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", |
|
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" |
|
}, |
|
"cowsay": { |
|
"resolved": "https://registry.npmjs.org/cowsay/-/cowsay-1.3.1.tgz", |
|
"integrity": "sha512-3PVFe6FePVtPj1HTeLin9v8WyLl+VmM1l1H/5P+BTTDkMAjufp+0F9eLjzRnOHzVAYeIYFF5po5NjRrgefnRMQ==", |
|
"requires": { |
|
"get-stdin": "^5.0.1", |
|
"optimist": "~0.6.1", |
|
"string-width": "~2.1.1", |
|
"strip-eof": "^1.0.0" |
|
} |
|
}, |
|
"debug": { |
|
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", |
|
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", |
|
"requires": { |
|
"ms": "2.0.0" |
|
} |
|
}, |
|
"depd": { |
|
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", |
|
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" |
|
}, |
|
"destroy": { |
|
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", |
|
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" |
|
}, |
|
"ee-first": { |
|
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", |
|
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" |
|
}, |
|
"encodeurl": { |
|
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", |
|
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" |
|
}, |
|
"escape-html": { |
|
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", |
|
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" |
|
}, |
|
"etag": { |
|
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", |
|
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" |
|
}, |
|
"express": { |
|
"resolved": "http://registry.npmjs.org/express/-/express-4.16.3.tgz", |
|
"integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", |
|
"requires": { |
|
"accepts": "~1.3.5", |
|
"array-flatten": "1.1.1", |
|
"body-parser": "1.18.2", |
|
"content-disposition": "0.5.2", |
|
"content-type": "~1.0.4", |
|
"cookie": "0.3.1", |
|
"cookie-signature": "1.0.6", |
|
"debug": "2.6.9", |
|
"depd": "~1.1.2", |
|
"encodeurl": "~1.0.2", |
|
"escape-html": "~1.0.3", |
|
"etag": "~1.8.1", |
|
"finalhandler": "1.1.1", |
|
"fresh": "0.5.2", |
|
"merge-descriptors": "1.0.1", |
|
"methods": "~1.1.2", |
|
"on-finished": "~2.3.0", |
|
"parseurl": "~1.3.2", |
|
"path-to-regexp": "0.1.7", |
|
"proxy-addr": "~2.0.3", |
|
"qs": "6.5.1", |
|
"range-parser": "~1.2.0", |
|
"safe-buffer": "5.1.1", |
|
"send": "0.16.2", |
|
"serve-static": "1.13.2", |
|
"setprototypeof": "1.1.0", |
|
"statuses": "~1.4.0", |
|
"type-is": "~1.6.16", |
|
"utils-merge": "1.0.1", |
|
"vary": "~1.1.2" |
|
} |
|
}, |
|
"finalhandler": { |
|
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", |
|
"integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", |
|
"requires": { |
|
"debug": "2.6.9", |
|
"encodeurl": "~1.0.2", |
|
"escape-html": "~1.0.3", |
|
"on-finished": "~2.3.0", |
|
"parseurl": "~1.3.2", |
|
"statuses": "~1.4.0", |
|
"unpipe": "~1.0.0" |
|
} |
|
}, |
|
"forwarded": { |
|
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", |
|
"integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" |
|
}, |
|
"fresh": { |
|
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", |
|
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" |
|
}, |
|
"get-stdin": { |
|
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", |
|
"integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=" |
|
}, |
|
"http-errors": { |
|
"resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", |
|
"integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", |
|
"requires": { |
|
"depd": "~1.1.2", |
|
"inherits": "2.0.3", |
|
"setprototypeof": "1.1.0", |
|
"statuses": ">= 1.4.0 < 2" |
|
} |
|
}, |
|
"iconv-lite": { |
|
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", |
|
"integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" |
|
}, |
|
"inherits": { |
|
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", |
|
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" |
|
}, |
|
"ipaddr.js": { |
|
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", |
|
"integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" |
|
}, |
|
"is-fullwidth-code-point": { |
|
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", |
|
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" |
|
}, |
|
"media-typer": { |
|
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", |
|
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" |
|
}, |
|
"merge-descriptors": { |
|
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", |
|
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" |
|
}, |
|
"methods": { |
|
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", |
|
"integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" |
|
}, |
|
"mime": { |
|
"resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", |
|
"integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" |
|
}, |
|
"mime-db": { |
|
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz", |
|
"integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==" |
|
}, |
|
"mime-types": { |
|
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", |
|
"integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", |
|
"requires": { |
|
"mime-db": "~1.36.0" |
|
} |
|
}, |
|
"minimist": { |
|
"resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", |
|
"integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" |
|
}, |
|
"ms": { |
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", |
|
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" |
|
}, |
|
"negotiator": { |
|
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", |
|
"integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" |
|
}, |
|
"on-finished": { |
|
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", |
|
"integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", |
|
"requires": { |
|
"ee-first": "1.1.1" |
|
} |
|
}, |
|
"optimist": { |
|
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", |
|
"integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", |
|
"requires": { |
|
"minimist": "~0.0.1", |
|
"wordwrap": "~0.0.2" |
|
} |
|
}, |
|
"parseurl": { |
|
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", |
|
"integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" |
|
}, |
|
"path-to-regexp": { |
|
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", |
|
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" |
|
}, |
|
"proxy-addr": { |
|
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", |
|
"integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", |
|
"requires": { |
|
"forwarded": "~0.1.2", |
|
"ipaddr.js": "1.8.0" |
|
} |
|
}, |
|
"qs": { |
|
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", |
|
"integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" |
|
}, |
|
"range-parser": { |
|
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", |
|
"integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" |
|
}, |
|
"raw-body": { |
|
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", |
|
"integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", |
|
"requires": { |
|
"bytes": "3.0.0", |
|
"http-errors": "1.6.2", |
|
"iconv-lite": "0.4.19", |
|
"unpipe": "1.0.0" |
|
}, |
|
"dependencies": { |
|
"depd": { |
|
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", |
|
"integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" |
|
}, |
|
"http-errors": { |
|
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", |
|
"integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", |
|
"requires": { |
|
"depd": "1.1.1", |
|
"inherits": "2.0.3", |
|
"setprototypeof": "1.0.3", |
|
"statuses": ">= 1.3.1 < 2" |
|
} |
|
}, |
|
"setprototypeof": { |
|
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", |
|
"integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" |
|
} |
|
} |
|
}, |
|
"safe-buffer": { |
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", |
|
"integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" |
|
}, |
|
"send": { |
|
"resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", |
|
"integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", |
|
"requires": { |
|
"debug": "2.6.9", |
|
"depd": "~1.1.2", |
|
"destroy": "~1.0.4", |
|
"encodeurl": "~1.0.2", |
|
"escape-html": "~1.0.3", |
|
"etag": "~1.8.1", |
|
"fresh": "0.5.2", |
|
"http-errors": "~1.6.2", |
|
"mime": "1.4.1", |
|
"ms": "2.0.0", |
|
"on-finished": "~2.3.0", |
|
"range-parser": "~1.2.0", |
|
"statuses": "~1.4.0" |
|
} |
|
}, |
|
"serve-static": { |
|
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", |
|
"integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", |
|
"requires": { |
|
"encodeurl": "~1.0.2", |
|
"escape-html": "~1.0.3", |
|
"parseurl": "~1.3.2", |
|
"send": "0.16.2" |
|
} |
|
}, |
|
"setprototypeof": { |
|
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", |
|
"integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" |
|
}, |
|
"statuses": { |
|
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", |
|
"integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" |
|
}, |
|
"string-width": { |
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", |
|
"integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", |
|
"requires": { |
|
"is-fullwidth-code-point": "^2.0.0", |
|
"strip-ansi": "^4.0.0" |
|
} |
|
}, |
|
"strip-ansi": { |
|
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", |
|
"integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", |
|
"requires": { |
|
"ansi-regex": "^3.0.0" |
|
} |
|
}, |
|
"strip-eof": { |
|
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", |
|
"integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" |
|
}, |
|
"type-is": { |
|
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", |
|
"integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", |
|
"requires": { |
|
"media-typer": "0.3.0", |
|
"mime-types": "~2.1.18" |
|
} |
|
}, |
|
"unpipe": { |
|
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", |
|
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" |
|
}, |
|
"utils-merge": { |
|
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", |
|
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" |
|
}, |
|
"vary": { |
|
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", |
|
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" |
|
}, |
|
"wordwrap": { |
|
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", |
|
"integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" |
|
} |
|
} |
|
} **/ |
|
|
|
/******/ (function(modules) { // webpackBootstrap |
|
/******/ // The module cache |
|
/******/ var installedModules = {}; |
|
/******/ |
|
/******/ // The require function |
|
/******/ function __webpack_require__(moduleId) { |
|
/******/ |
|
/******/ // Check if module is in cache |
|
/******/ if(installedModules[moduleId]) { |
|
/******/ return installedModules[moduleId].exports; |
|
/******/ } |
|
/******/ // Create a new module (and put it into the cache) |
|
/******/ var module = installedModules[moduleId] = { |
|
/******/ i: moduleId, |
|
/******/ l: false, |
|
/******/ exports: {} |
|
/******/ }; |
|
/******/ |
|
/******/ // Execute the module function |
|
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); |
|
/******/ |
|
/******/ // Flag the module as loaded |
|
/******/ module.l = true; |
|
/******/ |
|
/******/ // Return the exports of the module |
|
/******/ return module.exports; |
|
/******/ } |
|
/******/ |
|
/******/ |
|
/******/ // expose the modules object (__webpack_modules__) |
|
/******/ __webpack_require__.m = modules; |
|
/******/ |
|
/******/ // expose the module cache |
|
/******/ __webpack_require__.c = installedModules; |
|
/******/ |
|
/******/ // define getter function for harmony exports |
|
/******/ __webpack_require__.d = function(exports, name, getter) { |
|
/******/ if(!__webpack_require__.o(exports, name)) { |
|
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); |
|
/******/ } |
|
/******/ }; |
|
/******/ |
|
/******/ // define __esModule on exports |
|
/******/ __webpack_require__.r = function(exports) { |
|
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { |
|
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); |
|
/******/ } |
|
/******/ Object.defineProperty(exports, '__esModule', { value: true }); |
|
/******/ }; |
|
/******/ |
|
/******/ // create a fake namespace object |
|
/******/ // mode & 1: value is a module id, require it |
|
/******/ // mode & 2: merge all properties of value into the ns |
|
/******/ // mode & 4: return value when already ns object |
|
/******/ // mode & 8|1: behave like require |
|
/******/ __webpack_require__.t = function(value, mode) { |
|
/******/ if(mode & 1) value = __webpack_require__(value); |
|
/******/ if(mode & 8) return value; |
|
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; |
|
/******/ var ns = Object.create(null); |
|
/******/ __webpack_require__.r(ns); |
|
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); |
|
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); |
|
/******/ return ns; |
|
/******/ }; |
|
/******/ |
|
/******/ // getDefaultExport function for compatibility with non-harmony modules |
|
/******/ __webpack_require__.n = function(module) { |
|
/******/ var getter = module && module.__esModule ? |
|
/******/ function getDefault() { return module['default']; } : |
|
/******/ function getModuleExports() { return module; }; |
|
/******/ __webpack_require__.d(getter, 'a', getter); |
|
/******/ return getter; |
|
/******/ }; |
|
/******/ |
|
/******/ // Object.prototype.hasOwnProperty.call |
|
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; |
|
/******/ |
|
/******/ // __webpack_public_path__ |
|
/******/ __webpack_require__.p = ""; |
|
/******/ |
|
/******/ |
|
/******/ // Load entry module and return exports |
|
/******/ return __webpack_require__(__webpack_require__.s = 0); |
|
/******/ }) |
|
/************************************************************************/ |
|
/******/ ([ |
|
/* 0 */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
const express = __webpack_require__(1); |
|
const app = express(); |
|
|
|
app.get('/', __webpack_require__(2)); |
|
|
|
app.get('/:name', __webpack_require__(3)); |
|
|
|
app.listen(3000, () => { |
|
console.log('server listening on http://localhost:3000/'); |
|
}); |
|
|
|
|
|
/***/ }), |
|
/* 1 */ |
|
/***/ (function(module, exports) { |
|
|
|
module.exports = require("express"); |
|
|
|
/***/ }), |
|
/* 2 */ |
|
/***/ (function(module, exports) { |
|
|
|
module.exports = (req, res) => { |
|
const url = 'http://localhost:3000/Bob' |
|
res.send(`try <a href=${url}>${url}</a>`); |
|
}; |
|
|
|
|
|
/***/ }), |
|
/* 3 */ |
|
/***/ (function(module, exports, __webpack_require__) { |
|
|
|
const cowsay = __webpack_require__(4); |
|
|
|
module.exports = (req, res) => { |
|
res.send(`<pre>${cowsay.say({ |
|
text: `Hello, ${req.params.name}!` |
|
})}</pre>`); |
|
}; |
|
|
|
|
|
/***/ }), |
|
/* 4 */ |
|
/***/ (function(module, exports) { |
|
|
|
module.exports = require("cowsay"); |
|
|
|
/***/ }) |
|
/******/ ]); |